单片机实验4报告材料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学号序号 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”。按“ ”后全部熄灭,再按键重新开始。
三、实验原理图
图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,0x7 c,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];}
}
void T0_int(void) interrupt 1 //T0中断函数
{ TH0=(65536-500)/256;
TL0=(65536-500)%256;
oe=1; // 关闭2个573输出,防止送数据时相互影响
k = f[g]; // 每次显示disp[j]的数据
P0= table[k]; // 相应显示数字段码
dula=1;
dula=0; // 锁存段码
P0=~sled_bit[g]; // 选择相应数码管位选
wela=1;
wela=0; // 锁存位码
oe=0;
g++;
if(g>=8)g=0; // 打开2个573三态门,输出段码和位码
}
第二项
#include
#define uchar unsigned char
#define uint unsigned int
sbit oe=P1^3; //数码管段选、位选锁存器输出控制信号sbit dula=P1^4; //数码管段选锁存器控制信号
sbit wela=P1^5; //数码管位选锁存器控制信号