学习日志 姓名: 徐雪 日期: 2017.07.20
今日学习任务 | 完成基于单片机的电子秒表程序设计 |
今日任务完成情况 (详细说明本日任务是否按计划完成,开发的代码量。)
| 今日任务已按计划完成。编写了92行代码,实现了数码管6位电子秒表功能,从1秒计到999999秒,具有开始,暂停,清零,继续的四种按键功能。
|
今日开发中遇到的问题汇总 | 数字改变太快 |
今日未解决问题 | 无 |
今日开发收获 | 1.解决了程序中的错误; 2.用延时程序实现数码管的动态显示; 3.学会了掼蛋; |
自我评价 (是否规范完成指定任务,需要改进的地方,与他人合作等。) | 在指定时间完成了程序设计,数码管最后一位显示不清楚,计到80000秒的时候开始不稳定。 |
其他 | 无 |
|
|
源程序
#include<reg51.h>
#define uchar unsigned char
int b=0,a=0;
sbit wei1=P0^0;
sbit wei2=P0^1;
sbit wei3=P0^2;
sbit wei4=P0^3;
sbit wei5=P0^4;
sbit wei6=P0^5;
sbit key1=P3^2;
sbit key2=P3^1;
sbit key3=P3^3;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};
void Delay1ms(int i) //1ms延时程序 动态显示
{
int j;
for(;i>0;i--)
{
for(j=0;j<164;j++);
}
}
void display(int a ) //显示数字
{
wei1=0;
P1= table[a/100000];
Delay1ms(1);
wei1=1;
wei2=0;
P1= table[a/10000%10];
Delay1ms(1);
wei2=1;
wei3=0;
P1=table[a/1000%10];
Delay1ms(1);
wei3=1;
wei4=0;
P1= table[a/100%10];
Delay1ms(1);
wei4=1;
wei5=0;
P1= table[a/10%10];
Delay1ms(1);
wei5=1;
wei6=0;
P1=table[a/10];
Delay1ms(1);
wei6=1;
}
void main( )//主程序
{ P0=0xc0;
P1=table[0];
TMOD=0x01;// 定时器1工作方式一
EA=1;
ET0=1;
TH0=(65536-1000)/256;//定时1ms
TL0=(65536-1000)%256;
if(key2==0)//判断按键是否按下
{
TR0=1; //启动定时器
while(1)
{
display(b);
if(key1==0)
{
TR0=0; //关闭定时器
}while(key1==0);
if(key3==0)
{
TR0=0;
b=0;
}
}
}while(key2==0);//等待按键抬起
}
//中断子程序
void Timer_0() interrupt 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
b++;
if(b==1000000) b=0;
}