数字时钟C程序及仿真
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字时钟C程序及仿
真
-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN
**************************************/
#include <>
unsigned char code SEG7[12]={
0xC0,0xF9,0xA4,0xB0,0x99,0x92,
0x82,0xF8,0x80,0x90,0xbf,0xff,};
unsigned short int tcount;
//sbit set=P1^0;
//sbit up=P1^1;
//sbit down=P1^2;
unsigned char
DisSecondL,DisSecondH,DisMinutL,DisMinutH,DisHourL,DisHourH;
//结构体变量
struct time
{
unsigned char second;
unsigned char minute;
unsigned char hour;
}time1;
//延时子程序
void delay(k)
unsigned int k;
{
unsigned char j;
while((k--)!=0)
for(j=0;j<125;j++);
}
//时钟调整子程序
TimeUpDown(n,x,y)
unsigned char n,x,y;
{
if(up==0)
{
delay(50); //消除抖动
if(up==0)
{
n++;
if(n==x)//上限越界显示为0
n=0;
while(up==0);
}
}
if(down==0)
{
delay(50);
if(down==0)
{
if(n==0)//下限越界显示为最大可显示
n=y;
else
n--;
while(down==0);
}
}
return n;//返回调整后的值
} */
//显示子程序
void display(DisSecondL,DisSecondH,DisMinutL,DisMinutH,DisHourL,DisHourH) {
// 日日日日日日
// 1 2 3 4 5 6
// hH hL mH mL sH sL
// 01 02 04 08 10 20
P2=0x00;
P0=SEG7[DisSecondL]; //显示秒钟的个位
P2=0x20;
delay(3);
P2=0x00;
P0=SEG7[DisSecondH]; //显示秒钟的十位
P2=0x10;
delay(3);
P2=0x00;
P0=SEG7[DisMinutL]; //显示分钟的个位
P2=0x08;
delay(3);
P2=0x00;
P0=SEG7[DisMinutH]; //显示分钟的十位
P2=0x04;
delay(3);
P2=0x00;
P0=SEG7[DisHourL]; //显示小时的个位
P2=0x02;
delay(3);
P2=0x00;
if(DisHourH==0)
{;}
else
{
P0=SEG7[DisHourH]; //显示小时的十位
P2=0x01;
delay(3);
}
}
void main()
{
//unsigned char Flag;
=40;
=03;
=05;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
display(DisSecondL,DisSecondH,DisMinutL,DisMinutH,DisHourL,DisHourH);
if(set == 0) //设置标志位 Flag
{
delay(50);
if(set == 0)
{
TR0 = 0;
Flag++;
if(Flag > 3) //0:显示时间,1:小时调整,2:分钟调整,3:秒调整
Flag = 0;
}
while(set == 0);
}
switch(Flag)
{
case 0:
TR0=1;
display%10,10,%10,10,%10,10);
break;
case 1: //时钟小时调整
TR0=0;
=TimeUpDown,24,23);
display(10,10,10,10,%10,10);
break;
case 2: //时钟分钟调整
=TimeUpDown,60,59);
display(10,10,%10,10,10,10);
break;
case 3: //时钟秒调整
=TimeUpDown,60,59);
display%10,10,10,10,10,10);
break;
//default:
// break;
}
}
}
void t0(void) interrupt 1
{
TH0=(65536-50000)/256; TL0=(65536-50000)%256; tcount++;
if(tcount==20)
{
tcount=0;
++;
}
if >=60)
{
=0;
++;
}
if >=60)
{
=0;
++;
}
if>=12)
{
=1;
}
DisSecondL=%10;
DisSecondH=10;
DisMinutL=%10;
DisMinutH=10;
DisHourL=%10;
DisHourH=10;
}。