学习日志 姓名:陈文静 日期:2018.7.20
今日学习任务 编写电子钟的程序,要求用6位数码管显示,可以调节时和分,以及清零
今日任务完成情况
(详细说明本日任务是 成功完成该程序的编写;
否按计划完成,开发的
代码量)
今日开发中出现的问题汇总 数码管的第五位总是不显示,后来检查后是仿软件的问题;
今日未解决问题 无
今日开发收获
如何用定时器的方法编写一个简单电子钟的程序;
要常将之前学习的东西拿过来复习
自我评价 不懂就要问;
(是否按开发规范完成 基础有点差;
既定任务,需要改进的地方,与他人合作效果等)
其他 无
电子钟代码:
#include <reg51.h>
sbit m=P3^0;
sbit n=P3^1;
sbit a=P3^2;
unsigned int flag=0,display_flag=0;
//共阴数码管表
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(x)
{
int i;
while(x--)
{
for(i=0;i<80;i++);
}
}
void display1(int m,int n,int k)
{
if(display_flag % 6==0)
{
P0=0xfe;
P1=table[m/10];
}
else if(display_flag % 6==1)
{
P0=0xfd;
P1=table[m%10];
}
else if(display_flag % 6==2)
{
P0=0xfb;
P1=table[n/10];
}
else if(display_flag % 6==3)
{
P0=0xf7;
P1=table[n%10];
}
else if(display_flag % 6==4)
{
P0=0xef;
P1=table[k/10];
}
else if(display_flag % 6==5)
{
P0=0xdf;
P1=table[k%10];
}
}
int miao=0,fen=0,shi=0;
int main()
{
// int miao=0,fen=0,shi=0;
int num=0;
EA=1; //打开中断总开关
ET0=1; //打开定时器中断0开关
TMOD=0x01; //定时器0用工作方式1
TH0=(65535-2000)/256; //高八位
TL0=(65535-2000)%256; //低八位
TR0=1; //启动定时器
while(1)
{
if(flag==5)
{
num++;
if(num==9)
{
miao++;
num=0;
if(miao==60)
{
fen++;
miao=0;
if(fen==60)
{
shi++;
fen=0;
if(shi==24)
{
shi=0;
}
}
}
//display(shi,fen);
}
flag=0;
// display(fen,miao);
}
//display(miao,num)
display1(shi,fen,miao);
}
//display(shi,fen,miao);
return 0;
}
void timer_0() interrupt 1
{
TH0=(65535-2000)/256; //高八位
TL0=(65535-2000)%256; //低八位
display_flag++;
flag++;
if(m==0) // 调分
{
delay(2);
if(m==0) fen++;
if(fen==60) fen=0;
delay(2);
while(!m);
}
if(n==0) // 调小时
{
delay(2);
if(n==0) shi++;
if(shi==24) shi=0;
delay(2);
while(!n);
}
if(a==0)
{
delay(2);
if(a==0)
{
shi=0;
fen=0;
miao=0;
delay(2);
while(!a);
}
}
}