版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、/*程序功能:基于狀態(tài)機(jī)的線性反轉(zhuǎn)掃描方法實(shí)現(xiàn)按鍵掃描數(shù)碼管動(dòng)態(tài)顯示開發(fā)環(huán)境:KeiL4硬件環(huán)境:STC12C5A60S2,11.0592 接線說明:單片機(jī)P1口接底板JP29,具體接法為:P10-L1,P11-L2,P12-L3,P13-L4,P14-L5,P15-L6,P16-L7,P17-L8 單片機(jī)P20P21接底板JP26,具體接法:P20-DS,P21-SHCP,P22-STCP跳線說明:J70實(shí)驗(yàn)現(xiàn)象:數(shù)碼管動(dòng)態(tài)顯示時(shí)鐘時(shí)間 同時(shí)顯示當(dāng)前被按下的鍵值 可通過矩陣鍵盤對時(shí)鐘進(jìn)行開關(guān)已經(jīng)參數(shù)調(diào)試 */#include <REG52.h>typedef unsigned c
2、har uint8;typedef unsigned int uint16;#define KEY_PORT P1 /定義4x4鍵盤使用的單片機(jī)端口sbit SEG_DS = P20;/74HC595芯片的數(shù)據(jù)引腳sbit SEG_SHCP = P21;/74HC595芯片的控制引腳,上升沿移入數(shù)據(jù)sbit SEG_STCP = P22;/74HC595芯片的控制引腳,上升沿更新數(shù)據(jù)/*/全局變量/* char hour,min,sec; / 秒 分 時(shí) uint8 Clock_flag; /時(shí)鐘開關(guān)標(biāo)志位 uint8 ct_flag;/按鍵長按標(biāo)志位 /* /反轉(zhuǎn)法矩陣鍵盤的各個(gè)按鍵的計(jì)算值
3、unsigned char tabLe=0xee,/00xed,/10xeb,/20xe7,/30xde,/40xdd,/50xdb,/60xd7,/70xbe,/80xbd,/90xbb,/100xb7,/110x7e,/120x7d,/130x7b,/140x77 /15; /共陽數(shù)碼管的編碼,并將數(shù)據(jù)定義在CODE區(qū)unsigned char code Seg_Data= 0xc0,/*0*/ 0xF9,/*1*/ 0xA4,/*2*/ 0xB0,/*3*/ 0x99,/*4*/ 0x92,/*5*/ 0x82,/*6*/ 0xF8,/*7*/ 0x80,/*8*/ 0x90,/*9*/
4、 0x88,/*A*/ 0x83,/*b*/ 0xC6,/*C*/ 0xA1,/*d*/ 0x86,/*E*/ 0x8E,/*F*/;/數(shù)碼管位選編碼,控制顯示8位中的第幾位unsigned char code Seg_Addr= 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xFF,/ALL ON0x00 /OFF;/*/函數(shù)聲明/*void SEG_Send595OneByte(unsigned char ucData); /向74HC595寫入一個(gè)8位的數(shù)據(jù)/指定數(shù)碼管顯示定數(shù)字void DispLayOneCharOnAddr(unsigned ch
5、ar Data,unsigned char Addr); unsigned char Key_Scan(void); /基于狀態(tài)機(jī)的按鍵掃描void Parameter_Setting(uint8 key_value_get); /按鍵參數(shù)設(shè)置void Timer0Configuration(); /定時(shí)器初始化void CLOCK(void); /時(shí)鐘運(yùn)行函數(shù)/*/* /*/定時(shí)器0中斷服務(wù)函數(shù)/*void Timer0() interrupt 1 uint8 key_get,j; static uint8 i=0,key_value; static uint16 count=0; TH0
6、= (65536-922)/256; TL0 = (65536-922)%256;/*用戶代碼*/ count+; if(962=count) /一秒運(yùn)行一次時(shí)鐘 if(Clock_flag) CLOCK(); /時(shí)鐘走一次count=0; /定時(shí)計(jì)數(shù)清零 switch(i) case 0:i+;DispLayOneCharOnAddr(hour/10,0); /數(shù)碼管動(dòng)態(tài)顯示 第一位 break; case 1:i+;DispLayOneCharOnAddr(hour%10,1);/數(shù)碼管動(dòng)態(tài)顯示 第二位 break; case 2:i+;DispLayOneCharOnAddr(min/1
7、0,2);/數(shù)碼管動(dòng)態(tài)顯示 第三位 break; case 3:i+;DispLayOneCharOnAddr(min%10,3); /數(shù)碼管動(dòng)態(tài)顯示 第四位 break; case 4:i+;DispLayOneCharOnAddr(sec/10,4); /數(shù)碼管動(dòng)態(tài)顯示 第五位 break; case 5:i+;DispLayOneCharOnAddr(sec%10,5); /數(shù)碼管動(dòng)態(tài)顯示 第六位 break; case 6:i+;DispLayOneCharOnAddr(key_value,6); /數(shù)碼管動(dòng)態(tài)顯示 第七位 break; case 7:i+;/數(shù)碼管動(dòng)態(tài)顯示 第八位 b
8、reak; case 8: i=0; key_get=Key_Scan(); /狀態(tài)機(jī)按鍵掃描每9ms進(jìn)行一次掃描 if(key_get) /按鍵沒按下 返回零 for(j=0;j<16;j+) if(key_get=tabLej) /通過查表得出按鍵的號 key_value=j;break; Parameter_Setting(key_value); /按鍵參數(shù)調(diào)試函數(shù)輸入按鍵號 break; default:break; /*/主函數(shù)/*void main(void) EA=0; /關(guān)總中斷 Timer0Configuration(); /定時(shí)器0初始化 1ms中斷 EA=1; /開
9、總中斷while(1) /循環(huán)等待中斷到來 /* /*/向HC595發(fā)送一個(gè)字節(jié)void SEG_Send595OneByte(unsigned char ucData)unsigned char i;for(i = 0;i < 8;i+) /8位數(shù)據(jù)依次寫入,先寫最低位SEG_DS = (ucData & 0x80);/先讀入高位 x&0x80;SEG_SHCP = 0;SEG_SHCP = 1;SEG_SHCP = 0; /SHCP引腳的上升沿移入數(shù)據(jù)ucData <<=1; /數(shù)據(jù)左移/*函數(shù)功能:在指定位置顯示一個(gè)數(shù)據(jù)參數(shù)說明:Data是要顯示的數(shù)據(jù),
10、Addr是在第幾位顯示。Addr取值范圍是09。Addr=07時(shí),選擇的是顯示在第幾位數(shù)碼管上;Addr=8 時(shí),同時(shí)選中8位數(shù)碼管,即打開所有數(shù)碼管Addr=9 時(shí),關(guān)閉8位數(shù)碼管8位數(shù)碼管,左數(shù)依次為第0位,第1位.第7位。*/ void DispLayOneCharOnAddr(unsigned char Data,unsigned char Addr)SEG_Send595OneByte(Seg_AddrAddr); /顯示在哪一個(gè)數(shù)碼管上SEG_Send595OneByte( Seg_DataData); /顯示的數(shù)據(jù)SEG_STCP = 0;SEG_STCP = 1; /STCP引
11、腳的上升沿更新數(shù)據(jù)SEG_STCP = 0;/*函數(shù)名稱:Key_Scan函數(shù)功能:返回按鍵編碼入口參數(shù):無返回值:按鍵編碼備注:無* unsigned char Key_Scan(void) static unsigned char st=0,i,key;/靜態(tài)變量 st狀態(tài)位 i 長按計(jì)數(shù) key鍵值 uint8 L,H;/定義局部變量,用L得出低4位的值,用h得出高4位的值switch(st)/=/狀態(tài)0按鍵查詢狀態(tài)/=case 0: KEY_PORT=0x0f; /給P1賦值00001111 L=KEY_PORT&0x0f; if(L!=0x0f) /按鍵按下 st=1; /進(jìn)
12、入下一狀態(tài)按鍵確認(rèn)狀態(tài)return 0;break;/=/狀態(tài)1按鍵確認(rèn)狀態(tài)/=case 1: KEY_PORT=0x0f;/給P1賦值00001111 L=KEY_PORT&0x0f;if(L!=0x0f) /按鍵按下 KEY_PORT=0xf0;/給P1賦值11110000 H=KEY_PORT&0xf0; key=L+H;/讀取鍵值 高4位的值與低4位的值相加 st=2; /下一狀態(tài)按鍵釋放狀態(tài)else st=0; /按鍵沒被按下 返回按鍵查詢狀態(tài) 消抖return 0;break;/=/狀態(tài)2按鍵釋放狀態(tài)/=case 2: KEY_PORT=0x0f; /給P1賦值00
13、001111L=KEY_PORT&0x0f;if(L=0x0f) /按鍵松手st= 0; /返回按鍵查詢狀態(tài)i=0; /長按計(jì)數(shù)值清零ct_flag=0; /長按標(biāo)志位清零return key; /返回鍵值else /按鍵沒松手 st=2; /繼續(xù)檢測按鍵松手 if(ct_flag)return key; /如果按鍵被長按就不斷返回鍵值 else /按鍵松手檢測 i+; if(i=100) ct_flag=1;i=0;return key; /按鍵長按計(jì)時(shí)時(shí)間到咯 置長按標(biāo)志位 計(jì)數(shù)值清零 返回鍵值 return 0; break;default: return 0;break; /*
14、函數(shù)名稱:Parameter_Setting函數(shù)功能:通過矩陣鍵盤實(shí)現(xiàn)系統(tǒng)的參數(shù)設(shè)置入口參數(shù):按鍵編號返回值: 無備注: 無*/void Parameter_Setting(uint8 key_value_get) switch(key_value_get) case 0: Clock_flag=1; /開啟時(shí)鐘break;case 1: hour+;if(hour>23)hour=0;/時(shí)加一 限幅break;case 2: min+;if(min>59)min=0; /分加一 限幅break;case 3: sec+;if(sec>59)sec=0; /秒加一 限幅bre
15、ak;case 4: Clock_flag=0; /關(guān)閉時(shí)鐘break;case 5: hour-;if(hour<0)hour=23; /時(shí)減一 限幅break;case 6: min -;if(min<0)min=59; /分減一 限幅break;case 7: sec-; if(sec<0)sec=59; /秒減一 限幅break;case 8: break;case 9: break;case 10: break;case 11: break;case 12: break;case 13: break;case 14: break;case 15: break;default:break;/*函數(shù)名稱:Timer0Configuration函數(shù)功能:定時(shí)器0一毫秒定時(shí)入口參數(shù):無返回值: 無備注: 無*/void Timer0Configuration() TMOD |= 0x01; /計(jì)數(shù)器0選擇
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年電影制作、發(fā)行和放映合同
- 職高電氣基礎(chǔ)課程設(shè)計(jì)答案
- 自動(dòng)倒角機(jī)現(xiàn)狀課程設(shè)計(jì)
- 芣苢課程設(shè)計(jì)
- 自動(dòng)化編程講解課程設(shè)計(jì)
- 苯乙醇課程設(shè)計(jì)
- 希臘國際高中課程設(shè)計(jì)
- 支教特色美術(shù)課程設(shè)計(jì)
- 碳匯課程設(shè)計(jì)
- 稅收情況工作總結(jié)
- 科學(xué)備考講解模板
- 譯林小學(xué)二年級上冊英語知識綜合訓(xùn)練50題含答案
- 2024年1月浙江省普通高校招生選考科目考試思想政治試題(含答案)
- 中國大數(shù)據(jù)產(chǎn)業(yè)發(fā)展指數(shù)報(bào)告(2024版)
- 帶封面的新員工入職登記表
- 醫(yī)院教學(xué)工作匯報(bào)
- 小學(xué)生經(jīng)典閱讀英語短文100篇
- 2024-2030年中國計(jì)算機(jī)視覺行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報(bào)告
- 2025高考語文步步高大一輪復(fù)習(xí)講義教材文言文點(diǎn)線面答案精析
- 《工程勘察設(shè)計(jì)收費(fèi)標(biāo)準(zhǔn)》(2002年修訂本)-工程設(shè)計(jì)收費(fèi)標(biāo)準(zhǔn)2002修訂版
- 新省中考統(tǒng)考語文模擬卷(一)(山東卷)2024年新中考地區(qū)語文適應(yīng)性考試模擬卷(新中考地區(qū)適用)(原卷版)
評論
0/150
提交評論