基于单片机的键盘系统绪论.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一 设计任务:液晶显示控制系统 任务要求:1. 可显示键盘输入数字。 2. 可实现编辑操作。 二 总体方案设计 硬件设计 1.1 4*4行列式键盘 系统所用键盘为4x4行列式扫描键盘,由P1口实现,A1到A8分别接P1.0到P1.7。如下图(具体接线由硬件电路图提供): 1.2 LCD显示原理 字符型型液晶是一种用5×7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等,最常用的为2行16个字。LCD1602就是这样。LCD1602的驱动控制器为HD44780及其兼容集成电路。HD44780内置了DDRAM、CGRAM和CGRAM。如下图: LCD1602模块的各引脚功能如下图所示: 1.3 单片机采用89C52。 2 软件设计 本次课程设计实现了一个以AT89C52单片机为核心控制元件,与键盘、LCD显示器等模块组成核心主控制模块,通过按键,实现用户按键显示到LCD1602液晶显示器上的简??4*4键盘LCD显示器。主程序流程图如图: 。 三 硬件电路设计 键盘A1~A8接单片机p1.0~p1.7 p1口全为输入端 p0口p0.0~p0.7接显示器D0~D7为输出口 p0作为输出口是,锁存器cp端一写入脉冲,与内部总线相连的D端数据取反后出现在/Q端,又经T2反相,在p0引脚上的数据正好是内部总线上的数据。 四 程序设计 /* s1,s2,s3,s4分别是123+ s5,s6,s7,s8分别是456- s9,s10,s11,s12分别是789* s13,s14,s15,s16分别是0,清除,=,/ */ /* 实现两个数的运算,每个数的位数至少可以八位 */ #includereg52.h typedef unsigned char uint8; typedef unsigned int uint16; sbit rw=P2^5; sbit rs=P2^6; sbit e=P2^7; sbit led=P3^7; sbit beep=P2^0; uint8 key,num; uint8 fuhao;//定义具体的那个符号,是加减还是乘除。 uint8 flag; //定义有没有按下符号键,这个是统称 long a,b,c,d; //定义运算数据的第一个和第二个及等于的数变量 uint8 k; //定义小数点后面显示的位数 uint8 biao; uint8 dat1[]={1,2,3,0x2b-0x30, 4,5,6,0x2d-0x30, 7,8,9,0x2a-0x30, 0,0x01-0x30,0x3d-0x30,0x2b-0x30 };//保存显示的数据 void delay(uint16 i) { while(i--); } void lcdwrc(uint8 c) { delay(1000); rs=0; rw=0; e=0; P0=c; e=1; delay(1000); e=0; } void lcdwrd(uint8 dat) { delay(1000); rs=1; rw=0; e=0; P0=dat; e=1; delay(1000); e=0; rs=0; } void lcdinit() { delay(1500); lcdwrc(0x38); delay(500); lcdwrc(0x38); delay(500); lcdwrc(0x38); delay(500); lcdwrc(0x38); lcdwrc(0x08); lcdwrc(0x01); lcdwrc(0x06); lcdwrc(0x0c); key=0; num=0; flag=0; fuhao=0; a=0; b=0; c=0; d=0; biao=0; led=0; } void keyscan() { P1=0xfe; //令第一行为0,然后判断是哪一列按下 if(P1!=0xfe) { delay(1000); if(P1!=0xfe) { key=P10xf0; switch(key) { case 0xe0: num=0;break; //1 case 0xd0: num=1;break; //2 case 0xb0: num=2;break; //3 case 0x70: num=3;break; //加 } } while(P1!=0xfe); if(num==0||num==1||num==2) //确认第一行的数1,2,3 { if(f

文档评论(0)

过各自的生活 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档