按K1數碼管加一,按K2數碼管減一,按K3打開和停止中斷,按K4清零,此程序在自己制作的學習板(資料: http://www.zg4o1577.cn/mcu/1019.html)上正常運行.
#include"reg51.h" #define uchar unsigned char uchar code smg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar shi,ge,num,numt0; void delayms(uchar aa) { uchar i,j; for(i=aa;i>0;i--) for(j=110;j>0;j--); } sbit K1=P3^0; sbit K2=P3^1; sbit K3=P3^2; sbit K4=P3^3; sbit wx1=P1^0; sbit wx2=P1^1; void display(num) { shi=num/10; ge=num%10; wx1=1; P2=smg[shi]; delayms(10); wx1=0; wx2=1; P2=smg[ge]; delayms(10); wx2=0; } void init() { TMOD=0x01; TH0=(65536-45872)/256; TL0=(65536-45872)%256; EA=1; ET0=1; } void Kscan() { if(!K1) { delayms(10); if(!K1) { num++; if(num==60) num=0; while(!K1); } } if(!K2) { delayms(10); if(!K2) { if(num==0) num=60; num--; while(!K2); } } if(!K3) { delayms(10); if(!K3) { while(!K3); TR0=~TR0; } } if(!K4) { delayms(10); if(!K4) { num=0; while(!K4); } } } void main() { init(); while(1) { Kscan(); display(num); } } void T0_timer() interrupt 1 { TH0=(65536-45872)/256; TL0=(65536-45872)%256; numt0++; if(numt0==20) { numt0=0; num++; if(num==60) num=0; } }