实验四实验报告 - 图文

更新时间:2023-10-12 17:52:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

学号 14142200283序号 14

单片机原理与接口技术

实验报告

实验项目序号实验 四 实验项目名称动态显示与矩阵式键盘实验

姓名 彭任远 专业 电子信息工程 班级 14-1BF 完成时间 2016年 6月1日 程序关键部分节选:

uchar code sled_bit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //定义点亮数码管位选码

data uchardisp[8]={16,16,16,16,16,16,16,16}; uchar code table[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //共阴极数码管显示段码

第一题:void T0_int(void) interrupt 1

{ TH0=(65536-1000)/256; TL0=(65536-1000)%6;

oe=1; // 关闭2个573输出,防止在送数据时相互影响

k = disp[j]; // 每次显示ar[j]的数据 P0 = table[k]; // 相应显示数字段码 dx=1;

dx=0; // 锁存段码

P0=sled_bit[j]; // 选择相应数码管位选 wx=1;

wx=0; // 锁存位码

oe=0; // 打开2个573三态门,输出段码和位码 if(++j>=8)j=0; // 为下一个显示做准备 }

void int0_isr(void) interrupt 0 // 外中断0的中断服务函数 { uchar i;

if(key1==0) for(i=0;i<8;i++) disp[i]=ar[i];

if(key2==0) for(i=0;i<8;i++) disp[i]=br[i]; }

第二题:

P2=0xf0; delay(5); a=P2; P2=0x0f; delay(5); b=P2; a=a|b;

if(a!=0xff) //未按键,不处理 {

while(P2!=0x0f); //等待松手 ,一旦松手后才赋键值 switch(a)

{ case 0xee: num=0; break; case 0xde: num=1; break;

case 0xbe: num=2; break; case 0x7e: num=3; break; case 0xed: num=4; break; case 0xdd: num=5; break; case 0xbd: num=6; break; case 0x7d: num=7; break; case 0xeb: num=8; break; case 0xdb: num=9; break; case 0xbb: num=10;break; case 0x7b: num=11;break; case 0xe7: num=12;break; case 0xd7: num=13;break; case 0xb7: num=14;break; case 0x77: num=15; }

for(i=0;i<7;i++) disp[i]=disp[i+1]; disp[7]=num; }

delay(255); //消弹跳 }

第三题:

if(num<10)

{for(i=0;i<7;i++) disp[i]=disp[i+1]; disp[7]=num; }

if(a==0xe7) { num=0;

for(x=0;x<8;x++) disp[x]=num; }

if(a==0x77)

{num=16;

for(y=0;y<8;y++) disp[y]=num; } }

delay(255); //消弹跳

实验实物图: 第一题:

第二题: 第三题:

实验四动态显示与矩阵式键盘实验

一、实验目的

1、 进一步理解数码管与单片机的接口原理与动态显示原理,理解单片机矩

阵式键盘按键识别的原理;

2、 掌握单片机动态显示应用和编程方法; 3、 掌握单片机矩阵式键盘按键识别的方法。 二、实验前准备

1、 完成作业6;

2、 根据实验内容编写好相关程序,并进行Proteus仿真。 三、实验内容

实验内容为3项,其中第1、2项必做。 1、动态显示。

未按键不显示,按K1键,动态显示“19491001”;按K2键,动态显示“20141210”。

2、动态显示与按键识别。

矩阵式键盘键值分别是0-F,未按键不显示。每按键一次,键值在最低位显示,原键值向高位移一位。

3、可控动态显示与按键识别。

矩阵式键盘键值分别是0-9,最下面一排键位功能键,左右两个键分别为“清0键”“C”,和”“回车键”“?”,其它键无效。未按键不显示,每按键一次,键值在最低位显示,原键值向高位移一位。按8个键后,再按键无效。按清0键全显示“0”。按“?”后全部熄灭,再按键重新开始。 四、实验原理图

1918171615141312Q0Q1Q2Q3Q4Q5Q6Q774HC573LEOEQ0Q1Q2Q3Q4Q5Q6Q7U21918171615141312U374HC573LEOE1111RP81k1098765432D0D1D2D3D4D5D6D723456789D0D1D2D3D4D5D6D7111U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD3938373635343332K121222324252627281011121314151617K2K3K418XTAL29RST293031PSENALEEA2345678912345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51U4AND_4 图3.4 动态显示与矩阵式键盘实验电路原理图

动态显示共8个共阴极数码管,采用两片74LS573进行驱动,74LS573与74LS373都是8D锁存器,只是573引脚排列更易于布线。其引脚功能为:D1-D8为数据输入端;Q1-Q8为数据输出端;LE为数据输入锁存端,LE=1数据输入D锁存器,LE=0数据不能输入D锁存器,即LE下降沿锁存当前输入数据;OE地址输出允许端,OE=0输出锁存数据,OE=1输出高阻。

电路中,U1输出段码a b c d e f g db,控制显示的字形与小数点,U2输出位选码,控制第几个数码管显示。单片机P14、P15分别连接到U1、U2的LE,连接U1、U2的OE。 五、软件设计思想 1、动态显示。

(1) 仿照例题编程,设置8个数据的一维显示数组disp[],设置位选码数组sled_bit[],对应每个数码管;设置2个一维数组,data ucharar[8]={1,9,4,9,1,0,0,1};data uchar br[8]={2,0,1,4,1,2,1,0};按K1、K2键进入外部中断0,在外部中断程序中根据按键将ar[]、br[]数据送人disp[]。

(2)T0每500us中断1次,在T0中断中点亮一个数码管。在T0中断函数中,① P1.3=1,U1、U2输出高阻;② P1.4=1,P0口输出段码,P1.4=0,U1锁存输入的段码;③ P1.5=1,P0口输出位选码,P1.5=0,U2锁存输入的位选码;④ P1.3=0,U1、U2同时输出段码和位选码,进行显示。

1、 矩阵式键盘按键识别

(1)行、列输出后要延时,才读出相应特征值; (2)进行键值分析前要具备如下条件:

①要有键按下,设a是得到的键值,if(a!=0xff)才继续进行; ②要等键弹起,若输出P2=0x0f,则P2!=0x0f要等待,while(P2!=0x0f); ③每次进行完键值分析后,要延时。

六、实验思考题

1、 电路中为什么要用74LS573,不用74LS573,可用什么器件代替?如果

U1、U2的OE都直接接地,应如何编程? 答:可用74ALS573,74S573,74AS573,74HC573,74HCT573替代。如果OE都接地也就是都置零,那么就没有关闭两块芯片的输出使能端。可以在送段码和位码时先送位码把P0置0xff,再送段码,最后再送要显示的位码 2、为什么要等键弹起,才进行键值分析?

答:消弹跳,因为若不消弹跳,可能会认为多次按此键。最好是等待松手后,再进行判断。

3、如果用简单按键与矩阵式键盘构成组合按键,组合按键如何编程得到键值?

答:组合按键是多个按键组合获得一个键值,因此我们可以先获取简单按键与矩阵式键盘分别的键值。得到分别的键值后,加判断语句分别要求独立按键的键值为某一值、矩阵按键获取的键值为某一值当它们都达到要求时则向系统反馈某个设定值。

本文来源:https://www.bwwdw.com/article/aaqf.html

Top