C51单片机制作数码管显示数字时钟————可调C源程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
sbit SDI=P1^7 ; //用hc595芯片来控制数码管的位选端
sbit LCK=P1^5 ;
sbit SCK=P1^6 ;
sbit K1=P2^7;
sbit K2=P2^6;
sbit K3=P2^5;
sbit K4=P2^4;
unsigned char tt,sec,sec_ge,sec_shi,min,min_ge,min_shi,hour,hour_ge,hour_shi; void delay(unsigned int t)
{
unsigned int i,j;
for(i=0;i for(j=0;j<120;j++); } unsigned char code table[]= { 0x3F, 0x06, 0x5B, 0x4F, 0x66,0x6D,0x7D,0x07,0x7F,0x6F } ; void hc595(unsigned char m) { unsigned char i; for(i=0;i<8;i++) { if((m&0x80)==0x80) SDI=1; else SDI=0; SCK=0; SCK=1; SCK=0; m=m<<1;//先送最高位,所以左yi } LCK=0; LCK=1; LCK=0; } void huansuan() { if(sec==60) { sec=0; min++; } if(min==60) { min=0; hour++; } if(hour==24) { hour=0; } sec_ge=sec%10; sec_shi=sec/10; min_ge=min%10; min_shi=min/10; hour_ge=hour%10; hour_shi=hour/10; } void display() { hc595(0x00); P3=0x07; hc595(table[sec_ge]); delay(1); hc595(0x00); P3=0x06; hc595(table[sec_shi]); delay(1); hc595(0x00); P3=0x05; hc595(0x40); delay(1); hc595(0x00); P3=0x04; hc595(table[min_ge]); delay(1); hc595(0x00); P3=0x03; hc595(table[min_shi]); delay(1); hc595(0x00); P3=0x02; hc595(0x40); delay(1); hc595(0x00); P3=0x01; hc595(table[hour_ge]); delay(1); hc595(0x00); P3=0x00; hc595(table[hour_shi]); delay(1); hc595(0x00); } void main() { EA=1; TMOD=0X01; ET0=1; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; while(1) { if(tt==20) { tt=0;sec++; } if(K1==0) { delay(20); if(K1==0) { TR0=0; sec++; if(sec==60) sec=0; } delay(20) ; while(!K1) display(); } if(K2==0) { delay(20); if(K2==0) { TR0=0;min++;if(min==60) min=0; } delay(20); while(!K2) display(); } if(K3==0) { delay(20); if(K3==0) { TR0=0;hour++;if(hour==24)hour=0; } delay(20); while(!K3) display(); } if(K4==0) TR0=1; huansuan(); display(); } } void duan1() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; tt++; }