




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单 片 机 课 程 设 计 报 告课题:仿手机键盘报告人:xxx学号:xxxx班级:xxxx 目 录一、手机键盘使用说明2(一)键盘说明2(二)“时钟”模式2(三)“设置”模式2(四)“手机”模式3二、手机键盘设计说明4(一)设计要求4(二)硬件电路51、cpu52、矩阵键盘63、lcd74、蜂鸣器7(三)流程图81、时钟模式82、设置模式84、手机模式95、定时器010(四)源程序11三、课程设计心得体会29一、 手机键盘使用说明(一)键盘说明1、键盘按键对应键值:c840d951ea62fb732、定义双击:2s间隔内按下同一数字键(二)“时钟”模式键盘键值对应功能:0(设置):按下设置键
2、进入设置模式1(切换):按下切换键进入手机模式(三)“设置”模式键盘键值对应功能:0(移位):光标在年、月、日、星期、时、分、秒之间循环移位1(加):光标对应的时间(日期)加一2(减):光标对应的时间(日期)减一3(返回):返回时钟模式(四)“手机”模式键盘键值对应功能:1)数字键:0(0,。?):单击显示0,双击显示0,。?,长按循环显示0,。?1(1abc):单击写入”1”,双击写入”1abc”,长按循环写入”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(跳转):返回时钟模式f(打电话):按下蜂鸣器模拟电话响,再次按下挂断电话二、 手机键盘设计说明(一)设计要求显示方式:1602lcd编程语言:汇编1、任务利用键盘矩阵仿照手机键盘,每个按键均集成多个按键字符,在lcd上分别显示2、要求1)手机键盘对应字符:2)依次按下不同按键时所显示的是按键上的第一个字符,如果在2s间隔内按下同一按键,该按键上的字符将被依次显示,如果同一按键上的两次连续按键时间间隔超过2s,则取字符位置归0,即显示该按键的第一个字符3)可模拟拨
4、打电话号码,“*”键可实现退格功能,“#”键可实现清除功能4)字符显示和拨打电话,可通过按键选择控制5)按键时,可利用蜂鸣器发出提示音6)不工作时,显示北京时间,可调整3、附加功能1)“清屏“键可实现lcd清屏2)“右移“键可实现光标右移3)长按数字键可循环显示按键对应的所有字符(二)硬件电路1、cpu2、矩阵键盘3、lcd4、蜂鸣器(三)流程图1、时钟模式扫描键盘显示北京时间键值为0键值为1进入设置模式时钟模式进入手机模式yynn2、设置模式设置模式扫描键盘显示北京时间键值为0键值为1光标移位时间加一11111键值为2键值为3时间减一11111返回时钟模式设置模式nnnyyyynnyyyyy
5、nynyny手机模式4、手机模式lcd初始化手机键盘扫描yn有键按下idle清零按键松开yy键值09n进入数字键处理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结束(四)源程序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;关定时器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 ;关光标acalllcd_cmdsetbtr0 ;开定时器0jmpnew_timephone:acallsj_initsj_k:acallkeyjmpsj_ktable_w:db welcome to phone,00htable_week:db mon tue wed thu fri sat sun table:db0
9、,.?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,#0ffhret;无键按下返回kt_in:acall delay5ms ;调延时,等
10、待按合抖动过去acall delay5ms ;调延时,等待按合抖动过去acall delay5ms ;调延时,等待按合抖动过去acall delay5ms ;调延时,等待按合抖动过去mov r2,#04h ;r2做计数器,存待扫描行数mov r4,#7fh ;r4做指针,指示待扫描行数mov r7,#00h ;r7用于决定键号,初值置以0kt_scan:mov a,r4rl amov r4,a;以上三条调整待扫描行mov p2,a;逐行扫描,被扫描行送低电平mov p1,#00hmov a,p1;读回各列线电平值mov r3,#04h;r3做记数器,存被扫描行的待查列数kt_next:rrc
11、a ;调整待查列jnc kt_find;被查列为低电平,被按键找到,转findinc r7 ;未找到,键号加一djnz r3,kt_next ;被扫描行的待查列数不为0,转回nextdjnz r2,kt_scan ;未找到所按键,返回movkey_buf,#0ffhretkt_find:mov key_buf,r7movp2,#0e0hsetbtr1kt_loosen:mov a,p1orla,#0f0hcpl ajnz kt_loosen;以上几条重复全扫描,等待所按键松按clrtr1retdisp_date:mova,#80hacalllcd_cmdmova,#32h ;2acalllcd
12、_wdatamova,#30h ;0acalllcd_wdatamova,year ;年acallbcd_lcdmova,#2dh ;-acalllcd_wdatamova,month ;月acallbcd_lcdmova,#2dh ;-acalllcd_wdatamova,day ;日acallbcd_lcdmova,#20hacalllcd_wdatamova,week ;星期rlarlaadda,#table_weekmovdpl,amovr3,#3week1:clramovca,a+dptracalllcd_wdataincdptrdjnzr3,week1retdisp_time:mo
13、va,#0c0h ;跳转到第二行开头acalllcd_cmdmova,h0 ;时acallbcd_lcdmova,#3ah ;:acalllcd_wdatamova,m0 ;分acallbcd_lcdmova,#3ah ;:acalllcd_wdatamova,s0 ;秒acallbcd_lcdretbcd_lcd:movb,#10divabacallbcd_asciiacalllcd_wdatamova,bacallbcd_asciiacalllcd_wdataretbcd_ascii:anla,#0fhadda,#30hret;光标移动:move:acalllcd_rcmdcjnea,#8
14、ch,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:cjnea,#86h,id_2incmonthmova,monthcjnea,#13,id_4movmonth,#1jmpid_4id_2:cjnea,#89h,id_3incdaymova,da
15、ycjnea,#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,#0c4h,it_2incm0mova,m0cjnea,#60,it_3movm0,#0jmpit_3it_2:cjnea,#0c7h,it_3incs0mova,s0cjnea,#60,it_
16、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,#12jmpdd_4dd_2:cjnea,#89h,dd_3decdaymova,daycjnea,#0,dd_4movday,#30jmpid_4dd_3:cjnea,#8ch,dectdecwee
17、kmova,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_3movm0,#59jmpdect_3dect_2:cjnea,#0c7h,dect_3decs0mova,s0cjnea,#0ffh,dect_3movs0,#59dect_3:acalldisp
18、_timepopaccacalllcd_cmdret;*手机模式子程序*sj_init:movbuf,#0ffhmovcursor,#0acalllcd_initmova,#0ehacalllcd_cmdret;扫描键盘子程序:key:movp2,#0e0hmovp1,#00hmova,p1orla,#0f0hcplajnzinretin:acalldelay acalldelayacalldelaymovr4,#7fhmovr5,#04hmovr6,#00hscan:mova,r4rlamovr4,amovp2,amovp1,#00hmova,p1movr7,#04hscan_lie:rrc
19、ajncfindincr6djnzr7,scan_liedjnzr5,scanretfind:acalljudge ;判断是否双击movidle,#00hmovsame,r6acallgive_keyacallclear ;清除按键时间setbtr1 ;启动定时器1,记录按键时间mov p2,#0e0hloosen:mova,dou_seccjnea,#02h,loosen1 ;按键超过1秒,buf=0(循环显示)movbuf,#00hmovr7,#00hloosen1:movp1,#00hmov a,p1orl a,#0f0hcpl ajnz loosen ;等待按键松开clrtr1 ;关闭
20、定时器1clrcirclecjner6,#10,k1k1:jckey_data ;键值小于10跳转到数字键处理key_15: ;键值大于等于10为命令键mova,r6cjnea,#0fh,key_14cpldialingclrtr1retkey_14:cjnea,#0eh,key_13mova,#0chacalllcd_cmdjmpbeginretkey_13:cjnea,#0dh,key_12jmpphoneret key_12:cjnea,#0ch,key_11mova,cursorjzkey_12_1acalllcd_foredeccursorkey_12_1:retkey_11:cjn
21、ea,#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_comretgive_key:mova,r6movb,#04hmulabadda,#tablemovdpl,aret;显示第一个字符子程序:lcd_dis_sin:clramovca,a+dptra
22、calllcd_wcharret;显示全部字符子程序:lcd_dis_com:movr1,#3lcd_dis_com1:mova,#1movca,a+dptracalllcd_wcharincdptrdjnzr1,lcd_dis_com1ret;长按循环显示子程序:lcd_circle:mova,#0movca,a+dptracalllcd_wcharincdptrincr7cjner7,#4,circle1movr7,#00hmova,dplsubba,#4movdpl,acircle1:ret;清除按键时间:clear:movdou_sec,#0movdou_nms,#0;clrdoubl
23、eret;判断是否双击:judge:mova,r6cjnea,same,judge2mova,idlecjnea,#2,judge1judge1:jncjudge2mova,bufcjnea,#1,judge2movbuf,#2retjudge2:movbuf,#1ret;写入一个字符到lcd子程序:lcd_wchar:acalllcd_movelcd_wchar_nl: ;直接覆盖写入acalllcd_wdataacalllcd_rcmdcjnea,#90h,lcd_wchar1mova,#0c0hacalllcd_cmdjmplcd_wchar2lcd_wchar1: cjnea,#0d1
24、h,lcd_wchar2acalllcd_delelcd_wchar2:ret;删除一个字符子程序:lcd_dele:acalllcd_rcmdcjnea,#80h,dele_1retdele_1:mova,cursorjnzdele_2acalllcd_backmova,#20hacalllcd_wdataacalllcd_backretdele_2:acalllcd_backacalllcd_rcmdpushaccacalllcd_foremovr2,cursorlcd_dele1:acalllcd_rdatapushaccacalllcd_backacalllcd_backpopacca
25、calllcd_wchar_nlacalllcd_foredjnzr2,lcd_dele1acalllcd_backmova,#20hacalllcd_wchar_nllcd_dele2:popaccacalllcd_cmdret;退格子程序:lcd_back:acalllcd_rcmdcjnea,#0c0h,lcd_back1mova,#90hacalllcd_cmdlcd_back1:mova,#10hacalllcd_cmdret;光标右移子程序:lcd_fore:acalllcd_rcmdcjnea,#8fh,lcd_fore1mova,#0c0hacalllcd_cmdretlcd_
26、fore1:mova,#14hacalllcd_cmdretlcd_move:pushaccmova,cursorjzlcd_move3movr2,cursorcjner2,#1,move0jmplcd_move2move0:decr2lcd_move1:acalllcd_foredjnzr2,lcd_move1movr2,cursorlcd_move2:acalllcd_rdataacalllcd_wchar_nlacalllcd_backacalllcd_backacalllcd_backdjnzr2,lcd_move2acalllcd_forelcd_move3:popaccret;*l
27、cd相关子程序*;从lcd读出一个数据子程序:lcd_rdata:acall checkbusymov p0,#0ffh setblcd_rs setblcd_rw setblcd_ennopnopnopmova,p0clrlcd_enret;读数据地址子程序:lcd_rcmd:acall checkbusymov p0,#0ffh clrlcd_rs setblcd_rw setblcd_ennopnopnopmova,p0orla,#80hclrlcd_enret;lcd初始化设定子程序lcd_init: acall delay5ms ;延时15ms acall delay5ms ;等待l
28、cd电源稳定 acall delay5ms mov a,#38h ;16*2显示,5*7点阵,8位数据 acall lcd_cmd_nc ;不进行lcd忙检测 acall delay5ms mov a,#38h ;16*2显示,5*7点阵,8位数据 acall lcd_cmd_nc ;不进行lcd忙检测 acall delay5ms mov a,#38h ;16*2显示,5*7点阵,8位数据 acall lcd_cmd_nc ;不进行lcd忙检测 acall delay5ms mov a,#08h ;显示关 acall lcd_cmd ;进行lcd忙检测 mov a,#01h ;清除屏幕 ac
29、all lcd_cmd ;进行lcd忙检测 mov a,#0ch ;显示开,关光标 acall lcd_cmd ;进行lcd忙检测 ret;写指令数据到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 lcd_en ret;写显示数据到lcd;rs=h,rw=l,d0-d7=数据,e=高脉冲lcd_wdata: acall checkbusy setb lcd_rs clr lcd_rw mo
30、v 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控制器忙状态;读数据;rs=l,rw=h,e=h,输出:d0-d7=数据;p0.7=1,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,#00hsetbtr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑工程施工合同正规版本
- 交通事故赔偿协商合同范本
- 幼儿园入园托管合同书
- 重庆新版服务合同标准范本
- 11爸爸妈妈在我心中 第1课时(教学设计)-部编版道德与法治三年级上册
- Fantastic animals绘本融合(教学设计)-2023-2024学年外研版(一起)英语六年级下册
- 劳动合同解除合同
- 20《蜘蛛开店》教学设计-2024-2025学年语文二年级下册统编版
- 运输代理合同范文
- 戒烟保证金合同协议
- 服装厂安全生产评估报告
- 通力电梯KCE电气系统学习指南
- 教学课件-《旅行社业务》-(中职)
- 第二章 第一节 CT设备基本运行条件
- 某道路拓宽工程施工组织设计
- 第一章染整工厂设计
- 上虞市化工、印染企业名单-企业负责人信息及联系方式
- DL-T 736-2021 农村电网剩余电流动作保护器安装运行规程
- YS/T 431-2009铝及铝合金彩色涂层板、带材
- SB/T 10439-2007酱腌菜
- 与食品经营相适应的主要设备设施布局和操作流程文件
评论
0/150
提交评论