单片机实验4报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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];}