版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、片机原理及应用课程设计报告利用矩阵键盘来控制1602液晶显示器的显示设计2011年12月7日目录1课程设计的目的1 2课程设计的要求3. 硬件设计3.1设计思想3. 2主要元器件介绍3. 3.功能电路介绍3.31 1602液晶显示器 3. 32 3*4矩阵键盘(1)矩阵式键盘的结构与工作原理(2)矩阵式键盘的按键识别方法4. 软件设计4.1设计思想4. 2软件流程图4. 3源程序:5. 调试运行6. 设计心得体会:1课程设计目的1.1巩固和加深对单片机原理和接口技术知识的理解;1. 2培养根据课题需要选学参考书籍、查阅手册和文献资料的能 力;13学会方案论证的比较方法,拓宽知识,初步掌握工程设
2、计的 基本方法;14掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计 和调试方法;1. 5能按课程设计的要求编写课程设计报告,能正确反映设计和 实验成果,能用计算机绘制电路图和流程图。2. 课程设计要求2. 1在3*4矩阵键盘上输入信息2. 2在1602芯片上显不时间信息。2. 3显示数据的设计与变换3. 硬件设计3. 1设计思想在3*4矩阵键盘上输入信息,通过中央处理器处理信息,再 通过1602液晶显zk器显zk信息。3. 2主要元器件介绍(1) 电源电路(2) stc89c82rc 单片机一块。(3) 1602液晶显示器一块(4) 杜邦线若干。(5) 3*4矩阵键盘3. 3功能电路介绍
3、3.31 1602液晶显示器液晶显示模块具有体积小、功耗低、显示内容丰富等特点,现在 字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器 件了。1602可以显示2行16个字符,有8位数据总线d0-d7,和rs、r/w、en三个控制端口,工作电压为5v,并且带有字符对比度调节 和背光。1602外观如下图所示1602引脚说明号符号引脚说明号符号引脚说明1vss电源地9d2双向数据口2vdd电源正极10d3双向数据口3vl对比度调节11d4双向数据口4rs数据/命令选择12d5双向数据口5r/w读/写选择13d6双向数据口6e模块使能端14d7双向数据口7do双向数据口15blk背光源地8d
4、1双向数据口16bla背光源正极注意事项:从该模块的正面看,引脚排列从右向左为:15脚、16 脚,然后才是1 14脚(线路板上已经标明)。vdd:电源正极,4.5-5. 5v,通常使用5v电压;vl: lcd对比度调节端,电压调节范围为0 5v。接正电源时对 比度最弱,接地电源时对比度最高,但对比度过高时会产生“鬼影”,因此通常使用一个10k的电位器来调整对比度,或者直接串接一个电 阻到地;rs: mcu写入数据或考指令选择端。mcu要写入指令时,使rs为 低电平;mcu要写入数据时,使rs为高电平;r/w:读写控制端。r/w为高电平时,读取数据;r/w为低电平时, 写入数据;e: lcd模块
5、使能信号控制端。写数据时,需要下降沿触发模块。d0-d7: 8位数据总线,三态双向。如果mcu的i/o 口资源紧张 的话,该模块也可以只使用4位数据线d4-d7接口传送数据。本充 电器就是采用4位数据传送方式;bla: led背光正极。需要背光吋,bla串接一个限流电阻接vdd,blk接地,实测该模块的背光电流为50ma左右;blk: led背光地端。1602操作时序(1) 读操作时序(2)写操作时序(3)基本操作时序1.1读状态:1.2写指令:13读数据:1.4写数据:输入:rs=l, rw=h, e=h输入:rs=l. rw=l. dod7二指令码e二高脉冲输入:rs=h, rw=h, e
6、=h输出:dod7二状态字输出:无输出:dod7二数据输出:无输入:rs=h. rw=l. dod7二数据,e二高脉冲vocj9 lcd16o2t3d id 目502rj6(16g2)图为dm-162液晶显示模块和单片机stc89c82rc的接口电路3. 32 3*4矩阵键盘厂 a4第矩阵键盘<)(1)矩阵式键盘的结构与工作原理在键盘中按键数量较多时,为了减少i/o 口的占用,通常将按键 排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不 直接连通,而是通过一个按键加以连接。这样,一个端口(如p1 口) 就可以构成47= 16个按键,比之直接将端口线用于键盘多出了一 倍,而且线
7、数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的i/o 口作为输 出端,而列线所接的i/o 口则作为输入。这样,当按键没有按下时, 所有的输出端都是高电平,代表无键按下。行线输出是低电平,一旦 有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可 得知是否有键按下了。具体的识别及编程方法如下所述。(2)矩阵式键盘的按键识别方法确定矩阵式键盘上何键被按下介绍一种肾亍扫描法”。行扫
8、描法行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法。1、判断键盘中有无键按下 将全部行线丫0丫3置低电平,然后 检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下, 而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所 有列线均为高电平,则键盘中无键按下。2判断闭合键所在的位置在确认有键按下后,即可进入确定具 体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行 线为低电平时,其它线为高电平。在确定某根行线位置为低电平后, 再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平 的行线交叉处的按键就是闭合的按键。4. 软件设计4.1设计思想:把
9、一个多功能的复杂程序划分为若干简单的,功能 单一的程序模块,各程序模块完成明确的任务,实现某个具体功能。 在具体需要时调用相应的模块即可。4. 2软件流程图:4. 3源程序: #include <reg52. h>#include <intrinsh>#define uchar unsigned char/显示缓存键顺序吗/x*0. 14ms#define uint unsigned int uchar dis_buf;uchar temp;uchar key;void delayo(uchar x);sbit lcd_rw 二 p2筲;sbit lcd rs 二 p2
10、飞;sbit lcd_en = p2"7;uchar cdisl16 key number ;uchar cdis216二key-code:h ;#def ine delaynopo ; _nop_() ;_nop_() ;_nop_() ;_nop_() :;/ki>/ zlx zts zts ztszts zts zts zt% tx zts zts zts >tx zts zts zts zt% zt% zts zts zts zt% xlx xlx zts zts ztszts zts zts zts zts zjs zts zts zts zts zjs zjs
11、 zjs zts zts zts zjs is is zts zjs zjs zts*/*延时子程序*/void delay(uchar x) uchar j;while(x-)!二0) for(j二0;j125;j+);/2z%1< lx lx vlx vl %1< vl vlx kiz kix vl vlx lx £z k£x vlx vl %fx slqx vl k! >1%!zs! sl/z|x zjz|s zjx >js zjs zjx zjs z|s zjs/*检查lcd忙状态alcd.busy为1时,忙,等待o lcd-busy为0时,
12、闲,可写指令与数据*/sixsix six six >lzlx lx lx lx six >lz slz lx six six %lx %lx %lx six >£ lx lx lx lx lx six >lz >lz slz six >lx >lx >lx %lx %lx six six six six >lx >lx six lx/xpxxtx xpx xpxxtx xtxxttv tv tx xtx xtx xtx|x xtx xtx xtxxtx xtx xtx xtx xtx xtx jx 彳ubit lcd bu
13、sy ()bit result;lcd_rs = 0;lcd rw 二 1;lcd_en 二 1;delaynopo ;result = (bit) (p0&0x80);lcd_en = 0;return (resuit);/%lx %lx %lx six lx %lx six six six >lzlx lx lx lx six >lz slz lx six six %lx %lx %lx six lx lx lx lx lx six >lz >lz slz six >lx >lx >lx %lx %lx six six six six &g
14、t;lx >lx six lx/xpxxtx xpx xpxxtx xtxxttx xtx xtx xtx|x xtx xtx xtxxtx xtx xtx xtx xtx xtx jx 彳uv£x/zjs z| yrs /*写指令数据到lcd*/*rs二l, rw二l, e二高脉冲,d0-d7二指令码。*/>1 >1 >£>1 >1 >1>1 >1 %1 %1 %1 %1 %1 %£%£ sl sl >1 >1>£ >1 >1 %1 %lz >1 >
15、;1 >1 >1 >1 lz %lz %lz >1 lz vfx/ <r <r #tx #t #t yr zv% #tx #tx #t >r zr% ?% #tx #tx #tx ?% <r #t #t #tx ?% <r#t zj% #tx ?% <r% #tx #t #t yr zv% #tx #tx #t #t #t #t #t #t #t #t #t #t #t #t #t #t #t #t #t #t #t #t "卜"卜>1< >1< 1< 1< >1<
16、/xjx |x tx |x t% xtx xtx /void lcd_wcmd(uchar cmd)while (led busy ();lcd_rs = 0;lcdrw 二 0;lcd_en 二 0;_nop_();_nop_ ();p0 = cmd;delaynop ();lcd_en 二 1;delaynop ();lcd en 二 0;/ >1ki>/ zlx zts zts zts xt >t zts zts zts zt% tx >t zts zts zts >t >tx zts zts zts zt% zt% zts zts zts zt% x
17、lx xlx zts zts zts xt >t zts zts zts zts zts zjs zts zts zts zts zjs zjs zjs zts zts zts zjs is is zts zjs zjs zts z|s£x vl >£ >1%£/yx zp% zr #t rx zjx zj% #t #t /*写显示数据到lcd*/*rs二h, rw=l, e二高脉冲,d0-d7=数据。*/slzsix sixsl slzsl slzslzsl slz slz slz slzslz slz slz slz slz slz six
18、siz/ztx ztxtx ztxrx ix ztx ztxtx ztx ztx ztxztx ztxtx zttx ztx ztx ztx ztx t> tx tx tx ztx ztx tx tx tx tx tx tx tx tx7"/xix zjx >t zts zts zts zrs zts /void led wdat(uchar dat)while (lcd_busy();lcd_rs 二 1;lcd_rw 二 0;lcd en 二 0;p0 = dat;delaynop ();lcd_en 二 1;delaynop ();lcd en 二 0;/ xlx%
19、lxxlx%lxxlx/ xt xt ztx ztx ztx xt ztx zt ztx ztx xt xt xt ztx ztx ztx xt xt ztx ztx ztx xt xt ztx jx zjxxt ztx ztx ztx xt ztx zt ztx ztx ztx ztx xtx ztx ztx x|x xjx xjx xtx xtx xtx zjx ztx xtx xtx xtx xtx xtx ztx xtx xtx/* lcd初始化设定/slzsix sixsl slzsl slzslzsl slz slz slz slzslz slz slz slz slz slz s
20、ix siz/ztx ztxtx ztxrx ix ztx ztxtx ztx ztx ztxztx ztxtx zttx ztx ztx ztx ztx t> tx tx tx ztx ztx tx tx tx tx tx tx tx tx/16*2显示,5*7点阵,8位数据void led init ()delay (15);lcd_wcmd (0x38);delay (5);led wemd (0x38);delay (5);lcd_wcmd(0x38);delay (5);led wemd(0x0c); delay(5); lcd_wcmd(0x06); delay (5); l
21、cd_wcmd(0x01); delay (5);/显示开,关光标移动光标清除lcd的显示内容/lz lz lz £z £zlz £z £zlz£z £z lz £z £z>1 >lz lz lz>lzlz lz >1/叫*/*设定显示位置*/lx %lx %lx %lx six >£ lx lz %lx six six six >1< >lz %1< 1< lx lx lx lx six >lz slz lx lz six six %lx
22、 %lx %lx six >£ lx lx lx lx lx six >lz >lz slz 1< six >lx >lx >lx %lx %lx six six six six >lx >lx six lx/xpx|x |xxtx xpx xpxxtx xtx xjx tv tv xttv tv tx xtx xtx xtx|x xtx xtx xtxxtx xtx xtx xtx xtx xtx jx 彳u*/void lcd_pos(uchar pos)led wcmd(pos | 0x80) ;/数据指针二80+地址变量/
23、 >1vxvxki>/ zlx zts zts zts xt >t zts zts zts zt% tx >t zts zts zts >t >tx zts zts zts zt% zt% zts zts zts zt% xlx xlx zts zts zts xt >t zts zts zts zts zts zjs zts zts zts zts zjs zjs zjs zts zts zts zjs is is zts zjs zjs zts z|s/*键扫描子程序(4*3的矩阵)pl. 4 pl. 5 pl. 6 pl. 7为行pl. 1 p1
24、.2p1.3 为列*/ >1vxvxki>/ zlx zts zts zts xt >t zts zts zts zts tx >t zts zts zts >t >tx zts zts zts zts zt% zts zts zts zt% xlx xlx zts zts zts zts >t zts zts zts zts zts zjs zts zts zts zts zjs zjs zjs zts zts zts zjs is is is zts zts xts z|s/高四位输入/读 pl 口/屏蔽低四位行为高电平列void keyscan(
25、void)delay(10);temp 二 0;p3二oxfo;为低电平delay (1);tcmp=p3;temp=temp&0xf0;temp二"(temp>>4)|oxfo);if (temp=l) / pl. 4 被拉低key=0;else if (tcmp=2)key=l;else if(temp二二4)key=2;else if (temp=8)key二3;elsekey二16;/ pl. 5被拉低/ pl. 6被拉低/ pl. 7被拉低p3=0x0f;/低四位输入 列为高电平 行为低电平delay (1);temp二p3;/读 pl 口temp=te
26、mp&oxof;temp(temp | oxfo);if (temp=2)/ pl. 1 被拉低key二key+o;else if (tcmp=4)/ pl. 2 被拉低key二key+4;else if (temp=8) / pl. 3 被拉低key二key+8;elsekcy=16;dis_buf 二 key;/键值入显示缓存dis_buf 二 dis_buf & oxof;if (dis_buf>9)/转换为ascii码dis_buf 二 dis_buf+0x37;else dis_buf 二 dis_buf+0x30;p3=0xff;while(p3!=oxff)
27、 p3二oxff;delay (30);/sl >1 slzslz slz >1 sl si s£ s£ >1 >1 iz %lz vl %lz lz k!z viz %1> tz sfz kiz k!z %fz %fz %lz/nx 叫j nxp <pzjxzp#jxy #jx zp zj#y #y x|x x|xjx #jx #jx #|x*/*判断键是否按下*/ v!x v!x k!> k!> k!xk!x k!>%izfz sl %ixk! vix ix/x|s x|s z|s z|s z|s zjs x|s z
28、|s x|s z|s zts zts zts zts zts zts zts zts zts z|s zts ztsvoid keydown(void)p3=0xf0;if(p3!二oxfo) 判断按键是否按下如果按钮按下 会拉低pl 其中的一个端口keyscan ();/sixsix six six >lzlx lx lx lx six >lz slz lx six six %lx %lx %lx six >£ lx lx lx lx lx six >lz >lz slz six >lx >lx >lx %lx %lx six six
29、 six six >lx >lx six lx/xpxxtx xpx xpxxtx xtxxttv tv tx xtx xtx xtx|x xtx xtx xtxxtx xtx xtx xtx xtx xtx jx 彳u*/*主程序*/%£%£ sl sl >1>1 >1 >£>1 >1 >1>1 >1%£%£ sl sl >1 >1>£ >1 >1 %lz >1 >1 >1 >1 >1 lz %lz %lz
30、>1 lz vfx/ <r <r #tx #t #t yr zv% #tx #tx #t >r zr% ?% #tx #tx #tx ?% <r #t #t #tx ?% <r#t zj% #tx ?% <r% #tx #t #t yr zv% #tx #tx #t #t #t #t #t #t #t #t #t #t #t #t #t #t #t #t #t #t #t #t "卜"卜*/main ()uchar m;po=oxff;pl二oxff;delay(10);lcd_init ();/置 p0 口/置 pl 口/延时/初始化lcdlcd_pos(0);个字符m = 0;while(cdislm !二0')lcd_wdat(cdislm);/设置显示位置为笫一行的第1/显示字符h1+;lcdpos(0x40);/设置显示位置为第二行第1个字符m = 0;while (cdis2m !二'0') lcd_wdat(cdis2m); m+;dis_buf 二 0x2d;wh订c (1)keydown ();lcd_pos(0x4c):led wdat(dis buf);/显示字符/第一位数显示5.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 砂石购销合同纠纷
- 简单商业采购合同
- 英文船舶采购合同范本
- 安全守护服务合同
- 汽车生产所需零部件购买合同
- 快递服务合同的优化策略
- 上海建筑防水劳务分包合同
- 简化版借款合同样式
- 房屋买卖合同代理催付词
- 地砖购销合同示例
- 书法创作与欣赏智慧树知到期末考试答案章节答案2024年华侨大学
- 经典导读与欣赏-知到答案、智慧树答案
- 悉尼歌剧院-建筑技术分析
- 肺结核病防治知识宣传培训
- 三切口食管癌手术步骤
- 食品安全与卫生智慧树知到期末考试答案2024年
- 高三一模作文“文学不是我生命中的唯一”导写
- (2024年)功能医学与健康管理
- 2023年度省综合专家库评标专家继续教育培训考试试题(三套)
- 江苏省南京市秦淮外国语学校2023-2024学年八年级下学期英语3月月考试卷
- 试验检测单位安全培训课件
评论
0/150
提交评论