北京航空航天大学自动化学院计算机测控实验报告_第1页
北京航空航天大学自动化学院计算机测控实验报告_第2页
北京航空航天大学自动化学院计算机测控实验报告_第3页
北京航空航天大学自动化学院计算机测控实验报告_第4页
北京航空航天大学自动化学院计算机测控实验报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、实验一键盘显示实验一、实验目的(1)掌握MCS51 系统中键盘显示接口的方法;(2)掌握中断处理程序的编程方法。二、实验原理2.1 数码管显示原理实验箱上有6个共阴极数码管,图1是其外部特性图,图2是其内部原理图,由图2 可知,每个数码管由8个发光二极管组成,其中aDP称为数码管的段控信号,K是8个发光二极管的公共端,称为位控信号。所以为了让数码管显示一个数字,必须将位控信号接低电平,段控信号接高电平。例如:如要显示数字“1”,b端和c 端应该接高电平,其余各端接低电平。模块连线方式:2.2 键盘扫描原理键盘扫描原理如图3 所示,“K1”和“K2”是按键,按键的两端都接有10k的上拉电阻。当行

2、扫描端为低电平,同时“K1” 键被按下时,“K1”的列读取端就会出现低电平,由处理器对行扫描信号和列读取信号进行综合判断后,得出“K1”键被按下的结论。模块连线方式:三、程序流程图3.1数码管显示实验开始定义ID1、ID2、段锁存、位锁存、段码、位码i=8?取位码,位锁存取段码,段锁存a=1000?Y 延时,i+i=0,a+NY同样流程显示ID2结束N3.2中断键盘显示实验开始系统初始化键盘电平重置键值处理存入码值键盘中断退出中断读取码值显示码值定时器中断退出中断四、实验步骤1. 参照实验指导书连接杜邦线。2. 编写程序,并用KeilC软件调试程序。3. 程序编译无错后使用S51ISP 下载软

3、件将程序下载到单片机中。4. 观察实验现象并调试,直至得出预期结果。5.整理仪器。五、程序代码5.1数码管显示5.1.1C语言#include <reg52.h> /89C52 寄存器定义头文件#define DataPort P0sbit LATCH1=P22;/定义锁存使能端口 段锁存sbit LATCH2=P23;/ 位锁存unsigned char table16=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e, 0x79, 0x71; /段码表,从0到9,从A到Funsigned

4、char code ID1=1,1,0,3,1,0,5,2;unsigned char code ID2=1,1,0,8,1,1,6,2;/学号unsigned char code location=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/分别对应相应的数码管点亮,即位码void Delay(unsigned int t); /延时函数声明/*- 主函数-*/main() unsigned char i=0; int a=0; while(1) for(a=0;a<1000;a+) P0=locationi; /取位码 LATCH2=1; /位锁

5、存 LATCH2=0; P0=tableID1i; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=0; Delay(200); /扫描间隙延时,时间太长会闪烁,太短会造成重影 i+; if(8=i) /检测8位扫描完全结束?如扫描完成则从第一个开始再次扫描8位 i=0; /ID1显示结束 for(a=0;a<1000;a+) P0=locationi; /取位码 LATCH2=1; /位锁存 LATCH2=0; P0=tableID2i; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=0; Delay(200); /扫描间隙延时,时间太长会闪烁,太短会

6、造成重影 i+; if(8=i) /检测8位扫描完全结束?如扫描完成则从第一个开始再次扫描8位 i=0; /ID2显示结束/*- 延时函数,含有输入参数 unsigned int t,无返回值 unsigned int 是定义无符号整形变量-,其值的范围是 065535-*/void Delay(unsigned int t) while(-t);52中断键盘显示#include<reg52.h> /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define DataPort P0 /定义数据端口 程序中遇到DataPort 则用P0 替换#define KeyP

7、ort P1sbit test=P21;sbit LATCH1=P22;/定义锁存使能端口 段锁存sbit LATCH2=P23;/ 位锁存unsigned char code dofly_DuanMa=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71;/ 显示段码值0Funsigned char code dofly_WeiMa=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/分别对应相应的数码管点亮,即位码unsigned char TempDa

