1、名:吴限评语:(1)电路连接调试:正确基本正确不正确(2)实验程序编写:(3)数据测量分析:准确基本准确不准确1、 实验内容或题目1) 题目:按键识别数码管显示实验2) 实验内容:数码管显示矩阵按键号。2、 实验目的与要求1) 实验目的:掌握按键识别及数码管显示的实现方法。2) 实验要求:通过XL2000的16位矩阵按键,在数码管上分别显示 09, A,B,C,D,E,F。用Keil编译、Proteus仿真,代码下载到单片机实验箱上验证。3、 实验仪器(1) pc微机(2) 实验箱4、 实验程序流程图5、 实验程序(实验程序清单作为附件放在最后)6、 实验步骤f结束L 1) keil中C语言程
2、序实现。2) 在proteus中完成电路图设计,并实现仿真3)硬件实验部分:用一条8PIN数据排线,把矩阵按键部份的 JP50,接到CPU部份的P1 口 JP44; 接8位数码管的数据线。将数码管部份的数据口 JP5接到CPU部份的P0 口JP51 ;接8位数码管的显示位线。将数码管部份的显示位口 JP8接到CPU部份的 P2 口 JP52.7、实验数据及结果&思考题采用P3 口控制矩阵按键输入,程序应该如何修改答:本实验的程序中可以不用蜂鸣器驱动线,把以下程序的 sbit BEEP = P3 A 7;及函数void beep()等删掉后;需要把扫描键值的函数改一下: un sig ned c
3、har keysca n()un sig ned char sca n1, sca n2, keycodej;P13= OxfO;sca n1 = P3;if (sca n1 != 0xf0) 判键是否按下delayms(10);scan1 = P3;= 0xf0) 二次判键是否按下P1 = 0x0f;sca n2 = P3;keycode = scanl | scan2;组合成键扫描编码for (j = 0; j 16; j+)if (keycode = key_codej) 查表得键值key = j;return (key); /返回有效键值elseP3 = Oxff;return (ke
4、y = 16); 返回无效码即P1 口换成P3 口,而键编码数组是固定的,可以不变;此外主函数中的 P1 口也要改为P3 口: void main(void)P0 = 0xf7; /数码管初始显示-P2 = 0xfd;/数码管显示在第二位P3 = 0xff;while (1)keysca n();if (key 16)/有效键值P0 = disp_codekey; 显示键值 实验程序清单#in elude #in clude sbit BEEP = P3 A 7; 蜂鸣器驱动线un sig ned char key;un sig ned char code disp_code=0xf9,0xa
5、4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xc0,0x86,0x8e,0xc0;un sig ned char code key_code=Oxee, Oxed, Oxeb, 0xe7, Oxde, Oxdd, Oxdb, 0xd7, Oxbe, Oxbd, Oxbb,0xb7, Ox7e, Ox7d, Ox7b, Ox77 键编码数组;char code SST5163 _at_ OxOO3b; 保留仿真器延时子函数*/void delayms( un sig ned int ms) un sig ned char t;whil
6、e (ms-)for (t = 0; t 114; t+);void delayus( un sig ned char x) un sig ned char i;while (x-)for (i = 0; i 14; i+);蜂鸣器驱动子函数void beep() 250;delayus(6);BEEP = !BEEP; /BEEP 取反BEEP = 1;delayms(150);关闭蜂鸣器/延时键盘扫描子函数un sig ned char keysca n()un sig ned char sca n1, sca n2, keycode, j;P1 = OxfO;sca n1 = P1; / 延时 10mssea n1 = P1;P1 = OxOf;scan2 = P1;for ( j = 0;if (keycode = key_code j) / 查表得键值P1 = 0xff;主函数 *void main (void) 数码管显示在第二位P1 = Oxff; 16) /有效键值beep(); 蜂鸣器响一声
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1