|
用51单片机实现的10内秒表仿真原理图如下:
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar count=0;
- uchar code tab[]={
- 0x3f,0x06,0x5b,0x4f,0x66,
- 0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管0123456789
- sbit key1=P3^6;
- sbit key2=P3^7;
- uchar sec,flag,temp,i;
- uchar state;
- void delay(uchar z)
- {
- uchar x;
- while(z--)
- for(x=120;x>0;x--);
- }
- void init()
- {
- P0=0x3f;P2=0x3f;
- flag=0;
- state=1;
- sec=0;
- i=0;
- TMOD=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- PX0=1; //设置优先级为INT0
- EA=1;
- EX0=1;
- }
- void main()
- {
- init();
- while(1)
- {
- if(state!=key2)
- {
- delay(10);
- state=key2;
- //while(key2==0);
- if(state==0)
- {
- delay(10);
- flag=(flag+1)%2;
- switch(flag)
- {
- case 0:
- EA=0;ET0=0;TR0=0;break;
- case 1:
- EA=1;ET0=1;TR0=1;break;
- }
- }
- }
- }
- }
- void timer0() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- if(++i==2)
- {
- i=0;
- ++sec;
- P0=tab[sec/10];
- P2=tab[sec%10];
- if(sec==100)
- sec=0;
- }
- }
- void exter0() interrupt 0
- {
- P0=0x3f;P2=0x3f;i=0;sec=0;
- }
复制代码
|
|