我用手机秒表和它对比,手机60秒跑完了,仿真软件还剩下12秒没跑,差这么多吗?
单片机源程序如下:
- #include "reg52.h"
- #define smgled P0
- unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
- int num=60,count=0;
- sbit smg1=P1^0;
- sbit smg2=P1^1;
- sbit KEY=P3^2;
- unsigned char flag=0;
- //定时10微秒
- void delay_10us(unsigned int ten_us)
- {
- while(ten_us--);
- }
- void main()
- {
- TMOD|=0X01;//选择为定时器0模式,工作方式1
- TH0=0X3C; //定时50ms
- TL0=0XB0;
- ET0=1;//打开定时器0中断允许
- EA=1;//打开总中断
- //外部中断0
- IT0=1;
- EX0=1;//打开INT0的中断允许
-
- flag=0;
-
- num=60;
- while(1)
- {
- smgled=0XFF;//清屏
- smgled=table[num/10];//显示十位
- smg1=1;
- smg2=0;
- delay_10us(500);
- smgled=0XFF;//清屏
- smgled=table[num%10];//显示个位
- smg1=0;
- smg2=1;
- delay_10us(500);
- if(flag)
- TR0=1;//打开定时器
- else
- {
- num=60;
- TR0=0;//关掉定时器
- }
- if(num==0) //判断是否到达60秒
- {
- flag=0;
- num=60;
- }
- if(count==20)//判断是否到1秒
- {
- num--;
- count=0;
- }
- }
- }
- void timer() interrupt 1
- {
- TH0=0X3c; //给定时器赋初值,定时50ms
- TL0=0Xb0;
- count++;
- }
- void exti0() interrupt 0 //外部中断0中断函数
- {
- delay_10us(1000);
- if(KEY==0)
- flag=!flag;
- }
复制代码
222、60秒倒计时秒表.rar
(160.02 KB, 下载次数: 2)
|