1、/*数码管显示分钟秒钟;LED循环右移*/*用定时器设计一个秒表00-59;开始显示00按下key1加1,key2减1,key3清零key4启动暂停按钮*/ #include#include#define uchar unsigned char #define uint unsigned intsbit key1=P30;sbit key2=P31;sbit key3=P15;sbit key4=P16;sbit we0=P34;sbit we1=P35;sbit we2=P36;sbit we3=P37;sbit led0=P20;sbit led1=P21;sbit led2=P22;sb
2、it led3=P23;sbit led4=P24;sbit led5=P25;sbit led6=P26;sbit led7=P27;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x07f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/0123456789ABCDEFuchar m,n,temp;char num ;void delayms(uint x) uint i,j; for(i=x;i0;i-) for(j=240;j0;j-); void init()temp=0x7f;num=0;T
3、MOD=0x01;/定时器0工作方式1TH0=(65536-50000)/256;/装入初值 50msTL0=(65536-50000)%256;TH1=(65536-50000)/256;/装入初值 50msTL1=(65536-50000)%256;EA=1; /开总中断ET0=1; /开定时器0中断ET1=1;/TR0=1; /启动定时器0 中断TR1=1; void display() uchar shi,ge; shi=num/10; ge=num%10; we3=0; P0=0xff; P0=tableshi; delayms(1); we3=1; we2=0; P0=0xff;
4、P0=tablege; delayms(1); we2=1; keyscan() if(key1=0) delayms(5);if(key1=0) led3=0;num+;if(num=60)num=0; while(!key1); led3=1; if(key2=0) delayms(5);if(key2=0) led2=0; num-;if(num=-1)num=59; while(!key2); led2=1; if(key3=0) delayms(5);if(key3=0) led1=0; num=0; while(!key3); led1=1; if(key4=0) delayms(
5、5); if(key4=0) led0=0; TR0=TR0; while(!key4);led0=1; void main() init();while(1) keyscan(); display(); led4=0; void timer0() interrupt 1TH0=(65536-50000)/256;/装入初值 50msTL0=(65536-50000)%256;n+;if(n=20) n=0; num+; if(num=60) num=0; void timer1() interrupt 3TH1=(65536-50000)/256;/装入初值 50msTL1=(65536-50000)%256;m+;if(m=160)/为什么要达到定时器0的8倍才同步,是因为定时器1只有13位吗 m=0; temp=_cror_(temp,1); P2=temp;