目的如下
用定时器T0编程实现10s秒表功能,要求按下一次按键开始计数,按下两次按键停止计数,按下三次按键计数清0
原理图
其中AT89C521振荡频率为12Mhz
源码
为了方便看得懂,用的代码比较简单基础,所以相对来说比较繁琐冗长
#include<reg52.h> table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; 共阳极 unsigned int count,i,j,count,n; void delay (unsigned int ms) //延时函数 {unsigned char j; while(ms--); for(j=0;j<120;j++); } void int0() interrupt 0 //外部中断0 { n++; if(n>3) {n=1;} } void Timer0() interrupt 1 //定时器T0 {TH0=(65536-50000)/256; //50ms TL0=(65536-50000)%256; i++; if(i==20) //20*50=1000ms =1s {count++; i=0;} } void main() { count=0; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; TR0=0; ET0=1; EX0=1; IT0=1; P0=0xff; P2=0; while(1) { P0=0xff; P2=0x01; P0=table[count/10]; delay(5); P0=0xff; P0=table[count%10]; P2=0x02; delay(5); if(n==1) {TR0=1; if(count==10) {TR0=0;} } if(n==2) {TR0=0;} if(n==3) {count=0;} }
哇,好牛
好厉害