单片机简单实验,中断定时一秒让7段数码管加一,即从零到九变化,用汇编语言哦!

发布时间:2019-08-09 15:04:09

单片机简单实验,中断定时一秒让7段数码管加一,即从零到九变化,用汇编语言哦!

推荐回答

//开始 P2^0//暂停 P2^1//清零 P2^2#include unsigned char Lcd_code[8];unsigned char code disp_code[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90};unsigned char c_flag;void scanf(void);void InitTimer0(void){ TMOD = 0x01; TH0 = 0xf8; TL0 = 0x30; EA = 1; ET0 = 1; TR0 = 1;}void main(void){InitTimer0();while(1);}void Timer0Interrupt(void) interrupt 1 //5ms{static unsigned char Seg,Sec;unsigned char i; TH0 = 0xf8; TL0 = 0x30;if(++Seg>=8)Seg=0;//P3=~(0x01<<Seg); //数码位选 我的单片机是8550驱动的这里要取反P3=0x01</数码位选if(Seg==6) P0=disp_code[Lcd_code[Seg]]&0x7f; //输出的数+点else P0=disp_code[Lcd_code[Seg]]; //输出的数if(c_flag==1) { if(++Sec>=50) { P2_7=~P2_7; for(i=8;i>0;i--) { if(Lcd_code[i-1]<9){Lcd_code[i-1]++;break;} else Lcd_code[i-1]=0; } Sec=0; } }if(c_flag==2) { for(i=0;i<8;i++){Lcd_code[i]=0x00;} Sec=0; }scanf();}void scanf(void){static unsigned char wait;unsigned char key_code;key_code=P1&0x07;if(key_code!=0x07) { if(++wait>=100) { wait=0; } if(wait==2) { switch(key_code) { case 0x06:c_flag=1;break; case 0x05:c_flag=0;break; case 0x03:c_flag=2;break; default:break; } } }else wait=0;}
以上问题属网友观点,不代表本站立场,仅供参考!