单片机实验4报告

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学号14142200277 序号19

单片机原理与接口技术

实验报告

实验项目序号实验四

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

姓名卢志雄专业电子信息工程班级电信14-2BF 完成时间 2016-05-10

一、实验目的

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

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

2、 掌握单片机动态显示应用和编程方法;

3、 掌握单片机矩阵式键盘按键识别的方法。 二、实验内容

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

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

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

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

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

矩阵式键盘键值分别是0-9,最下面一排键位功能键,左右两个键分别为“清0键”“C ”,和”“回车键”“ ”,其它键无效。未按键不显示,每按键

一次,键值在最低位显示,原键值向高位移一位。按8个键后,再按键无效。

按清0键全显示“0”。按“ ”后全部熄灭,再按键重新开始。

三、实验原理图

XTAL2

18

XTAL1

19

ALE 30EA

31

PSEN 29RST

9

P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732

P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78

P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD

17

P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1

AT89C51

D 02D 13D 24D 35D 46D 57D 68D 7

9

Q 019

Q 118Q 217Q 316Q 415Q 514Q 613Q 7

12

L E 11O E

1

U2

74HC573

D 02D 13D 24D 35D 46D 57D 68D 7

9

Q 019Q 118Q 217Q 316Q 415Q 514Q 613Q 7

12

L E 11O E 1

U3

74HC573

1

2

345678910RP8

1k

K1

K2K3K4

U4

AND_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。

四、源程序

第一项:

#include

#define uchar unsigned char

data uchar f[8];

data uchar a,b,num,y,k,g;

data uchar c=0;

table[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77, 0x7c,0x39,0x5e,0x79,0x71,0x00}; //共阴极数码管显示段码(0-F)

void delay( j )//延时函数

data uchar j;

{ data uchar i;

while(j--)

for(i=0;i<1;i++);

}

uchar code sled_bit[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //定义点亮数码管位选码

data uchar d[]={1,9,4,9,1,0,0,1};

data uchar e[]={2,0,1,4,1,2,1,0};

sbit oe=P1^3; //2个573的三态使能端

sbit dula=P1^4; //段码573控制信号

sbit wela=P1^5; //位码573控制信号

//延时函数

void main(void)

{

TMOD=0x01; // 设置定时器T0为方式1定时TH0=(65536-500)/256; // 给T0装入初值

TL0=(65536-500)%256; // 给T0装入初值

ET0=1; // 允许T0中断

EA=1;

EX0=1;

IT0=1;

g=0;

P0=0X00;

while(1); //CPU开中断

}

void EX0_int(void) interrupt 0

{ TR0=1;

y=P2;

y=~y;

if(y==1){for(g=0;g<8;g++)f[g]=d[g];}

if(y==2){for(g=0;g<8;g++)f[g]=e[g];}

相关文档
最新文档