要求:在原来跑马灯的基础上,增加时间中断和外部中断来实现跑马灯的顺序。
#include<reg52.h>
#include <intrins.h>sbit P32 = P3^2;unsigned char flag=0; //设置标志位(0/1) 1为左移unsigned char LED;unsigned char count=0;void delayms(unsigned char ms){ unsigned char i; while(ms--) { for(i = 0; i < 120; i++); }}void timer0() interrupt 1{ TH0=(65535-50000)/256; TL0=(65535-50000)%256; count++; if(count==20) { count=0; flag=!flag; }}void waibu() interrupt 0{ flag=!flag;}void main(){ //时间中断打开 TMOD=0x11; IE=0x83; //EA=1; ET0=1; TR0=1; //外部中断打开 //IE=0x81; //EA=1; //EX0=1; IT0=1; //为1是边沿触发,为0是电平触发 TH0=(65535-50000)/256; TL0=(65535-50000)%256; LED = 0x01; P1 = LED; while(1) { if(flag==1) { while(1){ if(P1!=0x80) { LED=LED<<1; P1 = LED; delayms(250); //n++; } else if(P1==0x80) { //n=0; LED=0x01; P1=LED; delayms(250); } if(flag==0) break; } } else { while(1) { if(P1!=0x01) { LED=LED>>1; P1 = LED; delayms(250); } else if(P1==0x01) { LED=0x80; P1=LED; delayms(250); } if(flag==1) break; } } }}
本文转自蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366581,如需转载请自行联系原作者