數(shù)碼管動態(tài)顯示的三種實驗_第1頁
數(shù)碼管動態(tài)顯示的三種實驗_第2頁
數(shù)碼管動態(tài)顯示的三種實驗_第3頁
數(shù)碼管動態(tài)顯示的三種實驗_第4頁
數(shù)碼管動態(tài)顯示的三種實驗_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、/* 實 驗 名 : 動態(tài)顯示數(shù)碼管實驗* 使用的IO : 數(shù)碼管使用P0,P2.2,P2.3,P2.4鍵盤使用P1* 實驗效果 : 按矩陣鍵盤分別顯示在數(shù)碼管上面顯示十六進制的0到F。* 注 意 :*/#include<reg51.h>/#include<intrins.h>#define GPIO_DIG P0#define GPIO_KEY P1sbit LSA=P22;sbit LSB=P23;sbit LSC=P24;unsigned char code DIG_CODE17=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x

2、7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼unsigned char KeyValue;/用來存放讀取到的鍵值unsigned char KeyState;/記錄按鍵的狀態(tài),0沒有,1有unsigned char DisplayData8;/用來存放要顯示的8位數(shù)的值unsigned char Num;/用來存放中斷的時候顯示的第位數(shù)值void Delay50us(); /延時50usvoid KeyDown(); /檢測按鍵函數(shù)void DigDisplay(); /動態(tài)顯示函數(shù)void

3、 TimerConfiguration();/定時器初始化設(shè)置/* 函 數(shù) 名 : main* 函數(shù)功能 : 主函數(shù)* 輸 入 : 無* 輸 出 : 無*/void main(void)TimerConfiguration();KeyState=0; /初始化按鍵狀態(tài)while(1)KeyDown(); if(KeyState=1)DisplayData7=DisplayData6;DisplayData6=DisplayData5;DisplayData5=DisplayData4;DisplayData4=DisplayData3;DisplayData3=DisplayData2;Dis

4、playData2=DisplayData1;DisplayData1=DisplayData0;DisplayData0=DIG_CODEKeyValue;KeyState=0;/DigDisplay();/* 函 數(shù) 名 : TimerConfiguration* 函數(shù)功能 : 定時器初始化* 輸 入 : 無* 輸 出 : 無*/void TimerConfiguration()TMOD=0X02;/選擇為定時器0模式,工作方式2,僅用TRX打開啟動。TH0=0X9C;/給定時器賦初值,定時100usTL0=0X9C;ET0=1;/打開定時器0中斷允許EA=1;/打開總中斷TR0=1;/打

5、開定時器/* 函 數(shù) 名 : DigDisplay* 函數(shù)功能 : 使用數(shù)碼管顯示* 輸 入 : 無* 輸 出 : 無*/void DigDisplay()unsigned char i,j;/for(i=0;i<8;i+)/GPIO_DIG=0x00;/消隱switch(i) /位選,選擇點亮的數(shù)碼管,case(0):LSA=0;LSB=0;LSC=0; break;case(1):LSA=1;LSB=0;LSC=0; break;case(2):LSA=0;LSB=1;LSC=0; break;case(3):LSA=1;LSB=1;LSC=0; break;case(4):LSA=

6、0;LSB=0;LSC=1; break;case(5):LSA=1;LSB=0;LSC=1; break;case(6):LSA=0;LSB=1;LSC=1; break;case(7):LSA=1;LSB=1;LSC=1; break;GPIO_DIG=DisplayDatai;i+;if(i>7)i=0;/j=10; /掃描間隔時間設(shè)定/while(j-)/Delay50us();/GPIO_DIG=0x00;/消隱/* 函 數(shù) 名 : KeyDown* 函數(shù)功能 : 檢測有按鍵按下并讀取鍵值* 輸 入 : 無* 輸 出 : 無*/void KeyDown(void)unsigne

7、d int a=0;GPIO_KEY=0x0f;if(GPIO_KEY!=0x0f) Delay50us();a+;a=0;if(GPIO_KEY!=0x0f)ET0=0;/關(guān)定時器中斷KeyState=1;/有按鍵按下/測試列GPIO_KEY=0X0F;/ Delay50us();switch(GPIO_KEY)case(0X07):KeyValue=0;break;case(0X0b):KeyValue=1;break;case(0X0d): KeyValue=2;break;case(0X0e):KeyValue=3;break;/default:KeyValue=17;/檢測出錯回復(fù)1

8、7意思是把數(shù)碼管全滅掉。/測試行GPIO_KEY=0XF0;Delay50us();switch(GPIO_KEY)case(0X70):KeyValue=KeyValue;break;case(0Xb0):KeyValue=KeyValue+4;break;case(0Xd0): KeyValue=KeyValue+8;break;case(0Xe0):KeyValue=KeyValue+12;break;/default:KeyValue=17;ET0=1;/開定時器中斷while(a<5000)&&(GPIO_KEY!=0xf0) /檢測按鍵松手檢測Delay50u

9、s();a+;a=0;/* 函 數(shù) 名 : Delay50us* 函數(shù)功能 : 延時函數(shù),延時50us* 輸 入 : 無* 輸 出 : 無*/void Delay50us(void) /延時50us誤差 0us unsigned char a,b; for(b=1;b>0;b-) for(a=22;a>0;a-);/* 函 數(shù) 名 : Delay50us* 函數(shù)功能 : 延時函數(shù),延時50us* 輸 入 : 無* 輸 出 : 無*/void Timer() interrupt 1DigDisplay();/* 實 驗 名 : 動態(tài)顯示數(shù)碼管實驗* 使用的IO : 數(shù)碼管使用P0,P

10、2.2,P2.3,P2.4* 實驗效果 : 數(shù)碼管顯示76543210。* 注 意 :*/#include<reg51.h>#define GPIO_DIG P0sbit LSA=P22;sbit LSB=P23;sbit LSC=P24;unsigned char code DIG_CODE17=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼unsigned char DisplayData8;/

