欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    单片机课程设计报告仿手机键盘.doc

    • 资源ID:2393891       资源大小:382KB        全文页数:30页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    单片机课程设计报告仿手机键盘.doc

    单 片 机 课 程 设 计 报 告课题:仿手机键盘报告人: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(设置):按下设置键进入设置模式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 ):同上(第四个字符是空格)2)功能键:A(删除):删除光标前一个字符B(退格):光标左移C(右移):光标右移D(清屏):LCD清屏E(跳转):返回时钟模式F(打电话):按下蜂鸣器模拟电话响,再次按下挂断电话二、 手机键盘设计说明(一)设计要求显示方式:1602LCD编程语言:汇编1、任务利用键盘矩阵仿照手机键盘,每个按键均集成多个按键字符,在LCD上分别显示2、要求1)手机键盘对应字符:2)依次按下不同按键时所显示的是按键上的第一个字符,如果在2S间隔内按下同一按键,该按键上的字符将被依次显示,如果同一按键上的两次连续按键时间间隔超过2S,则取字符位置归0,即显示该按键的第一个字符3)可模拟拨打电话号码,“*”键可实现退格功能,“#”键可实现清除功能4)字符显示和拨打电话,可通过按键选择控制5)按键时,可利用蜂鸣器发出提示音6)不工作时,显示北京时间,可调整3、附加功能1)“清屏“键可实现LCD清屏2)“右移“键可实现光标右移3)长按数字键可循环显示按键对应的所有字符(二)硬件电路1、CPU2、矩阵键盘3、LCD4、蜂鸣器(三)流程图1、时钟模式扫描键盘显示北京时间键值为0键值为1进入设置模式时钟模式进入手机模式YYNN2、设置模式设置模式扫描键盘显示北京时间键值为0键值为1光标移位时间加一11111键值为2键值为3时间减一11111返回时钟模式设置模式NNNYYYYNNYYYYYNYNYNY手机模式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 02HYEAREQU46HMONTHEQU47HDAYEQU48HWEEKEQU49HH0EQU50HM0EQU51HS0EQU52H 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,#0MOVMONTH,#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:ACALLKEY_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: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,#0FFHRET;无键按下返回KT_IN:ACALL DELAY5MS ;调延时,等待按合抖动过去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 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 ;'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,AMOVR3,#3WEEK1:CLRAMOVCA,A+DPTRACALLLCD_WDATAINCDPTRDJNZR3,WEEK1RETDISP_TIME:MOVA,#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,#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:CJNEA,#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,#0C4H,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,#12JMPDD_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_3MOVM0,#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 ACALLDELAYACALLDELAYMOVR4,#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(循环显示)MOVBUF,#00HMOVR7,#00HLOOSEN1:MOVP1,#00HMOV A,P1ORL A,#0F0HCPL AJNZ LOOSEN ;等待按键松开CLRTR1 ;关闭定时器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: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_COMRETGIVE_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;长按循环显示子程序:LCD_CIRCLE:MOVA,#0MOVCA,A+DPTRACALLLCD_WCHARINCDPTRINCR7CJNER7,#4,CIRCLE1MOVR7,#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_WDATAACALLLCD_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_RCMDPUSHACCACALLLCD_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,#10HACALLLCD_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_WCHAR_NLACALLLCD_BACKACALLLCD_BACKACALLLCD_BACKDJNZR2,LCD_MOVE2ACALLLCD_FORELCD_MOVE3:POPACCRET;*LCD相关子程序*;从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 ;等待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,#38H ;16*2显示,5*7点阵,8位数据 ACALL LCD_CMD_NC ;不进行LCD忙检测 ACALL DELAY5MS MOV A,#08H ;显示关 ACALL LCD_CMD ;进行LCD忙检测 MOV A,#01H ;清除屏幕 ACALL 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 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控制器忙状态;读数据;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,#00HSETBTR0MOVTH1,#0FCHMOVTL1,#0F8HRET;*中断服务程序*TIM0: PUSHACCINCMS0MOVA,MS0CJNEA,#24,T0_BMOVMS0,#0INCS0INCIDLEJNBDIALING,T0_1CPLTR1T0_1:MOVA,S0CJNEA,#60,T0_BMOVS0,#0INCM0MOVA,M0CJNEA,#60,T0_BMOVM0,#0INCH0MOVA,H0CJNEA,#24,T0_BMOVH0,#0T0_B:POPACCRETITIM1:PU

    注意事项

    本文(单片机课程设计报告仿手机键盘.doc)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开