计算机测控实验1_第1页
计算机测控实验1_第2页
计算机测控实验1_第3页
计算机测控实验1_第4页
计算机测控实验1_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、实验一 键盘显示实验 一、 实验目的1、掌握MCS51系统中扩展8279键盘显示接口的方法;2、掌握8279的工作原理和编程方法;3、掌握中断处理程序的编程方法。二、 开发环境1、程序开发调试环境:KeilC2、程序烧写环境S51ISP下载软件 3、程序开发环境演示三、 硬件原理图1. 数码管显示原理介绍实验箱上有6个共阴极数码管,图1是其外部特性图,图2是其内部原理图,由图2 可知,每个数码管由8个发光二极管组成,其中aDP称为数码管的段控信号,K是8个发光二极管的公共端,称为位控信号。所以为了让数码管显示一个数字,必须将位控信号接低电平,段控信号接高电平。例如:如要显示数字“1”,b端和c

2、 端应该接高电平,其余各端接低电平。模块连线方式:2. 键盘扫描原理介绍键盘扫描原理如图3 所示,“K1”和“K2”是按键,按键的两端都接有10k的上拉电阻。当行扫描端为低电平,同时“K1” 键被按下时,“K1”的列读取端就会出现低电平,由处理器对行扫描信号和列读取信号进行综合判断后,得出“K1”键被按下的结论。模块连线方式:四、 软件流程图数码管显示流程图开始初始化,设置初始常数设置IO端口设置学号常数显示第一位并时间延迟显示第二位并时间延迟显示第三位并时间延迟显示第四位并时间延迟显示第五位并时间延迟显示第六位并时间延迟显示第七位并时间延迟键盘部分流程图开始行置高位,列置地位是 有返回键值退

3、出检测有无按下扫描第一行是返回键值退出是否按下扫描第二行是返回键值退出是否按下扫描第三行是返回键值退出是否按下扫描第四行是返回键值退出是否按下返回0xff五、 实验步骤a) 打开软件Keil,建立工程,并选择CPU,新建文件,写入源代码,然后向工程中添入文件,同时编译设置后对文件进行编译,最后调试软件。b) 对硬件进行正确连线,并与电脑相连接,。c) 使用S51ISP 下载软件,先检测器件选择单片机型号,再自动打开文件,随后下载文件,将编号的程序载入单片机中。d) 注意与主机握手链接后观察硬件实验现象。六、 软件源码1、 显示自己学号汇编程序DATA_8279 EQU 1B30H ;数据口地址

4、COMM_8279 EQU 1B31H ;命令口地址ORG 00HLJMPINITORG 30HDB03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH,077H,07CH,039H,05EH,079H,071H;0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,FDAT0 EQU 30H;要显示的八位数DAT1 EQU 31HDAT2 EQU 32HDAT3 EQU 33HDAT4 EQU 34HDAT5 EQU 35HDAT6 EQU 36HDAT7 EQU 37H LSA EQU P2.2LSB EQU P2.3LSC EQU P2

5、.4GPIO_DIG EQUP0;*; 主程序 ;;*;INIT:MOV DAT0,#006HMOVDAT1,#006HMOV DAT2,#03FHMOV DAT3,#04FHMOV DAT4,#006HMOV DAT5,#03FHMOV DAT6,#006HMOV DAT7,#06DHMAIN:CLR LSA; 显示第一位CLR LSBCLRLSCMOV GPIO_DIG,DAT0ACALL DELAY;显示持续时间MOV GPIO_DIG,#000H;消隐SETB LSA; 显示第二位CLR LSBCLRLSCMOV GPIO_DIG,DAT1ACALL DELAY;显示持续时间MOV G

6、PIO_DIG,#000HCLR LSA;显示第三位SETB LSBCLRLSCMOV GPIO_DIG,DAT2ACALL DELAY;显示持续时间MOV GPIO_DIG,#00HSETB LSA;显示第四位SETB LSBCLRLSCMOV GPIO_DIG,DAT3ACALL DELAY;显示持续时间MOV GPIO_DIG,#00HCLR LSA;显示第五位CLR LSBSETBLSCMOV GPIO_DIG,DAT4ACALL DELAY;显示持续时间 MOV GPIO_DIG,#00HSETB LSA;显示第六位CLR LSBSETBLSCMOV GPIO_DIG,DAT5ACA

