数字时钟C语言程序
delay(10); if(key7==0)
{ hour=0; minute=0;
second=0; }
while(!key7); }
} void zhengdianbaoshi()//整点报时(从 50 秒 开始) {
if(hour==hour&&minute==59&&second>5 0)
{BEEP=!BEEP; }
if(second==60) { second=0; minute++; }
if(minute==60) { minute=0;
hour++; }
if(hour==24)
hour=0;
}
} void display() {
P0=0xff;//消影 wela=1; //位打开 P0=wei[0];//显示第一位 wela=0;//锁存 dula=1;//段打开 P0=duan[hour/10];//段赋值 dula=0;//段锁存 delay(10);
7f}; //扫描
void delay(uint z)//延时函数
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init()//初始化中断
{
TMOD=0x10; //定时器 1 以方式 1 定时
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
if(second<59) second++;
else second=0;
while(!key5);
} if(key2==0)
{ delay(10); if(key2==0)
if(hour>0) hour--;
else hour=23;
while(!key2); } if(key4==0) {
delay(10); if(key4==0)
P0=0xff; wela=1; P0=wei[7]; wela=0; dula=1;
P0=duan[second%10]; dula=0; delay(10); } void key_scan()//按键+和{ if(key1==0) { delay(10); if(key1==0)
if(hour<23) hour++;
P0=0xff; wela=1; P0=wei[1]; wela=0; dula=1; P0=duan[hour%10]; dula=0; delay(10);
P0=0xff; wela=1; P0=wei[2]; wela=0; dula=1; P0=0x40; dula=0; delay(10);
P0=0xff; wela=1; P0=wei[5];
wela=0; dula=1; P0=0x40; dula=0; delay(10);
P0=0xff; wela=1; P0=wei[6]; wela=0; dula=1; P0=duan[second/10]; dula=0; delay(10);
else hour=0;
while(!key1); } if(key3==0) {
delay(10); if(key3==0)
if(minute<59) minute++;
else minute=0;
while(!key3); } if(key5==0) {
delay(10); if(key5==0)
sbit key6=P3^5;
sbit key7=P3^6;
sbit BEEP=P1^2;
uchar
code
duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x40};//0-9,横杆Fra bibliotekuchar
code
wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x
} void naozhong()//闹钟七点半,就响 30 秒 {
if(hour==7&&minute==30&&second<30) BEEP=!BEEP;
}
void main()//主函数 {
init(); while(1) {
key_scan(); display(); naozhong(); zhengdianbaoshi(); }
}
本人为单片机初学者,这是本人制作的 一个简单的数字时钟程序,程序比较繁琐, 只适合初学者学习参考使用,因为程序都是 一步步来的,没有跳跃。只要将此程序复制 到 keil,然后编译生成 hex 文件,连到单片 机(实物)就可以直接显示了。希望对有些 人有帮助
#include<reg52.h>//头文件 #define uchar unsigned char #define uint unsigned int//宏定义 uchar count; uint hour,minute,second; uint hour1=0,minute1=0; sbit dula=P2^6; sbit wela=P2^7; sbit key1=P3^0; sbit key2=P3^1; sbit key3=P3^2; sbit key4=P3^3; sbit key5=P3^4;
P0=0xff;
wela=1; P0=wei[3]; wela=0; dula=1; P0=duan[minute/10]; dula=0; delay(10);
P0=0xff; wela=1; P0=wei[4]; wela=0; dula=1; P0=duan[minute%10]; dula=0; delay(10);
if(minute>0) minute--;
else minute=59;
while(!key4);
} if(key6==0) {
delay(10); if(key6==0)
if(second>0) second--;
else second=59;
while(!key6);
} if(key7==0)//复位功能 {
EA=1;//总中断打开
ET1=1;//打开定时中断
TR1=1;//打开定时器 } void time1() interrupt 3 {
TH1=(65536-50000)/256; TL1=(65536-50000)%256; count++;
if(count==20)//1 秒累加一次 { count=0; second++;