教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 基础教育 >

按键识别数码管显示实验

来源:网络收集 时间:2026-05-23
导读: 实验六 按键识别数码管显示实验(软件+硬件实验) 一、实验目的与要求 实验目的: 掌握按键识别及数码管显示的实现方法。 实验要求: 通过XL2000 的16 位矩阵按键,在数码管上分别显示0~9,A,B,C,D,E,F。用Keil编译、Proteus仿真,代码下载到单片机实验箱上

实验六 按键识别数码管显示实验(软件+硬件实验) 一、实验目的与要求 实验目的:

掌握按键识别及数码管显示的实现方法。 实验要求:

通过XL2000 的16 位矩阵按键,在数码管上分别显示0~9,A,B,C,D,E,F。用Keil编译、Proteus仿真,代码下载到单片机实验箱上验证。 二、实验内容

数码管显示矩阵按键号。可参考xl2000实验仪操作指导手册之实验7 三、实验接线图 接线方法:

1. 用一条8PIN 数据排线,把矩阵按键部份的JP50,接到CPU 部份的P1 口JP44;

2. 接8 位数码管的数据线。将数码管部份的数据口 JP5 接到CPU 部份的P0 口JP51;

3. 接8 位数码管的显示位线。将数码管部份的显示位口 JP8 接到CPU 部份的P2 口JP52. 四、实验结果

五、思考题

采用P3口控制矩阵按键输入,程序应该如何修改?

本实验的程序中可以不用蜂鸣器驱动线,把以下程序的sbit BEEP = P3 ^ 7;及函数void

beep()等删掉后;需要把扫描键值的函数改一下:unsigned char keyscan() {

unsigned char scan1, scan2, keycode,j; P13= 0xf0; scan1 = P3;

if (scan1 != 0xf0) //判键是否按下 {

delayms(10); scan1 = P3;

if (scan1 != 0xf0) //二次判键是否按下 {

P1 = 0x0f; scan2 = P3;

keycode = scan1 | scan2; //组合成键扫描编码 for (j = 0; j < 16; j++) {

if (keycode == key_code[j]) //查表得键值 { key = j;

return (key); //返回有效键值 } } } } else

P3 = 0xff;

return (key = 16); //返回无效码

} 即P1口换成P3口,而键编码数组是固定的,可以不变; 此外主函数中的P1口也要改为P3口:void main(void) {

P0 = 0xf7; //数码管初始显示\ P2 = 0xfd;//数码管显示在第二位 P3 = 0xff; while (1) {

keyscan();

if (key < 16) //有效键值 {

P0 = disp_code[key]; //显示键值 } } }

附件:实验程序清单

#include #include

sbit BEEP = P3 ^ 7; //蜂鸣器驱动线 unsigned char key;

unsigned char code disp_code[] = {

0x28,0xa9,0x20,0x30,0xa1,0x60,0x21,0x62,0xb1,0x20,0x61,0xa2,0x28,0x7a,0x74,0x7e }; 0,C,8,A,E,9,6,3,f,8,5,2,0,7,4,1 unsigned char code key_code[] = {

0xee, 0xed, 0xeb, 0xe7, 0xde, 0xdd, 0xdb, 0xd7, 0xbe, 0xbd, 0xbb, 0xb7, 0x7e, 0x7d, 0x7b, 0x77 //键编码数组 };

char code SST516[3] _at_ 0x003b; //保留仿真器 /********************延时子函数***************/ void delayms(unsigned int ms) {

unsigned char t; while (ms--) {

for (t = 0; t < 114; t++); } }

/*************x*0.14MS 延时子函数****************/ void delayus(unsigned char x) {

unsigned char i; while (x--) {

for (i = 0; i < 14; i++) {; } } }

/******************蜂鸣器驱动子函数*****************/ void beep() {

unsigned char i;

for (i = 0; i < 250; i++) {

delayus(6);

//显示码数组 BEEP = !BEEP; //BEEP 取反 }

BEEP = 1; //关闭蜂鸣器 delayms(150); //延时 }

/******************键盘扫描子函数*********************/ unsigned char keyscan() {

unsigned char scan1, scan2, keycode,j; P1 = 0xf0; scan1 = P1;

if (scan1 != 0xf0) //判键是否按下 {

delayms(10); scan1 = P1;

if (scan1 != 0xf0) //二次判键是否按下 {

P1 = 0x0f; scan2 = P1;

keycode = scan1 | scan2; //组合成键扫描编码 for (j = 0; j < 16; j++) {

if (keycode == key_code[j]) //查表得键值 { key = j;

return (key); //返回有效键值 } } } } else

P1 = 0xff;

return (key = 16); //返回无效码 }

/*************************主函数***********************/ void main(void) {

P0 = 0xf7; //数码管初始显示\ P2 = 0xfd;//数码管显示在第二位 P1 = 0xff; while (1) {

keyscan();

if (key < 16) //有效键值

{

P0 = disp_code[key]; //显示键值 beep(); //蜂鸣器响一声 } } }

…… 此处隐藏:621字,全部文档内容请下载后查看。喜欢就下载吧 ……
按键识别数码管显示实验.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/565393.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)