7、LL DELAY ;显示持续时间MOV GPIO_DIG,#00HCLR LSA;显示第七位SETB LSBSETBLSCMOV GPIO_DIG,DAT6ACALL DELAY ;显示持续时间MOV GPIO_DIG,#00HSETB LSA;显示第七位SETB LSBSETBLSCMOV GPIO_DIG,DAT7ACALL DELAY ;显示持续时间MOV GPIO_DIG,#00HLJMP MAIN ;无条件循环MAIN ;*; 延时程序 ;;*;DELAY:MOV R7,#0FFHDJNZ R7,$RETENDC语言程序include<reg52.h> /包含头文件 #d

8、efine DataPort P0 /定义数据端口 sbit LATCH1=P22;/定义锁存使能端口 段锁存sbit LATCH2=P23;/ 位锁存unsigned char code dofly_DuanMa=0x06,0x06,0x3f,0x4f,0x06,0x3f,0x06,0x6D;/ 显示段码值11031015unsigned char code dofly_WeiMa=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/分别对应相应的数码管点亮,即位码void Delay(unsigned int t); /函数声明main() unsigned

9、char i=0; while(1) DataPort=dofly_WeiMai; /取位码 LATCH2=1; /位锁存 LATCH2=0; DataPort=dofly_DuanMai; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=0; Delay(200); /扫描间隙延时 i+; if(8=i) /检测8位扫描完全结束?如扫描完成则从第一个开始再次扫描8位 i=0; void Delay(unsigned int t) while(-t);2、 键盘程序#include<reg52.h> /包含头文件#define DataPort P0 /定义数据端口

10、 #define KeyPort P1sbit LATCH1=P22;/定义锁存使能端口 段锁存sbit LATCH2=P23;/ 位锁存bit KeyPressFlag;/定义按键标志位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;/分别对应相应的数码管点亮,

11、即位码unsigned char TempData10; /存储显示值的全局变量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);/定时器初始化void Init_INT0(void); /外部中断

12、0初始化和/*- 主函数-*/void main (void)unsigned char num,i,j; unsigned char temp8;Init_Timer0();Init_INT0();while (1) /主循环 KeyPort=0xf0;/ 赋值用于中断检测 if(KeyPressFlag=1) KeyPressFlag=0; /按键标志清零,以便下次检测 num=KeyPro(); if(num!=0xff) if(i<8) tempi=dofly_DuanManum; for(j=0;j<=i;j+) TempData7-i+j=tempj; i+;if(i=

13、9)/多出一个按键输入为了清屏 原本应该为8 i=0; for(j=0;j<8;j+)/清屏 TempDataj=0; /*- uS延时函数-*/void DelayUs2x(unsigned char t) while(-t);/*- mS延时函数-*/void DelayMs(unsigned char t) while(t-) /大致延时1mS DelayUs2x(245); DelayUs2x(245); /*- 显示函数,用于动态扫描数码管-*/void Display(unsigned char FirstBit,unsigned char Num) static unsig

14、ned 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; /TH0=0x00; /给定初值 /TL0=0x00; EA=1; /总中断打开 ET0=1;

15、 /定时器中断打开 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 Val; KeyPort=0xf0;/高四位置高,低四位拉低 if(KeyPort!=0xf0)/表示有按键按下 DelayMs(10);

16、/去抖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); /去抖 while(KeyPort!=0

17、xfd); 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(KeyPort!=0xf7); return

18、 Val; return 0xff;/*-按键值处理函数,返回扫键值-*/unsigned char KeyPro(void) switch(KeyScan() case 0x7e:return 0;break;/0 按下相应的键显示相对应的码值 case 0x7d:return 1;break;/1 case 0x7b:return 2;break;/2 case 0x77:return 3;break;/3 case 0xbe:return 4;break;/4 case 0xbd:return 5;break;/5 case 0xbb:return 6;break;/6 case 0xb7:return 7;break;/7 case 0xde:return 8;break;/8 case 0xdd:return 9;break;/9 case 0xdb:return 10;break;/a case 0xd7:return 11;break;/b case 0xee:return 12;break;/c case 0xed:return 13;break;/d case 0xeb:return 14;break;/e case 0xe7:return 15;break;/f def

温馨提示

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

评论

0/150

提交评论