用数码管(8位)显示的数字时钟程序.docx
文本预览下载声明
用数码管(8位)显示的数字时钟程序
用数码管(8位)显示的数字时钟,由于是在开发板上写的程序,所以51 HYPERLINK /zhuti_mcu_1.html \t _blank 单片机的一些I/O口设定并不完全一样,以下程序仅供参考#includereg52.hsbit dula=P2^6;? ?//段选锁存器sbit wela=P2^7;? ?//位选锁存器sbit key1=P3^2;? ?? ?//INT0??选择键sbit key2=P3^4;? ?//T0??时间增加sbit key3=P3^6;? ?? ?//S4??时间减少char a=0,hour=0,minute=0,seconed=0;char h1,h2,m1,m2,s1,s2;char num=0;char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};void delay(char z){??char x,y;for(x=z;x0;x--)??for(y=110;y0;y--);}void display_hour(char h)? ? //显示小时{??h1=h/10;h2=h%10;wela=1;P0=0xfe;??//1111 1110wela=0;P0=0xff;dula=1;P0=table[h1];dula=0;delay(5);wela=1;P0=0xfd;??//1111 1101wela=0;P0=0xff;dula=1;P0=table[h2];dula=0;delay(5);}void display_minute(char m)? ? //显示分钟{??m1=m/10;m2=m%10;wela=1;P0=0xf7;??//1111 0111wela=0;P0=0xff;dula=1;P0=table[m1];dula=0;delay(5);wela=1;P0=0xef;? ?//1110 1111wela=0;P0=0xff;dula=1;P0=table[m2];dula=0;delay(5);}void display_seconed(char s)? ? //显示秒{??s1=s/10;s2=s%10;wela=1;P0=0xbf;? ?//1011 1111wela=0;P0=0xff;dula=1;P0=table[s1];dula=0;delay(5);wela=1;P0=0x7f;??//0111 1111wela=0;P0=0xff;dula=1;P0=table[s2];dula=0;delay(5);}void init()? ?? ?//初始化函数{??TMOD=0x01;? ???//定时器0工作方式1TH0=(65536-45872)/256;??//装初值晶振11.0592? ?50ms为45872TL0=(65536-45872)%256;EA=1;? ?? ?//开总中断ET0=1;? ?? ?//开定时器0中断TR0=1;? ?? ?//开启定时器0}void key()? ?? ?//按键函数,功能为对时间进行调整{??if(key1==0)? ???//key1键按下进入选择并停止定时器{? ?delay(10);??while(!key1);? ? //松手检测??TR0=0;??num++;? ?? ?//没按一次key1??num自加1}if(num==1)? ?? ?//key1按一次进行“小时”调整{? ?if(key2==0)? ???//key2按下时间增加??{? ?delay(10);? ?while(!key2);? ? hour++;? ?if(hour==24)? ?hour=0;??}??if(key3==0)? ?? ?//key3按下时间减少??{? ?delay(10);? ?while(!key3);? ? hour--;? ?if(hour0)? ?hour=23;??}}if(num==2)? ?? ? //按下key1两次进行“分钟调整”{? ?if(key2==0)??{? ?delay(10);? ?while(!key2);? ? minute++;? ?if(minute==60)? ?minute=0;??}??if(key3==0)??{? ?delay(10);? ?while(!key3);
显示全部