基于 HD7279 的键盘显示接口实验(C语言).doc_第1页
基于 HD7279 的键盘显示接口实验(C语言).doc_第2页
基于 HD7279 的键盘显示接口实验(C语言).doc_第3页
基于 HD7279 的键盘显示接口实验(C语言).doc_第4页
基于 HD7279 的键盘显示接口实验(C语言).doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验 基于 HD7279 的键盘显示接口实验一、实验目的1 掌握7279的工作原理和编程方法。2 掌握在MCS51系统中扩展7279键盘显示接口的方法。二、实验要求编写程序,利用7279及键盘显示接口电路,编程实现按键的读取,并将按键值显示在数码管上。三、芯片资料HD7279A 是一片具有串行接口的,可同时驱动8位共阴式数码管(或64只独立LED)的智能显示驱动芯片,该芯片同时还可连接多达64键的键盘矩阵,单片即可完成LED显示、键盘接口的全部功能。HD7279A内部含有译码器,可直接接受BCD码或16进制码,并同时具有2种译码方式,此外,还具有多种控制指令,如消隐、闪烁、左移、右移、段寻址等。HD7279A具有片选信号,可方便地实现多于8位的显示或多于64键的键盘接口。程序:#include void long_delay(void);void short_delay(void);void delay(unsigned char);void write(unsigned char, unsigned char);unsigned char read(unsigned char);void send_byte(unsigned char);unsigned char receive_byte(void);unsigned char j, k;unsigned int tmr;sbit cs=P14;sbit clk=P15;sbit dat=P12;sbit key=P32; #define RESET 0xa4#define TEST 0xbf#define DECODE0 0x80/下载数据方式0#define DECODE1 0xc8 /下载数据方式1#define READ 0x15#define UNDECODE 0x90#define RTL_CYCLE 0xa3#define RTR_CYCLE 0xa2#define RTL_UNCYL 0xa1#define RTR_UNCYL 0xa0#define ACTCTL 0x98 /xiaoyin#define SEGON 0xe0 /duanliang#define SEGOFF 0xc0#define BLINKCTL 0x88void main() send_byte(TEST);for (j=0;j3;j+) delay(100); send_byte(RESET);IP=0x01;/外部中断0高优先级EA=1; IT0=1; /外部中断0为下降沿触发 EX0=1; while (1);void T0ISR() interrupt 0 unsigned char k ,s,g,z; for (tmr=0;tmr0x2000;tmr+); send_byte(RESET); k=read(READ); g=k%10; s=k/10; send_byte(0x87); send_byte(s); send_byte(0x86); send_byte(g); delay(50); switch(k) case 0x01: for (tmr=0;tmr0x2000;tmr+); send_byte(RESET); write(UNDECODE+7,0x37);/ 不译码显示H delay(80); for (j=0;j23;j+) send_byte(RTR_CYCLE);/ 循环右移 delay(12); break;case 0x02: for (tmr=0;tmr0x2000;tmr+); send_byte(RESET); write(UNDECODE,0x37); delay(80); for (j=0;j23;j+) send_byte(RTL_CYCLE);/ 循环zuo移 delay(12); break;case 0x03: for (tmr=0;tmr0x2000;tmr+); send_byte(RESET); for (j=0;j16;j+) send_byte(RTL_UNCYL); write(DECODE0,j); delay(50); break;case 0x09: for (tmr=0;tmr0x2000;tmr+); send_byte(RESET); for (j=0;j16;j+) send_byte(RTR_UNCYL); write(DECODE1+7,j); delay(50); delay(100); break;case 0x0a: for (tmr=0;tmr0x2000;tmr+); send_byte(RESET); for (j=0;j16;j+) send_byte(RTR_UNCYL); write(DECODE1+7,j); delay(50); delay(150); z=0xff; for (j=0;j6;j+) z=z/2; write(ACTCTL,z);/ 加一个消隐位 delay(100); write(ACTCTL,0xff); break;case 0x11: for (tmr=0;tmr0x2000;tmr+); send_byte(RESET); for (j=0;j64;j+) write(SEGON,j);/ 将64个显示段逐个点亮 delay(20); break;case 0x12: for (tmr=0;tmr0x2000;tmr+); send_byte(RESET); for (j=0;j64;j+) write(SEGON,j);/ 将64个显示段逐个点亮 delay(20); for (j=0;j64;j+) write(SEGOFF,j);/ 将前一个显示段关闭 delay(20); break; default: break; void write(unsigned char cmd, unsigned char dta)send_byte (cmd);send_byte (dta);unsigned char read(unsigned char command)send_byte(command);return(receive_byte();void send_byte(unsigned char out_byte)unsigned char i;cs=0;long_delay(); /最少25微秒for (i=0;i8;i+)if (out_byte&0x80)dat=1;elsedat=0;clk=1;short_delay();clk=0;short_delay();out_byte=out_byte*2;dat=0;unsigned char receive_byte(void)unsigned char i, in_byte;dat=1;long_delay();for (i=0;i8;i+)clk=1;short_delay(); /输出键盘数据建立时间in_byte=in_byte*2;if (dat)in_byte=in_byte|0x01;clk=0;short_delay();dat=0;return (in_byte);void long_delay(void)unsigned char i;for (i=0;i0x30;i+);void

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论