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

大学出版社2003[7] 何立民主编. :北京航空航天大学出版社2001[8] 刘庆江 张晓光. 一种实用的集成芯片测试仪的设计. 中国矿业大学信息与电气工程学院, 200518word memory test deviceabstractThe aim of this paper is to research and design, is based on single chip word memory test device, this word memory test device can achieve the entry word and decide whether the words correctly, inputting words are back after accuracy. The word memory side is functional, in real life in a wide range of applications, especially for learning English has a great role. This paper studies the theory of MCU based on using the latest technology and device, design develop word memory test device scheme. And the main circuit was investigated. Among them main control chip acplished by AT89C52 single, so as to ensure the quality of the signals and flexible modulation mode, in addition, but also increased the input the wrong indicator, facilitate intuitionistic judgment input is correct or not. KEY WORDS :MCU chip word memory test device AT89C52 附 录单片机单词记忆测试器C程序源代码/************************************************************************/**单片机单词测试程序/**设计一个以单片机为核心的单词记忆测试器;/** 实现单词的录入(为使程序具有可演示性,单词不少于10个);/**单词用按键控制依次在屏幕上显示,按键选择认识还是不认识,/**也可以直接进入下一个或者上一个;/**单词背完后给出正确率。 /*************************************************************************/define uchar unsigned chardefine uint unsigned intinclude 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。 }, {39。 p39。 ,39。 q39。 ,39。 r39。 ,39。 s39。 ,39。 t39。 }, {39。 u39。 ,39。 v39。 ,39。 w39。 ,39。 x39。 ,39。 y39。 }, {39。 z39。 ,1,2,3,4}}。 //最后的 1234 键盘值为功能键, 1表示确定键,2表示不认识,3表示上一个,4表示下一个 /*************************************************** 键盘扫描程序*************************************************/unsigned char kbscan() //键盘扫描 { uchar hang,lie,key。 //P1连行,P3连列 if(P1!=0xFF||P3!=0) { switch(P1amp。 0xFF) //P1 扫行 { case 0xFE:hang=5。 break。 // case 0xFD:hang=4。 break。 // case 0xFB:hang=3。 break。 // case 0xF7:hang=2。 break。 // case 0xEF:hang=1。 break。 // case 0xDF:hang=0。 break。 // } P1=0。 //P1全低电平 P3=0xFF。 //P3全高电平 switch(P3amp。 0xFF) { case 0xFE:lie=4。 break。 // case 0xFD:lie=3。 break。 // case 0xFB:lie=2。 break。 // case 0xF7:lie=1。 break。 // case 0xEF:lie=0。 break。 // } P1=0xFF。 //P1全高电平 P3=0。 //P3全低电平 while(P1!=0xFF||P3!=0)。 //按键松开后才返回值 key=tab1[hang][lie]。 } else key=39。 _39。 return (key)。 }/************************************************************************/** 主函数/** /** /*************************************************************************/void main(void){ uchar hz_Num。 //用于计当前测试的是第几个词,第一个为0 uchar temp[8]。 //用于送液晶屏显示的临时变量 uchar iword=0,Nword=0。 //输入单词字母下一个计数 LCD12864_init()。 //LCD12864初始化 ClearLCD()。 //清屏 en_disp(2,1,11,Asc,INPUT WORD:,1)。 //在第2行 第1列 en_disp(4,1,1,Asc,1)。 //在第5行,第2列开始显示 en_disp(6,0,8,Asc,correct:,1)。 //在第7行,第1列开始显示 en_disp(6,80,5,Asc,00/10,1)。 //在第7行 第81列 P1=0xFF。 //P1全高电平 P3=0。 //P3全低电平 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[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。 ) //键盘有按键按下 { 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。 //跳下一个时错误灯灭 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)。 //在第4行,第16列开始显示 } else if(S[hz_Num][iword]==KeyN。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。