11、用來存放要顯示的8位數(shù)的值void DigDisplay(); /動態(tài)顯示函數(shù)/* 函 數(shù) 名 : main* 函數(shù)功能 : 主函數(shù)* 輸 入 : 無* 輸 出 : 無*/void main(void)unsigned char i;for(i=0;i<8;i+)DisplayDatai=DIG_CODEi;while(1)DigDisplay();/* 函 數(shù) 名 : DigDisplay* 函數(shù)功能 : 使用數(shù)碼管顯示* 輸 入 : 無* 輸 出 : 無*/void DigDisplay()unsigned char i;unsigned int j;for(i=0;i<8;i

12、+)switch(i) /位選,選擇點亮的數(shù)碼管,case(0):LSA=0;LSB=0;LSC=0; break;/顯示第0位case(1):LSA=1;LSB=0;LSC=0; break;/顯示第1位case(2):LSA=0;LSB=1;LSC=0; break;/顯示第2位case(3):LSA=1;LSB=1;LSC=0; break;/顯示第3位case(4):LSA=0;LSB=0;LSC=1; break;/顯示第4位case(5):LSA=1;LSB=0;LSC=1; break;/顯示第5位case(6):LSA=0;LSB=1;LSC=1; break;/顯示第6位ca

13、se(7):LSA=1;LSB=1;LSC=1; break;/顯示第7位GPIO_DIG=DisplayDatai;/發(fā)送段碼j=10; /掃描間隔時間設(shè)定while(j-);GPIO_DIG=0x00;/消隱/* 實 驗 名 : 動態(tài)顯示數(shù)碼管實驗* 使用的IO : 數(shù)碼管使用P0,P2.2,P2.3,P2.4鍵盤使用P1* 實驗效果 : 按矩陣鍵盤分別顯示在數(shù)碼管上面顯示十六進制的0到F。* 注 意 :*/#include<reg51.h>#define GPIO_DIG P0#define GPIO_KEY P1sbit LSA=P22;sbit LSB=P23;sbit

14、LSC=P24;unsigned char code DIG_CODE17=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼unsigned char KeyValue;/用來存放讀取到的鍵值unsigned char KeyState;/記錄按鍵的狀態(tài),0沒有,1有unsigned char DisplayData8;/用來存放要顯示的8位數(shù)的值void Delay10ms(); /延時10msvoid Key

15、Down(); /檢測按鍵函數(shù)void DigDisplay(); /動態(tài)顯示函數(shù)/* 函 數(shù) 名 : main* 函數(shù)功能 : 主函數(shù)* 輸 入 : 無* 輸 出 : 無*/void main(void)KeyState=0;while(1)KeyDown(); if(KeyState=1)DisplayData7=DisplayData6;DisplayData6=DisplayData5;DisplayData5=DisplayData4;DisplayData4=DisplayData3;DisplayData3=DisplayData2;DisplayData2=DisplayDat

16、a1;DisplayData1=DisplayData0;DisplayData0=DIG_CODEKeyValue;KeyState=0;DigDisplay();/* 函 數(shù) 名 : DigDisplay* 函數(shù)功能 : 使用數(shù)碼管顯示* 輸 入 : 無* 輸 出 : 無*/void DigDisplay()unsigned char i;unsigned int j;for(i=0;i<8;i+)switch(i) /位選,選擇點亮的數(shù)碼管,case(0):LSA=0;LSB=0;LSC=0; break;/顯示第0位case(1):LSA=1;LSB=0;LSC=0; break

17、;/顯示第1位case(2):LSA=0;LSB=1;LSC=0; break;/顯示第2位case(3):LSA=1;LSB=1;LSC=0; break;/顯示第3位case(4):LSA=0;LSB=0;LSC=1; break;/顯示第4位case(5):LSA=1;LSB=0;LSC=1; break;/顯示第5位case(6):LSA=0;LSB=1;LSC=1; break;/顯示第6位case(7):LSA=1;LSB=1;LSC=1; break;/顯示第7位GPIO_DIG=DisplayDatai;/發(fā)送段碼j=10; /掃描間隔時間設(shè)定while(j-);GPIO_DI

18、G=0x00;/消隱/* 函 數(shù) 名 : KeyDown* 函數(shù)功能 : 檢測有按鍵按下并讀取鍵值* 輸 入 : 無* 輸 出 : 無*/void KeyDown(void)unsigned int a=0;GPIO_KEY=0x0f;if(GPIO_KEY!=0x0f) Delay10ms();a+;a=0;if(GPIO_KEY!=0x0f)KeyState=1;/有按鍵按下/測試列GPIO_KEY=0X0F;/ Delay10ms();switch(GPIO_KEY)case(0X07):KeyValue=0;break;case(0X0b):KeyValue=1;break;case(0X0d): KeyValue=2;break;case(0X0e):KeyValue=3;break;/default:KeyValue=17;/檢測出錯回復(fù)17意思是把數(shù)碼管全滅掉。/測試行GPIO_KEY=0XF0;Delay10ms();switch(GPIO_KEY)case(0X70):KeyValue=KeyValue;break;case(0Xb0):KeyValue=KeyValue+4;break;case(0Xd0): KeyValue=KeyValue+8;break;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論