基于单片机的单词记忆测试器的设计毕业论文(编辑修改稿)内容摘要:

39。 ,39。 t39。 }, {39。 u39。 ,39。 v39。 ,39。 w39。 ,39。 x39。 ,39。 y39。 }, {39。 z39。 , 1, 2 , 3 , 4} }。 例如在按下键盘时,单片机返回键盘位置为 第二行第三列,就可从上表中查出是对应位置的字母。 键盘扫描函数返回的是键值。 key=tab1[hang][lie]。 进入主程序后,先对 LCD12864 屏进行初始化和清屏 操作,然后在 LCD12864 屏上显示单片机单词记忆测试器的静态的图文,需要动态刷新的字符则在主循环中进行。 LCD12864_init()。 //LCD12864 初始化 ClearLCD()。 //清屏 en_disp(2,1,11,Asc,INPUT WORD:,1)。 //在第 3 行 第 21 列 显示 INPUT WORD: //最后的“ 1”表示显示为白底黑字,如是 0 则为黑底白字,即反显 en_disp(4,1,1,Asc,1)。 //在第 5 行,第 5 列开始显示 en_disp(6,0,8,Asc,correct:,1)。 //在第 7 行,第 1 列开始显示 correct: en_disp(6,80,5,Asc,00/10,1)。 //在第 7 行 第 81 列显示 00/10 LCD12864 的显示效果如下,此时系统进入单词输入测试就绪状态。 15 在系统进入单词输入测试就绪状态后,主程序即进入 while(1)的主循环中,循环进行键盘扫描,并判断键盘输入值, 再与待测试的单词进行比较,如果输入的字符和字符长度均与被测试的单词一致,则显示 correct 加 1,即为加 1 分,并进入下一个单词的测试,测试完 10 个单词后,重新进入第 1 个单词的测试。 主程序的主循环部分代码及注释如下: while(1) { KeyNum[iword]=kbscan()。 //进行矩阵按键扫描,得到扫描键盘的输入值 hz_disp(0,48,1,hz1+hz_Num*32,1)。 //在第 1 行, 第 49 列开始显示测试的汉字 temp[0]=(hz_Num+1)/10+0x30。 //将十进制数转换为 ASCII 字符 //temp 数组用来存储测试的序号 temp[1]=(hz_Num+1)%10+0x30。 //算出测试汉字的序号的第一位和第二位 en_disp(0,20,1,Asc,:,1)。 //在第 1 行 第 21 列显示 : en_disp(0,4,2,Asc,temp,1)。 //在第 1 行 第 5 列 显示测试序号 if(KeyNum[iword]!=39。 _39。 ) //键盘有按键按下,无按下返回的是 39。 _39。 { if(KeyNum[iword]==1) //如果按下了确定键 { if(SL[hz_Num]==iwordamp。 amp。 verify) //输入长度等于测试单词的长度,则正确 ,verify 表示按下了 确认后有效一次 { correctNUM+=1。 if(correctNUM10) { correctNUM=10。 //最多 10 个正确的 } verify=0。 //标志位清零 hz_Num++。 //测试下一个单词 if(hz_Num==10) hz_Num=0。 //最多设 10 个单词 temp[0]=(correctNUM)/10+0x30。 //将十进制数转换为 ASCII 字符 temp[1]=(correctNUM)%10+0x30。 //算出测试汉字的序号的第一位和第二位 en_disp(6,80,2,Asc,temp,1)。 //在第 7 行 第 81 列 iword=0。 Nword=0。 en_disp(4,16,8,Asc, ,1)。 //在第 5 行,第 17 列开始显示 } } else if(KeyNum[iword]==2||KeyNum[iword]==4) //如果按下了“不认识”或“下一个”键 ,直接跳到下一个单词 { result=0。 //跳下一个时错误灯灭 16 ERROR=0。 hz_Num++。 //测试下一个单词 if(hz_Num==10) hz_Num=0。 //最多设 10 个单词 iword=0。 Nword=0。 en_disp(4,16,8,Asc, ,1)。 //在第 5 行,第 17 列 开始显示 } else if(KeyNum[iword]==3) //如果按下了“上一个”键 ,直接跳到上一个单词 { result=0。 //跳下一个时错误灯灭 ERROR=0。 //测试下一个单词 if(hz_Num==0) hz_Num=10。 //最多设 10 个单词 hz_Num。 iword=0。 Nword=0。 en_disp(4,16,8,Asc, ,1)。 //在第 5 行,第 17 列开始显示 } else if(S[hz_Num][iword]==KeyNum[iword])//输入的字符与测试的标准字符比较 { temp[0]=KeyNum[iword]。 ERROR=0。 //正确就标志位置 0 en_disp(4,Nword+16,1,Asc,temp,1)。 //在第 5 行,第 17 列开始显示 iword++。 if(iword==8) iword=0。 Nword=iword*8。 verify=1。 } else { temp[0]=KeyNum[iword]。 ERROR=1。 //错误就置 1 en_disp(4,Nword+16,1,Asc,temp,1)。 //在第 5 行,第 17 列开始显示 iword++。 if(iword==8) iword=0。 Nword=iword*8。 } result=ERROR|result。 //0 表示结果正确 } ERR=!result。 //错误指示灯 } } 17 软件的仿真 软件的仿真使用 protues 环境,在画好 protues 原理图后,将 keil 环境下生成的目标文件 HEX 文件载入 protues 中,即可进行软件仿真。 因仿真软件中没有 STC89C52 元件 ,故可使用完全兼容的 AT89C52 单片机仿真。 仿真的结果: 此处加入HEX 文件 晶振选 用12M 18 输入错误时黄色 LED 报警: 19 第五章 结语 由于本人对单片机的认识有限,在设计过程中遇到不少困难。 在设计程序方面出现不少问题,所以用了比较简单的程序运算。 虽然花了几个月的时间尽力把毕业做好,但由于本人能力的原因,整个系统做的并不理想,但是在整个设计的过程中我积累了不少的经验,学会一些系统的应用。 我一直认为毕业设计重在过程。 确实是这样的。 这个毕业设计的过程,其实也就是我不断学习的过程。 在这个过程中我学到了许多新的知识,能力也提高了不少。 这些收获给我带来的喜悦远远超过了完成毕业设计时给我带来的喜悦。 我相信,以后再做这些设计的时候一定还可以做得更好。 参 考文献 [1] 何立民主编 . 单片机应用文集 . 北京 :北京航空航天大学出版社, 1994 [2] 王福瑞主编 . 单片微机测控系统设计大全 . 北京:北京航空航天大学出版社, 1999 [3] 夏继强 沈德金主编 . 单片机实验与实践教程 . 北京:北京航空航天大学出版社, 20xx [4] 李朝青主编 . PC 机及单片机数据通信技术 . 北京:北京航空航天大学出版社, 20xx [5] 马忠梅主编 . 单片机的 c 语言应用程序设计 .北京 :北京航空航天大学出版社, 20xx [6] 沈美明、温冬婵主编 .IBMPC 汇编语言程序设计 .北京:清华大学出版社 20xx [7] 何立民主编 . MCS51 系列单片机应用系统设计 .北京:北京航空航天大学出版社 20xx [8] 刘庆江 张晓光 . 一种实用的集成芯片测试仪的设计 . 中国矿业大学信息与电气工程学院 , 20xx 附 录 单片机单词记忆测试器 C 程序源代码 /************************************************************************ /**单片机单词测试程序 /**设计一个以单片机为核心的单词记忆测试器; /** 实现 单词的录入(为使程序具有可演示性,单词不少于 10 个 ); /**单词用按键控制依次在屏幕上显示,按键选择认识还是不认识, /**也可以直接进入下一个或者上一个; /**单词背完后给出正确率。 /*************************************************************************/ define uchar unsigned char define uint unsigned int include include //ASCII字模表 include //12864 液晶屏底层驱动程序 bit ERROR=1。 //输入字符错误标志位 bit result=0。 //输入结果对错的标志位 ,为 0 是正确 bit verify=1。 //已按了确认键后清零 sbit ERR=P2^7。 uchar correctNUM。 //统计测 试正确的单词数 ,即得分 /***************************************** /** 存储要测试的单词,放在 ROM中 /****************************************/ uchar code S[10][5]={ tree , //树 rain , //雨 water, //水 fly , //飞 go , //去 fish , //鱼 snow , //雪 eat , //吃 rice , //米 ice , //冰 }。 uchar code SL[10]={4,4,5,3,2,4,4,3,4,3}。 //存储各测试单词的长度 uchar KeyNum[8]。 //储存输入的单词 /***************************************** /** 存储键盘的字母值 ,放在 ROM中 /****************************************/ uchar code tab1[6][5]={{39。 a39。 ,39。 b39。 ,39。 c39。 ,39。 d39。 ,39。 e39。 }, {39。 f39。 ,39。 g39。 ,39。 h39。 ,39。 i39。 ,39。 j39。 }, {39。 k39。 ,39。 l39。 ,39。 m39。 ,39。 n39。 ,39。 o39。 },。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。