版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、單 片 機 課 程 設(shè) 計 報 告課題:仿手機鍵盤報告人:xxx學(xué)號:xxxx班級:xxxx 目 錄一、手機鍵盤使用說明2(一)鍵盤說明2(二)“時鐘”模式2(三)“設(shè)置”模式2(四)“手機”模式3二、手機鍵盤設(shè)計說明4(一)設(shè)計要求4(二)硬件電路51、cpu52、矩陣鍵盤63、lcd74、蜂鳴器7(三)流程圖81、時鐘模式82、設(shè)置模式84、手機模式95、定時器010(四)源程序11三、課程設(shè)計心得體會29一、 手機鍵盤使用說明(一)鍵盤說明1、鍵盤按鍵對應(yīng)鍵值:c840d951ea62fb732、定義雙擊:2s間隔內(nèi)按下同一數(shù)字鍵(二)“時鐘”模式鍵盤鍵值對應(yīng)功能:0(設(shè)置):按下設(shè)置鍵
2、進入設(shè)置模式1(切換):按下切換鍵進入手機模式(三)“設(shè)置”模式鍵盤鍵值對應(yīng)功能:0(移位):光標在年、月、日、星期、時、分、秒之間循環(huán)移位1(加):光標對應(yīng)的時間(日期)加一2(減):光標對應(yīng)的時間(日期)減一3(返回):返回時鐘模式(四)“手機”模式鍵盤鍵值對應(yīng)功能:1)數(shù)字鍵:0(0,。?):單擊顯示0,雙擊顯示0,。?,長按循環(huán)顯示0,。?1(1abc):單擊寫入”1”,雙擊寫入”1abc”,長按循環(huán)寫入”1”、”a”、”b”、”c”2(2def):同上3(3ghi):同上4(4jkl):同上5(5mno):同上6(6pqr):同上7(7stu):同上8(8vwx):同上9(9yz )
3、:同上(第四個字符是空格)2)功能鍵:a(刪除):刪除光標前一個字符b(退格):光標左移c(右移):光標右移d(清屏):lcd清屏e(跳轉(zhuǎn)):返回時鐘模式f(打電話):按下蜂鳴器模擬電話響,再次按下掛斷電話二、 手機鍵盤設(shè)計說明(一)設(shè)計要求顯示方式:1602lcd編程語言:匯編1、任務(wù)利用鍵盤矩陣仿照手機鍵盤,每個按鍵均集成多個按鍵字符,在lcd上分別顯示2、要求1)手機鍵盤對應(yīng)字符:2)依次按下不同按鍵時所顯示的是按鍵上的第一個字符,如果在2s間隔內(nèi)按下同一按鍵,該按鍵上的字符將被依次顯示,如果同一按鍵上的兩次連續(xù)按鍵時間間隔超過2s,則取字符位置歸0,即顯示該按鍵的第一個字符3)可模擬撥
4、打電話號碼,“*”鍵可實現(xiàn)退格功能,“#”鍵可實現(xiàn)清除功能4)字符顯示和撥打電話,可通過按鍵選擇控制5)按鍵時,可利用蜂鳴器發(fā)出提示音6)不工作時,顯示北京時間,可調(diào)整3、附加功能1)“清屏“鍵可實現(xiàn)lcd清屏2)“右移“鍵可實現(xiàn)光標右移3)長按數(shù)字鍵可循環(huán)顯示按鍵對應(yīng)的所有字符(二)硬件電路1、cpu2、矩陣鍵盤3、lcd4、蜂鳴器(三)流程圖1、時鐘模式掃描鍵盤顯示北京時間鍵值為0鍵值為1進入設(shè)置模式時鐘模式進入手機模式y(tǒng)ynn2、設(shè)置模式設(shè)置模式掃描鍵盤顯示北京時間鍵值為0鍵值為1光標移位時間加一11111鍵值為2鍵值為3時間減一11111返回時鐘模式設(shè)置模式nnnyyyynnyyyyy
5、nynyny手機模式4、手機模式lcd初始化手機鍵盤掃描yn有鍵按下idle清零按鍵松開yy鍵值09n進入數(shù)字鍵處理y刪除前一個字符鍵值為ay光標左移鍵值為by光標右移鍵值為cy鍵值為dlcd清屏y返回時間模式鍵值為eny打電話/掛斷鍵值為f開始5、定時器0ms=ms+1ms等于24nys0=s0+1,idle+s0等于60ynm0=m0+1m0等于60nyh0=h0+1h0等于24nyh0=0結(jié)束(四)源程序lcd_rsequ p3.6 lcd_rwequ p3.5 lcd_enequ p3.3buzzerequ p2.6dialingbit 01h ;打電話circlebit 02hyea
6、requ46hmonthequ47hdayequ48hweekequ49hh0equ50hm0equ51hs0equ52h ms0equ53hkey_bufequ36hidl_secequ 37hidleequ 38hdou_secequ 39hsameequ 40hcursorequ 41hdou_nmsequ 42hbufequ45horg00hjmp mainorg 0bhjmp tim0org 1bhjmp tim1main:mov sp,#60h acalllcd_init ;lcd初始化acalltime_init ;計時器初始化movcursor,#00hmovyear,#0mo
7、vmonth,#1movday,#1movweek,#0movh0,#0movm0,#0movs0,#0movms0,#0clrdialingclrcircleacalllcd_initacallwelcomebegin:acalllcd_initacalldisp_datenew_time:acalldisp_timeacallkey_tmova,key_bufjzset_timecjnea,#1,new_timejmpphoneset_time:clrtr0;關(guān)定時器0mova,#83h;定位光標acalllcd_cmdmova,#0eh;顯示光標acalllcd_cmdst_k:acal
8、lkey_tmova,key_bufjnzst_1acallmovejmpst_kst_1:cjnea,#1,st_2acallinc_tjmpst_kst_2:cjnea,#2,st_3acalldec_tjmpst_kst_3:cjnea,#3,st_kmova,#0ch ;關(guān)光標acalllcd_cmdsetbtr0 ;開定時器0jmpnew_timephone:acallsj_initsj_k:acallkeyjmpsj_ktable_w:db "welcome to phone",00htable_week:db "mon tue wed thu fri
9、 sat sun "table:db"0,.?1abc2def3ghi4jkl5mno6pqr7stu8vwx9yz "*歡迎子程序*welcome:movdptr,#table_wacallwritewelcom_k:acallkey_tmova,key_bufjnzwelcom_kret;*時間模式子程序*key_t:mov p2,#0e0h ;全掃描,各列線都送低電平mov p1,#00hmov a,p1 ;讀回各行線電平值orl a,#0f0h ;只讀低四位cpl a ;所讀值置反jnz kt_in;不是全0說明有鍵按下movkey_buf,#0ffhre
10、t;無鍵按下返回kt_in:acall delay5ms ;調(diào)延時,等待按合抖動過去acall delay5ms ;調(diào)延時,等待按合抖動過去acall delay5ms ;調(diào)延時,等待按合抖動過去acall delay5ms ;調(diào)延時,等待按合抖動過去mov r2,#04h ;r2做計數(shù)器,存待掃描行數(shù)mov r4,#7fh ;r4做指針,指示待掃描行數(shù)mov r7,#00h ;r7用于決定鍵號,初值置以0kt_scan:mov a,r4rl amov r4,a;以上三條調(diào)整待掃描行mov p2,a;逐行掃描,被掃描行送低電平mov p1,#00hmov a,p1;讀回各列線電平值mov r3
11、,#04h;r3做記數(shù)器,存被掃描行的待查列數(shù)kt_next:rrc a ;調(diào)整待查列jnc kt_find;被查列為低電平,被按鍵找到,轉(zhuǎn)findinc r7 ;未找到,鍵號加一djnz r3,kt_next ;被掃描行的待查列數(shù)不為0,轉(zhuǎn)回nextdjnz r2,kt_scan ;未找到所按鍵,返回movkey_buf,#0ffhretkt_find:mov key_buf,r7movp2,#0e0hsetbtr1kt_loosen:mov a,p1orla,#0f0hcpl ajnz kt_loosen;以上幾條重復(fù)全掃描,等待所按鍵松按clrtr1retdisp_date:mova,#
12、80hacalllcd_cmdmova,#32h ;'2'acalllcd_wdatamova,#30h ;'0'acalllcd_wdatamova,year ;年acallbcd_lcdmova,#2dh ;'-'acalllcd_wdatamova,month ;月acallbcd_lcdmova,#2dh ;'-'acalllcd_wdatamova,day ;日acallbcd_lcdmova,#20hacalllcd_wdatamova,week ;星期rlarlaadda,#table_weekmovdpl,amov
13、r3,#3week1:clramovca,a+dptracalllcd_wdataincdptrdjnzr3,week1retdisp_time:mova,#0c0h ;跳轉(zhuǎn)到第二行開頭acalllcd_cmdmova,h0 ;時acallbcd_lcdmova,#3ah ;':'acalllcd_wdatamova,m0 ;分acallbcd_lcdmova,#3ah ;':'acalllcd_wdatamova,s0 ;秒acallbcd_lcdretbcd_lcd:movb,#10divabacallbcd_asciiacalllcd_wdatamova,
14、bacallbcd_asciiacalllcd_wdataretbcd_ascii:anla,#0fhadda,#30hret;光標移動:move:acalllcd_rcmdcjnea,#8ch,move_1mova,#0c1hjmpmove_3move_1:cjnea,#0c7h,move_2mova,#83hjmpmove_3move_2:adda,#3move_3:acalllcd_cmdret inc_t:acalllcd_rcmdpushacccjnea,#83h,id_1incyearmova,yearcjnea,#100,id_4movyear,#0jmpid_4id_1:cjn
15、ea,#86h,id_2incmonthmova,monthcjnea,#13,id_4movmonth,#1jmpid_4id_2:cjnea,#89h,id_3incdaymova,daycjnea,#31,id_4movday,#1jmpid_4id_3:cjnea,#8ch,inctincweekmova,weekcjnea,#7,id_4movweek,#0id_4:acalldisp_datepopaccacalllcd_cmdretinct:cjnea,#0c1h,it_1inch0mova,h0cjnea,#24,it_3movh0,#0jmpit_3it_1:cjnea,#0
16、c4h,it_2incm0mova,m0cjnea,#60,it_3movm0,#0jmpit_3it_2:cjnea,#0c7h,it_3incs0mova,s0cjnea,#60,it_3movs0,#0it_3:acalldisp_timepopaccacalllcd_cmdretdec_t:acalllcd_rcmdpushacccjnea,#83h,dd_1decyearmova,yearcjnea,#0ffh,dd_4movyear,#99jmpid_4dd_1:cjnea,#86h,dd_2decmonthmova,monthcjnea,#0,dd_4movmonth,#12jm
17、pdd_4dd_2:cjnea,#89h,dd_3decdaymova,daycjnea,#0,dd_4movday,#30jmpid_4dd_3:cjnea,#8ch,dectdecweekmova,weekcjnea,#0ffh,dd_4movweek,#6dd_4:acalldisp_datepopaccacalllcd_cmdretdect:cjnea,#0c1h,dect_1dech0mova,h0cjnea,#0ffh,dect_3movh0,#23jmpdect_3dect_1:cjnea,#0c4h,dect_2decm0mova,m0cjnea,#0ffh,dect_3mov
18、m0,#59jmpdect_3dect_2:cjnea,#0c7h,dect_3decs0mova,s0cjnea,#0ffh,dect_3movs0,#59dect_3:acalldisp_timepopaccacalllcd_cmdret;*手機模式子程序*sj_init:movbuf,#0ffhmovcursor,#0acalllcd_initmova,#0ehacalllcd_cmdret;掃描鍵盤子程序:key:movp2,#0e0hmovp1,#00hmova,p1orla,#0f0hcplajnzinretin:acalldelay acalldelayacalldelaymov
19、r4,#7fhmovr5,#04hmovr6,#00hscan:mova,r4rlamovr4,amovp2,amovp1,#00hmova,p1movr7,#04hscan_lie:rrcajncfindincr6djnzr7,scan_liedjnzr5,scanretfind:acalljudge ;判斷是否雙擊movidle,#00hmovsame,r6acallgive_keyacallclear ;清除按鍵時間setbtr1 ;啟動定時器1,記錄按鍵時間mov p2,#0e0hloosen:mova,dou_seccjnea,#02h,loosen1 ;按鍵超過1秒,buf=0(循
20、環(huán)顯示)movbuf,#00hmovr7,#00hloosen1:movp1,#00hmov a,p1orl a,#0f0hcpl ajnz loosen ;等待按鍵松開clrtr1 ;關(guān)閉定時器1clrcirclecjner6,#10,k1k1:jckey_data ;鍵值小于10跳轉(zhuǎn)到數(shù)字鍵處理key_15: ;鍵值大于等于10為命令鍵mova,r6cjnea,#0fh,key_14cpldialingclrtr1retkey_14:cjnea,#0eh,key_13mova,#0chacalllcd_cmdjmpbeginretkey_13:cjnea,#0dh,key_12jmppho
21、neret key_12:cjnea,#0ch,key_11mova,cursorjzkey_12_1acalllcd_foredeccursorkey_12_1:retkey_11:cjnea,#0bh,key_10acalllcd_rcmdcjnea,#80h,key_11_1retkey_11_1:acalllcd_back;inccursorretkey_10:acalllcd_dele;retkey_data:mova,bufcjne a,#0,data1retdata1:cjnea,#1,data2acalllcd_dis_sinretdata2:acalllcd_dis_comr
22、etgive_key:mova,r6movb,#04hmulabadda,#tablemovdpl,aret;顯示第一個字符子程序:lcd_dis_sin:clramovca,a+dptracalllcd_wcharret;顯示全部字符子程序:lcd_dis_com:movr1,#3lcd_dis_com1:mova,#1movca,a+dptracalllcd_wcharincdptrdjnzr1,lcd_dis_com1ret;長按循環(huán)顯示子程序:lcd_circle:mova,#0movca,a+dptracalllcd_wcharincdptrincr7cjner7,#4,circle
23、1movr7,#00hmova,dplsubba,#4movdpl,acircle1:ret;清除按鍵時間:clear:movdou_sec,#0movdou_nms,#0;clrdoubleret;判斷是否雙擊:judge:mova,r6cjnea,same,judge2mova,idlecjnea,#2,judge1judge1:jncjudge2mova,bufcjnea,#1,judge2movbuf,#2retjudge2:movbuf,#1ret;寫入一個字符到lcd子程序:lcd_wchar:acalllcd_movelcd_wchar_nl: ;直接覆蓋寫入acalllcd_w
24、dataacalllcd_rcmdcjnea,#90h,lcd_wchar1mova,#0c0hacalllcd_cmdjmplcd_wchar2lcd_wchar1: cjnea,#0d1h,lcd_wchar2acalllcd_delelcd_wchar2:ret;刪除一個字符子程序:lcd_dele:acalllcd_rcmdcjnea,#80h,dele_1retdele_1:mova,cursorjnzdele_2acalllcd_backmova,#20hacalllcd_wdataacalllcd_backretdele_2:acalllcd_backacalllcd_rcmdp
25、ushaccacalllcd_foremovr2,cursorlcd_dele1:acalllcd_rdatapushaccacalllcd_backacalllcd_backpopaccacalllcd_wchar_nlacalllcd_foredjnzr2,lcd_dele1acalllcd_backmova,#20hacalllcd_wchar_nllcd_dele2:popaccacalllcd_cmdret;退格子程序:lcd_back:acalllcd_rcmdcjnea,#0c0h,lcd_back1mova,#90hacalllcd_cmdlcd_back1:mova,#10h
26、acalllcd_cmdret;光標右移子程序:lcd_fore:acalllcd_rcmdcjnea,#8fh,lcd_fore1mova,#0c0hacalllcd_cmdretlcd_fore1:mova,#14hacalllcd_cmdretlcd_move:pushaccmova,cursorjzlcd_move3movr2,cursorcjner2,#1,move0jmplcd_move2move0:decr2lcd_move1:acalllcd_foredjnzr2,lcd_move1movr2,cursorlcd_move2:acalllcd_rdataacalllcd_wch
27、ar_nlacalllcd_backacalllcd_backacalllcd_backdjnzr2,lcd_move2acalllcd_forelcd_move3:popaccret;*lcd相關(guān)子程序*;從lcd讀出一個數(shù)據(jù)子程序:lcd_rdata:acall checkbusymov p0,#0ffh setblcd_rs setblcd_rw setblcd_ennopnopnopmova,p0clrlcd_enret;讀數(shù)據(jù)地址子程序:lcd_rcmd:acall checkbusymov p0,#0ffh clrlcd_rs setblcd_rw setblcd_ennopnop
28、nopmova,p0orla,#80hclrlcd_enret;lcd初始化設(shè)定子程序lcd_init: acall delay5ms ;延時15ms acall delay5ms ;等待lcd電源穩(wěn)定 acall delay5ms mov a,#38h ;16*2顯示,5*7點陣,8位數(shù)據(jù) acall lcd_cmd_nc ;不進行l(wèi)cd忙檢測 acall delay5ms mov a,#38h ;16*2顯示,5*7點陣,8位數(shù)據(jù) acall lcd_cmd_nc ;不進行l(wèi)cd忙檢測 acall delay5ms mov a,#38h ;16*2顯示,5*7點陣,8位數(shù)據(jù) acall l
29、cd_cmd_nc ;不進行l(wèi)cd忙檢測 acall delay5ms mov a,#08h ;顯示關(guān) acall lcd_cmd ;進行l(wèi)cd忙檢測 mov a,#01h ;清除屏幕 acall lcd_cmd ;進行l(wèi)cd忙檢測 mov a,#0ch ;顯示開,關(guān)光標 acall lcd_cmd ;進行l(wèi)cd忙檢測 ret;寫指令數(shù)據(jù)到lcd;rs=l,rw=l,d0-d7=指令碼,e=高脈沖lcd_cmd: call checkbusylcd_cmd_nc: clr lcd_rs clr lcd_rw mov p0,a setb lcd_en nop nop nop nop clr lc
30、d_en ret;寫顯示數(shù)據(jù)到lcd;rs=h,rw=l,d0-d7=數(shù)據(jù),e=高脈沖lcd_wdata: acall checkbusy setb lcd_rs clr lcd_rw mov p0,a setb lcd_en nop nop nop nop clr lcd_en retwrite: push accwrite1: clr a movc a,a+dptr jz write2 inc dptr acall lcd_wdata jmp write1write2: pop acc ret;檢測lcd控制器忙狀態(tài);讀數(shù)據(jù);rs=l,rw=h,e=h,輸出:d0-d7=數(shù)據(jù);p0.7=1
31、,lcd忙,等待。p0.7=0,lcd閑,可以進行讀寫操作。checkbusy: push acc mov p0,#0ffh clr lcd_rs setb lcd_rw setb lcd_enbusyloop: nop jb p0.7,busyloop clr lcd_en pop acc ret;延時5ms子程序:(lcd初始化使用)delay5ms:movr6,#10 dl1:movr7,#249 dl2:djnzr7,dl2djnzr6,dl1ret;*定時器初始化程序*time_init:mov ie,#8ah ;允許中斷t0,t1movtmod,#11hmovth0,#00hmovtl0,#
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025湖南省建筑安全員《C證》考試題庫及答案
- 2025甘肅省建筑安全員-C證(專職安全員)考試題庫
- 2025年山西省建筑安全員A證考試題庫及答案
- XX科技集團開工大吉課件模板
- 班主任工作經(jīng)驗交流52
- 《心理健康案例》課件
- 《撲動及纖顫》課件
- 三年級科學(xué)復(fù)習(xí)
- 單位人力資源管理制度范文大全十篇
- 單位管理制度展示大全人員管理篇
- 第一學(xué)期六年級家長會課件1
- 年產(chǎn)120萬噸氧化鋁拜爾法生產(chǎn)高壓溶出工藝設(shè)計
- APQP產(chǎn)品開發(fā)流程與管理(汽車行業(yè))課件
- 2021年監(jiān)理工程師《建設(shè)工程案例分析(水利工程)》真題及答案
- 中心衛(wèi)生院關(guān)于成立按病種分值付費(DIP)工作領(lǐng)導(dǎo)小組及制度的通知
- 醫(yī)院感染監(jiān)測清單
- 社區(qū)老年人項目計劃書
- 《1.我又長大了一歲》教學(xué)課件∣泰山版
- 斷裂力學(xué)-1緒論課件
- 深基坑工程驗收表
- 醫(yī)學(xué)交流課件:RCT的基本概念及原則(PPT 37頁)
評論
0/150
提交評論