程序如下(用的是STC89C52芯片):
#include<reg52.h>//52系列单片机头文件
#define uchar unsigned char
#define uint unsigned int
uint x,y
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71}//共阴极数码管编码
void display(uchar,uchar,uchar,uchar)//声明子函数
void delay(int)//声明子函数
void main()
{
while(1)
{
display(1,2,3,4)//主程序始终调用数码管显示子程序
}
}
void display(uchar a,uchar b,uchar c,uchar d)
{
P2=0xef\t
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
}
void delay(uint z)//延时子函数
{
uint x,y
for(x=zx>0x--)
for(y=110y>0y--)
}
扩展资料
led数码管是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。led数码管常用段数一般为7段有的另加一个小数点,还有一种是类似于3位“+1”型。
位数有半位,1,2,3,4,5,6,8,10位等等,led数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。
参考资料来源:百度百科-数码管
#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=xi>0i--)
for(j=120j>0j--)
}
void xian()//把时分秒送到数码管显示。
{
uint i
miaog=miao%10
miaos=miao/10
feng=fen%10
fens=fen/10
shig=shi%10
shis=shi/10
for(i=0i<8i++)
{
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=0x40break
case 3:P3=b[4]P2=a[feng]break
case 4:P3=b[3]P2=a[fens]break
case 5:P3=b[2]P2=0x40break
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 duan() 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
}
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)