键盘及LED显示实验讲义.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验三 键盘及LED显示实验 一、实验内容 利用8255可编程并行接口控制键盘及显示器,当有按键按下时向单片机发送外部中断请求(INT0,INT1),单片机扫描键盘,并把按键输入的键码一位LED显示器显示出来。 二、实验目的及要求 (一)实验目的 通过该综合性实验,使学生掌握8255扩展键盘和显示器的接口方法及C51语言的编程方法,进一步掌握键盘扫描和LED显示器的工作原理;培养学生一定的动手能力三0xfc 0x60 0xda 0xf2 0x66 0xb6 0xbe 0xe0 0xfe 0xf6 0xee 0x3e 0x9c 0x7a 0x9e 0x8e 六、实验原理图 七、连线说明 F4区:CS、A0、A1 —— A3区:CS1、A0、A1 B6区:JP56(PA口) —— F4区:JP41(C) B6区:JP53(PB口) —— F4区:JP42(B) B6区:JP52(PC口) —— F4区:JP47(A) A3区:JP51 —— F4区:JP92(D) A3区:P1.6、P1.7 —— A3区:INT0、INT1 注:F4的D无法与INT0(P3.2)、INT1(P3.3)直接连接,所以使用P1口桥接。 八、实验参考流程图 1.主程序流程图 2.外中断服务程序流程图 外部中断0 外部中断1 定时器0中断程序,用于消抖动: 3.LED显示程序流程图 九、C51语言参考源程序 #include reg52.h unsigned char KeyResult; //存放键值 unsigned char buffer[8]; //显示缓冲区 bit bKey; //是否有键按下 xdata unsigned char P_8255 _at_ 0xf003; //8255的控制口 xdata unsigned char PA_8255 _at_ 0xf000; //8255的PA口 xdata unsigned char PB_8255 _at_ 0xf001; //8255的PB口 xdata unsigned char PC_8255 _at_ 0xf002; //8255的PC口 code unsigned char SEG_TAB[] = { //段码 0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e,0x0}; sbit bLine0 = P3^2; sbit bLine1 = P3^3; //延时1ms void Delay1ms() { unsigned char i; i = 0; while (--i); } //显示 void Display() { unsigned char i = 0x7f; unsigned char j; for (j = 0; j 8; j++) { PA_8255 = i; //扫描 PB_8255 = SEG_TAB[buffer[j]]; //段数据 i = i / 2 + 0x80; Delay1ms(); } } //更新显示缓冲区数据 void RefurbishData() { char i; for (i = 7; i 0; i--) buffer[i] = buffer[i-1]; buffer[0] = KeyResult; } void Int0Int() interrupt 0 { unsigned char i = 0x80; unsigned char KeyResult0 = 0x0; EX0 = 0; //关外部中断0 P_8255 = 0x89; //PC口输入 bLine0 = 0; //P3.2作行输出 while (i) { if ((PC_8255 i) == 0) break; KeyResult0++; i = 1; } P_8255 = 0x80; //8255的PA、PB、PC口全作输出口 PC_8255 = 0; bLine0 = 1; if (i) { TH0 = 60; //定时中断计数器初值 TL0 = 176; //定时50ms TR0 = 1; KeyResult = KeyResult0; } IE0

您可能关注的文档

文档评论(0)

w447750 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档