8、ta8; /存储显示值的全局变量void DelayUs2x(unsigned char t);/us级延时函数声明 void DelayMs(unsigned char t); /ms级延时void Display(unsigned char FirstBit,unsigned char Num);/数码管显示函数unsigned char KeyScan(void);/键盘扫描unsigned char KeyPro(void);void Init_Timer0(void);/定时器初始化unsigned char num,i,j; unsigned char temp8;/*- 主函数-

9、*/void main (void)Init_Timer0();IT0=1; /开0级中断EX0=1; /开外部中断0EA=1;while (1) /主循环 KeyPort=0xf0;/高四位置高,低四位拉低 /*- uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0255 这里使用晶振12M,精确延时请使用汇编,大致延时 长度如下 T=tx2+5 uS -*/void DelayUs2x(unsigned char t) while(-t);/*- mS延时函数,含有输入参数 unsigned char t

10、,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0255 这里使用晶振12M,精确延时请使用汇编-*/void DelayMs(unsigned char t) while(t-) /大致延时1mS DelayUs2x(245); DelayUs2x(245); /*- 显示函数,用于动态扫描数码管 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示 如输入0表示从第一个显示。 Num表示需要显示的位数,如需要显示99两位数值则该值输入2-*/void Display(unsigned char FirstBit,unsigned

11、char Num) static unsigned char i=0; DataPort=0; /清空数据,防止有交替重影 LATCH1=1; /段锁存 LATCH1=0; DataPort=dofly_WeiMai+FirstBit; /取位码 LATCH2=1; /位锁存 LATCH2=0; DataPort=TempDatai; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=0; i+; if(i=Num) i=0;/*- 定时器初始化子程序-*/void Init_Timer0(void) TMOD |= 0x01; /使用模式1,16位定时器,使用"|&q

12、uot;符号可以在使用多个定时器时不受影响 /TH0=0x00; /给定初值 /TL0=0x00; EA=1; /总中断打开 ET0=1; /定时器中断打开 TR0=1; /定时器开关打开/*- 定时器中断子程序-*/void Timer0_isr(void) interrupt 1 TH0=(65536-2000)/256; /重新赋值 2ms TL0=(65536-2000)%256; Display(0,8); / 调用数码管扫描/*- 按键扫描函数,返回扫描键值-*/unsigned char KeyScan(void) /键盘扫描函数,使用行列逐级扫描法 unsigned char

13、Val; DelayMs(10); /去抖if(KeyPort!=0xf0) /表示有按键按下 KeyPort=0xfe; /检测第一行if(KeyPort!=0xfe) Val=KeyPort&0xf0; Val+=0x0e; while(KeyPort!=0xfe); DelayMs(10); /去抖 while(KeyPort!=0xfe); return Val; KeyPort=0xfd; /检测第二行if(KeyPort!=0xfd) Val=KeyPort&0xf0; Val+=0x0d; while(KeyPort!=0xfd); DelayMs(10); /去

14、抖 while(KeyPort!=0xfd); return Val; KeyPort=0xfb; /检测第三行if(KeyPort!=0xfb) Val=KeyPort&0xf0; Val+=0x0b; while(KeyPort!=0xfb); DelayMs(10); /去抖 while(KeyPort!=0xfb); return Val; KeyPort=0xf7; /检测第四行if(KeyPort!=0xf7) Val=KeyPort&0xf0; Val+=0x07; while(KeyPort!=0xf7); DelayMs(10); /去抖 while(KeyP

15、ort!=0xf7); return Val; return 0xff;/*- 按键值处理函数,返回扫键值-*/unsigned char KeyPro(void) switch(KeyScan() case 0x7e:return 0;break;/0 按下相应的键显示相对应的码值 case 0xbe:return 1;break;/1 case 0xde:return 2;break;/2 case 0xee:return 3;break;/3 case 0x7d:return 4;break;/4 case 0xbd:return 5;break;/5 case 0xdd:return

16、6;break;/6 case 0xed:return 7;break;/7 case 0x7b:return 8;break;/8 case 0xbb:return 9;break;/9 case 0xdb:return 10;break;/a case 0xeb:return 11;break;/b case 0x77:return 12;break;/c case 0xb7:return 13;break;/d case 0xd7:return 14;break;/e case 0xe7:return 15;break;/f default:return 0xff;break; /键盘中断服务程序void onKeydown() interrupt 0test=0;num=KeyPro();if(num!=0xff)if(i<8)tempi=

温馨提示

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

最新文档

评论

0/150

提交评论