T0方式2实现简单电子时钟仿真试验,keil+protues实现
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- //按4X4键盘的F键 进入设定状态
- //E D 键是前后移动键
- //C按键是调整数值按键
- #include "reg52.h"
- #define uchar unsigned char
- sbit key_h=P1^0;
- sbit key_m=P1^1;
- sbit key_s=P1^2;
- unsigned char Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //段码表
- unsigned int h,m,s,counter;
- void delay1ms(unsigned int i)
- {
- unsigned char j;
- while(i--)
- {
- for(j=0;j<125;j++) //1ms基准延时程序
- {
- ;
- }
- }
- }
- void Display_h(unsigned char x)
- {
- P2=0xfb; //P2.6引脚输出低电平,DS6点亮
- P0=Tab[x/10]; //显示十位
- delay1ms(5);
- P2=0xff;
- P2=0xf7; //P2.7引脚输出低电平,DS7点亮
- P0=Tab[x%10]; //显示个位
- delay1ms(5);
- P2=0xff;
- }
- void Display_m(unsigned char x)
- {
- P2=0xef; //P2.6引脚输出低电平,DS6点亮
- P0=Tab[x/10]; //显示十位
- delay1ms(5);
- P2=0xff;
- P2=0xdf; //P2.7引脚输出低电平,DS7点亮
- P0=Tab[x%10]; //显示个位
- delay1ms(5);
- P2=0xff;
- }
- void Display_s(unsigned char x)
- {
- P2=0xbf; //P2.6引脚输出低电平,DS6点亮
- P0=Tab[x/10]; //显示十位
- delay1ms(5);
- P2=0xff;
- P2=0x7f; //P2.7引脚输出低电平,DS7点亮
- P0=Tab[x%10]; //显示个位
- delay1ms(5);
- P2=0xff;
- }
- /*********************初始化子程序**********************/
- void init()
- {
- TMOD=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- counter=0;
- h=12;m=0;s=0;
- }
- /***************************按键调时间************************/
- void TZ_h()
- {
- h++;
- if(h>24)
- {
- h=0;
- }
- while(key_h!=1);
- TR0=1;
- }
- void TZ_m()
- {
- m++;
- if(m>60)
- {
- m=0;
- }
- while(key_m!=1);
- TR0=1;
- }
- void TZ_s()
- {
- s++;
- if(s>60)
- {
- s=0;
- }
- while(key_s!=1);
- TR0=1;
- }
- /***************************主程序************************/
- void main(void)
- {
- init();
- while(1)
- {
- Display_h(h);
- Display_m(m);
- Display_s(s);
- if(key_h==0)
- delay1ms(20);
- if(key_h==0)
- {
- TR0=0;
- TZ_h();
- }
- if(key_m==0)
- delay1ms(20);
- if(key_m==0)
- {
- TR0=0;
- TZ_m();
- }
- if(key_s==0)
- delay1ms(20);
- if(key_s==0)
- {
- TR0=0;
- TZ_s();
- }
- }
- }
- /*************************定时器0的中断**********************/
- void Time0() interrupt 1 using 2 //再次强调中断子程序执行时间越短越好
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- counter++;
- if(counter==20)
- {
- s++;
- counter=0;
- if(s==60)
- {
- m++;
- s=0;
- if(m==60)
- {
- h++;
- m=0;
- if(h==24)
- h=0;
- }
- }
- }
- }
复制代码
所有资料51hei提供下载:
简单时钟显示实验.rar
(51.09 KB, 下载次数: 40)
|