导航:首页 > 编程语言 > 52单片机数码管程序

52单片机数码管程序

发布时间:2025-08-08 12:41:02

㈠ 如何利用单片机让4位数码管显示

程序如下(用的是STC89C52芯片):

#include<reg52.h>//52系列单片机头文件

#defineucharunsignedchar

#defineuintunsignedint

uintx,y;

ucharcodetable[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};//共阴极数码管编码

voiddisplay(uchar,uchar,uchar,uchar);//声明子函数

voiddelay(int);//声明子函数

voidmain()

{

while(1)

{

display(1,2,3,4);//主程序始终调用数码管显示子程序

}

}

voiddisplay(uchara,ucharb,ucharc,uchard)

{

P2=0xef;

P0=table[a];//给第一个数码管送"a"

delay(1);//延时1ms

P2=0xdf;

P0=table[b];//给第二个数码管送"b"

delay(1);//延时1ms

P2=0xbf;

P0=table[c];//给第三个数码管送"c"

delay(1);//延时1ms

P2=0x7f;

P0=table[d];//给第三个数码管送"d"

delay(1);//延时1ms

}

voiddelay(uintz)//延时子函数

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

(1)52单片机数码管程序扩展阅读

led数码管是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。led数码管常用段数一般为7段有的另加一个小数点,还有一种是类似于3位“+1”型。

位数有半位,1,2,3,4,5,6,8,10位等等,led数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。

㈡ 单片机控制一个4位的共阴数码管通电的状态下显示时间的程序

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit PRESS1=P1^0;
sbit PRESS2=P1^1;
sbit PRESS3=P1^2;
uint a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0到9
uint b[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
int miao=45,fen=58,shi=15;
uint jishu;
uint miaog,miaos,feng,fens,shig,shis;
int ji;
void init()//初始化函数设置中断寄存器的值。
{
jishu=0;
TMOD=0x01;
TR0=1;
ET0=1;
EA=1;
TH0=0x3c;
TL0=0xb0;

}
void delay(x)//延时函数。
{
uint i,j;
for(i=x;i>0;i--)
for(j=120;j>0;j--);
}
void xian()//把时分秒送到数码管显示。
{
uint i;
miaog=miao%10;
miaos=miao/10;
feng=fen%10;
fens=fen/10;
shig=shi%10;
shis=shi/10;
for(i=0;i<8;i++)
{
switch(i)
{
case 0:P3=b[7];P2=a[miaog];break;
case 1:P3=b[6];P2=a[miaos];break;
case 2:P3=b[5];P2=0x40;break;
case 3:P3=b[4];P2=a[feng];break;
case 4:P3=b[3];P2=a[fens];break;
case 5:P3=b[2];P2=0x40;break;
case 6:P3=b[1];P2=a[shig];break;
case 7:P3=b[0];P2=a[shis];break;
}
delay(1);
};
}
void jiance()//检测键是否按下按不同键实现不同的处理。
{
if(PRESS1==0)
{
delay(2);
if(PRESS1==0)
{
while(!PRESS1);
ji++;
if(ji>=4)
ji=0;
}
}
if(ji==1)
{
if(PRESS2==0)
{
delay(1);
while(!PRESS2);
miao++;
if(miao>=60)
{
miao=0;
fen++;
}
}
if(PRESS3==0)
{
delay(1);
while(!PRESS3);
miao--;
if(miao<0)
{
miao=59;

}
}
}
if(ji==2)
{
if(PRESS2==0)
{
delay(1);
while(!PRESS2);
fen++;
if(fen>=60)
{
fen=0;
shi++;
}
}
if(PRESS3==0)
{
delay(1);
while(!PRESS3);
fen--;
if(fen<0)
{
fen=59;

}
}
}
if(ji==3)
{
if(PRESS2==0)
{
delay(1);
while(!PRESS2);
shi++;
if(shi>=24)
{
shi=0;

}
}
if(PRESS3==0)
{
delay(1);
while(!PRESS3);
shi--;
if(shi<0)
{
shi=23;

}
}
}
if(ji==0)
EA=1;
else
EA=0;
}

void main()
{
init();
while(1)
{
xian();
jiance();

}
}
void an() interrupt 1 //计时中断0工作方式1函数。
{
TH0=0x3c;
TL0=0xb0;
jishu++;
if(jishu==20)
{
jishu=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
shi=0;
}
}
}
}

㈢ 求单片机数码管倒计时程序

#include<reg52.h>
#include <intrins.h> //内部包含延时函数 _nop_();
#define uchar unsigned char
#define uint unsigned int sbit d1=P2^0; sbit key1=P0^4;
sbit SDATA_595=P0^0; //串行数据输入 ----接板卡上的SPI 数据信号输入端
sbit SCLK_595=P0^1; //移位时钟脉冲(输入口) ---接板卡上的SPO----串行时钟线----SHcp移位时钟信号输入端
sbit RCK_595=P0^2; //输出锁存器控制脉冲 ----接板卡上SPK STcp锁存信号输入端
uchar code an[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar num=60;
void delay(uint z);
void aa595_in(uchar Data) {
uchar i;
for(i=0;i<8;i++)
{SCLK_595=0; Data<<=1; SDATA_595=CY;
SCLK_595=1; SCLK_595=0;
}
}
void a595_in(uchar Data) {
uchar i;
for(i=0;i<8;i++) {
SCLK_595=0; Data<<=1; SDATA_595=CY;
SCLK_595=1; SCLK_595=0;
}
}
void aa595_out(void) {
RCK_595=0;
_nop_(); _nop_();
RCK_595=1;
_nop_(); _nop_();
RCK_595=0;
}
void main() {
uchar ge,shi;
while(1) {
if(key1==0) {
delay(10);
if(key1==0)
{d1=0; num--;
if(num==0)
num=60;}
while(!key1);//松手检测
delay(10);//延时10ms
while(!key1);//再松手检测
}
else d1=1;
// aa595_in(an[num]);
// aa595_in(wei[3]);
shi=num/10;
ge=num%10;
a595_in(an[shi]);
aa595_in(wei[3]);
aa595_out();
delay(10);
aa595_in(an[ge]);
aa595_in(wei[2]);
aa595_out();
delay(10);}
}
void delay(uint z) {
uint x,y;
for(x=100;x>0;x--) for(y=z;y>0;y--);
}//延时子程序,延时Zms

阅读全文

与52单片机数码管程序相关的资料

热点内容
js怎么动态删除div 浏览:77
怎么全选文件 浏览:53
c语音陷阱程序 浏览:404
微信火车票捡漏有用吗 浏览:161
如何查看有没有出现网络故障 浏览:147
web共享文件夹 浏览:447
下列关于ps打开文件的操作 浏览:909
为什么会有街电app 浏览:56
U盘修复了还是乱码文件打不开 浏览:75
湘潭编程培训哪里有 浏览:989
公安系统职务序列改革文件 浏览:930
平板蓝牙接收的文件放在哪里 浏览:940
cad崩溃了去哪里找文件 浏览:62
本地小说导入豌豆小说哪个文件夹 浏览:693
苹果手机不压缩发视频 浏览:590
传奇游戏盒子app哪个好 浏览:235
ps做软膜文件分辨率最小多少 浏览:708
lg显示器颜色配置文件 浏览:625
阿里小宝卡有哪些免费流量的app 浏览:900
操作系统监控程序 浏览:307

友情链接