51單片機(jī)用K1-K3控制數(shù)碼管移位顯示設(shè)計(jì) 功能:1.按下 K1 時(shí)加1 計(jì)數(shù)并增加顯示位, 2.按下K2 時(shí)減1 計(jì)數(shù)并減少顯示位, 3.按下K3 時(shí)清零。 #include<reg51.h> //頭文件 #define uchar unsigned char // 把uchar 定義為usigned char 為后面定義的時(shí)候方便 #define uint unsigned int uchar code acode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//其陽(yáng)極數(shù)碼管0到9的數(shù)字,即為段碼 uchar codeindex[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//位碼 ucharbuffer[]={0,10,10,10,10,10,10,10};//待顯示到各數(shù)碼管的數(shù)字緩沖(開始僅在0位顯示0,其他黑屏) void delay(uchar x) //延時(shí)程序 { uchar i; while(x--) for(i=0;i<120;i++); } void show() //顯示程序 { uchar i; for(i=0;i<8;i++) { P0=0xff;//消除對(duì)P0口的影響 P0=acode[buffer];//P0口為連接數(shù)碼管的端口 P2=index;// 位選 delay(2);//延時(shí) } } void main()//主程序 { uchar i,key1,keycount=0;//定義變量i,key1,keycount P0=0xff; P1=0xff; P2=0x00; while(1) { show(); P1=0xff; key1=P1;/將P1的狀態(tài)保存到key1中 switch (key1)//通過P1的狀態(tài)來(lái)決定作什么操作 { case 0xfe: keycount++;//當(dāng)P1=0xfe時(shí)即P1.0=0,即k1按下 if(keycount>8) keycount=8; buffer[keycount-1]=keycount;//按下 K1 時(shí)加1 計(jì)數(shù)并增加顯示位 break; case 0xfd: if(keycount>0) buffer[--keycount]=10;//當(dāng)P1=0xfd時(shí)即P1.1=0,即k2按下 break; 按下 K2時(shí)減1 計(jì)數(shù)并減少顯示位 case 0xfb: buffer[0]=0; for(i=0;i<8;i++) buffer=10;//當(dāng)P1=0xfb時(shí)即P1.2=0,即k2按下 keycount=0;//按下K3 時(shí)清零。 } while(P1!=0xff) show(); //查詢是否有鍵按下,若沒有繼續(xù)判斷,若有則顯示出來(lái)相應(yīng)結(jié)果 } } Protues仿真圖: file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
|