单片机原理与应用实验六_按键识别数码管显示实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0x92,0x82,0xf8,0x80,
0x90,0x88,0x83,0xc6,
0xc0,0x86,0x8e,0xc0};
unsigned char code key_code[] =
{
0xee, 0xed, 0xeb, 0xe7, 0xde, 0xdd, 0xdb, 0xd7, 0xbe, 0xbd, 0xbb,
for (j = 0; j < 16; j++)
{
if (keycode == key_code[j]) //查表得键值
{
key = j;
return (key); //返回有效键值
}
}
}
}
else
P3 = 0xff;
return (key = 16); //返回无效码
} 即P1口换成P3口,而键编码数组是固定的,可以不变;
scan1 = P1;
if (scan1 != 0xf0) //判键是否按下
{
delayms(10); //延时10ms
scan1 = P1;
if (scan1 != 0xf0) //二次判键是否按下
{
P1 = 0x0f;
scan2 = P1;
keycode = scan1 | scan2; //组合成键扫描编码
void main(void)
{
P0 = 0xf7; //数码管初始显示"-"
P2 = 0xfd;//数码管显示在第二位
P1 = 0xff;
0xb7, 0x7e, 0x7d, 0x7b, 0x77 //键编码数组
};
char code SST516[3] _at_ 0x003b; //保留仿真器
/********************延时子函数***************/
void delayms(unsigned int ms)
{
}
}
}
<附件>实验程序清单
#include <reg52.h>
#include <intrins.h>
sbit BEEP = P3 ^ 7; //蜂鸣器驱动线
unsigned char key;
unsigned char code disp_code[] =
{
0xf9,0xa4,0xb0,0x99,
{
for (i = 0; i < 14; i++)
{;
}
}
}
/******************蜂鸣器驱动子函ቤተ መጻሕፍቲ ባይዱ*****************/
void beep()
{
unsigned char i;
for (i = 0; i < 250; i++)
{
delayus(6);
BEEP = !BEEP; //BEEP取反
P13= 0xf0;
scan1 = P3;
if (scan1 != 0xf0) //判键是否按下
{
delayms(10);
scan1 = P3;
if (scan1 != 0xf0) //二次判键是否按下
{
P1 = 0x0f;
scan2 = P3;
keycode = scan1 | scan2; //组合成键扫描编码
此外主函数中的P1口也要改为P3口:void main(void)
{
P0 = 0xf7; //数码管初始显示"-"
P2 = 0xfd;//数码管显示在第二位
P3 = 0xff;
while (1)
{
keyscan();
if (key < 16) //有效键值
{
P0 = disp_code[key]; //显示键值
2)实验要求:
通过XL2000的16位矩阵按键,在数码管上分别显示0~9,A,B,C,D,E,F。用Keil编译、Proteus仿真,代码下载到单片机实验箱上验证。
3、实验仪器
(1)PC微机1台
(2)实验箱1台
4、实验程序流程图
5、实验程序
(实验程序清单作为附件放在最后)
6、实验步骤
1)keil中C语言程序实现。
}
BEEP = 1; //关闭蜂鸣器
delayms(150); //延时
}
/******************键盘扫描子函数*********************/
unsigned char keyscan()
{
unsigned char scan1, scan2, keycode, j;
P1 = 0xf0;
7、实验数据及结果
8、思考题
采用P3口控制矩阵按键输入,程序应该如何修改?
答:本实验的程序中可以不用蜂鸣器驱动线,把以下程序的sbit BEEP = P3 ^ 7;及函数void beep()等删掉后;需要把扫描键值的函数改一下:unsigned char keyscan()
{
unsigned char scan1, scan2, keycode,j;
for ( j = 0; j < 16; j++)
{
if (keycode == key_code[ j]) //查表得键值
{
key = j;
return (key); //返回有效键值
}
}
}
}
else
P1 = 0xff;
return (key = 16); //返回无效码
}
/*************************主函数***********************/
电子信息学院
实验报告书
课程名:《单片机原理及应用实验》
题目:实验六按键识别数码管显示实验
软件+硬件实验
实验类别:【设计】
班级:电子1313
学号:26
姓名:吴限
1、实验容或题目
1)题目:按键识别数码管显示实验
2)实验容:数码管显示矩阵按键号。
2、实验目的与要求
1)实验目的:
掌握按键识别及数码管显示的实现方法。
2)在proteus中完成电路图设计,并实现仿真。
3)硬件实验部分:
用一条8PIN数据排线,把矩阵按键部份的JP50,接到CPU部份的P1口JP44;接8位数码管的数据线。将数码管部份的数据口JP5接到CPU部份的P0口JP51;接8位数码管的显示位线。将数码管部份的显示位口JP8接到CPU部份的P2口JP52.
unsigned char t;
while (ms--)
{
for (t = 0; t < 114; t++);
}
}
/*************x*0.14MS 延时子函数****************/
void delayus(unsigned char x)
{
unsigned char i;
while (x--)
相关文档
最新文档