按键识别数码管显示实验
实验六 按键识别数码管显示实验(软件+硬件实验) 一、实验目的与要求 实验目的:
掌握按键识别及数码管显示的实现方法。 实验要求:
通过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
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字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [基础教育]2016-2022年中国钢芯铝绞线市场现状调
- [基础教育]语文部编版初一语文下册练习题 句式变
- [基础教育]南京继续教育参考答案--深入学习贯彻习
- [基础教育]国旗下讲话稿——珍惜时间好读书
- [基础教育]北师大版六年级数学下册圆锥的体积教学
- [基础教育]人教版-音乐-四年级下册-四年级下册音
- [基础教育]乔布斯2019年斯坦福大学毕业典礼致辞.d
- [基础教育]2015年加油站安全知识竞赛试题及答案
- [基础教育]2020年教师年度考核个人工作总结
- [基础教育]2019年中考历史试题-2019年大庆市初中
- [基础教育]初三仁爱英语第一轮总复习教案
- [基础教育]SG-A094电气配管安装工程隐蔽验收记录
- [基础教育]冀教版小学数学三年级下册第六单元教材
- [基础教育]青岛版(五制)小学科学二年级下册16《制
- [基础教育]2018-2019年初中科学初一中考真卷测试
- [基础教育]幼儿园大班期末简短评语精选
- [基础教育]2018云南临沧公务员考试申论技巧:这样
- [基础教育]学校食堂经营管理方案
- [基础教育]新中国砥砺奋进的七十年原文
- [基础教育]真空泵的选型及常用计算公式
- 高职田径课程教学现状与对策
- 全髋关节置换术在老年股骨颈骨折患者中
- 青人社厅函〔2016〕576号(附件)工资
- cp101-07砂子检验作业指导书 - secret
- 微观经济学 第八章 博弈论 习题
- 2014高考真题(词语运用)汇编及答案
- 2018年人教版七年级语文下册《第三单元
- 苏教版数学四年级上册第一单元试题 - M
- 四川大学新闻与传播考研2000-2010年真
- 浙江万里学院英语专业四年制本科教学计
- 最新2018马年事业祝福语-范文word版(2
- 最全模具行业术语英文翻译
- 皮亚杰的发展心理学理论
- 64篇高考情景式默写 练习题及答案
- 仿写(学生稿)
- 《SQL Server数据库技术》试卷A
- 第七章作业答案
- 江苏省赣榆县海头高级中学高中语文必修
- 浙江省2001年10月自考正常人体解剖学答
- 2012英语重点短语




