|
本帖最后由 sungod006 于 2020-1-18 21:47 编辑
//8位动态数码管显示电子时钟,P1口接段码、P0口接位选
#include <reg52.h>
#include <stddef.h>
#define uchar unsigned char
#define uint unsigned int
uchar i,sec,min,h;
uchar timestr[8];
uchar code tab[]={ //段码高电平有效
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, //0,1,2,3,4,5,6,7
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71, //8,9,A,B,C,D,E,F
0x40}; //-
void init();
void delay(uint);
void time_display();
void LED_Display();
void time();
void main()
{
init();
while(1)
{
time_display();
}
}
void init()
{
i=0;
sec=0;
min=0;
h=0;
EA=1;
ET0=1;
TMOD=0x01; //定时器方式一
TH0=0x4c; //定时50mS ,11.0592MHz晶振
TL0=0xf7;
TR0=1;
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void time_display()
{
timestr[7]=sec%10;
timestr[6]=sec/10;
timestr[5]=0x10;
timestr[4]=min%10;
timestr[3]=min/10;
timestr[2]=0x10;
timestr[1]=h%10;
timestr[0]=h/10;
LED_Display();
}
void LED_Display() // LED正常显示
{
uchar a,Wei;
Wei=0x80; // 位选数据,从左边开始显示
P0=0;
for(a=0;a<8;a++) // 共8个八段管
{
P1=tab[timestr[a]]; // 发送显示数据
P0=Wei; // 发送位选数据
delay(3);
Wei=Wei>>1; // 位选数据右移一位
}
}
void T0_rpt() interrupt 1
{
TH0=0x4c; //定时50mS ,11.0592MHz
TL0=0xf7;
i++;
time();
TR0=1;
}
------完整程序见附件
|
-
-
电子时钟.zip
979 Bytes, 下载次数: 34, 下载积分: 黑币 -5
|