资源描述:
《单片机 定时器 中断 数码管 流水灯》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、单片机定时器中断数码管流水灯题目:利用动态扫描和定时器1在数码管上显示出从765432开始以1/10秒的速度往下递减直至765398并保持显示此数,与此同时利用定时器0以500MS速度进行流水灯从上至下移动,当数码管上数减到停止时,实验板上流水灯也停止然后全部开始闪烁,3秒后(用T0定时)流水灯全部关闭、数码管上显示出“HELLO”。到此保持住。 程序:#include#include#defineuintunsignedint#defineucharunsignedcharuchartemp,swan
2、,wan,qian,ba,sh,g,bai,shi,ge,t,t1,m,i,f,w,t0;uintaa;ucharbook[6]={7,6,5};ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x76,0x79,0x38,0x38,0x3f,0};ucharcodeguo[]={16,17,18,19,20,22};unsignedcharcode seg[]={0,1,2,3,4,5,6,7}
3、;voidsor(){ aa=432; EA=1; ET0=1; ET1=1; TMOD=0x11; TR0=1; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR1=1; TH1=(65536-50000)/256; TL1=(65536-50000)%256;}voiddelay(uintz){ uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}voiddisplay(void){ while(1) { if(w!=1) m=bo
4、ok[i]; elsem=guo[i]; P0=table;//取显示数据,段码 P2=seg[i]; //取位码 delay(1);//扫描隙延时,时间太长会闪烁,太短会造成重影,这里使用长时间方便了解显示原理 i++; if(6==i) //检测8位扫描完全? i=0; } }voidmain(){ sor(); temp=0xfe; P1=temp; while(1) { display(); } }voidtime0()interrupt1{ if(f!=1) {TH0=(6
5、5536-50000)/256; TL0=(65536-50000)%256; t++; if(t==10) { t=1; temp=_crol_(temp,1); P1=temp; } } elseif(t0<=60) P1=~P1; }voidtimer1()interrupt3{ TH1=(65536-50000)/256; TL1=(65536-50000)%256; t1++; if(t1==2) { t1=0; book[3]=aa/100; book[4]=aa%100/10; book[5]
6、=aa%10; if(aa>398) aa--; else {f=1; TH0=(65536-50000)/256; TL0=(65536-50000)%256; t=0; t0++; if(t0>60) {TR0=0; TR1=0; w=1; } // while(1); } } }