您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 实验二-电话拨号与显示实验
【1.实验目的和要求】(1)掌握4*4键盘扫描原理与编程;(2)掌握数码管动态显示原理与编程;(3)掌握Proteus8单片机仿真软件的使用;(4)掌握KeiluVision环境下工程项目设计方法与文件管理;【2.实验工具与软件】计算机、KeiluVision4集成开发环境、Proteus8仿真软件【3.主要原理和方法步骤】(1)任务说明采用4*4键盘与6位共阴(CC:CommonCathode)数码管模拟一电话拨号与显示;基本功能:没有按键时,数码管不显示;按下1键,最低位显示,按住还是显示1;松开后再按下2,低两位显示12(要求有移位功能);依次类推实现6位拨号功能。扩展功能:增加退格与修改等功能。(2)电路原理图(3)软件流程图(4)实例代码及注释分析#includereg51.hunsignedcharkey_value=16;unsignedcodeLED_SEG[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//共阴极数码管段码0~FunsignedcodeLED_BIT[6]={0x01,0x02,0x04,0x08,0x10,0x20};//6位共阴极数码管位码unsignedcharLED_BUF[6]={0};//存储按下的键值voiddelay_ms(unsignedintms)//ms延时函数(AT89C51@11.0592MHz){unsignedinti;while(ms--)for(i=0;i110;i++);}charkeys_scan()//按键扫描子程序{unsignedchartemp,value;P3=0x0f;delay_ms(10);temp=P3^0x0f;//高4位输出,低4位输入delay_ms(10);switch(temp){case1:value=0;break;case2:value=4;break;case4:value=8;break;case8:value=12;break;}P3=0xf0;delay_ms(10);temp=P34^0x0f;//高4位输入,低4位输出switch(temp){case1:value+=0;break;case2:value+=1;break;case4:value+=2;break;case8:value+=3;}while(P3!=0xf0);returnvalue;}voidmain(){unsignedcharcount=0,i;P0=0x00;while(1){P3=0x0f;if(P3!=0x0f){delay_ms(10);if(P3!=0x0f){key_value=keys_scan();//按键扫描,获取键值if(key_value=0&&key_value=9){if(count==6)count=0;count++;LED_BUF[count-1]=key_value;//记录键值}if(key_value==14)//退格{if(count==1){P0=0x00;count=0;}elseif(count1)count--;}if(key_value==15)//清空数码管显示{P0=0x00;count=0;}}}for(i=0;icount;i++)//循环显示数码管{P0=LED_BIT[i];P2=LED_SEG[LED_BUF[count-i-1]];delay_ms(5);}}}【4.数据记录】(1)按下矩阵键盘的S0~S9时,6位数码管由左向右移位显示数字0~9,当输入位数超过6位时,数码管就只显示当前输入键值;(2)按下按键S14时,实现退格功能,清除上一次输入的键值(S0~S9);(3)按下按键S15时,清空数码管显示;(4)其他按键按下暂无功能;【5.实验思考与小结】通过本次实验,我掌握4*4键盘扫描原理与编程,这种方法可以减少单片机IO口的消耗,以及数码管动态显示原理与编程,通过利用人类的视觉效应,快速循环显示单个数码管,从而动态实现多个数码管。在完成这次实验后,虽然能够达到试验要求,但是测试的时候总觉得数码管显示不是那么顺畅,所以我觉得我的代码应该还可以更加优化一点,这次实验也让我能够更加熟练的掌握Proteus仿真软件的使用,以及和keil进行联调,总而言之,收获甚多!评语:教师:日期:
本文标题:实验二-电话拨号与显示实验
链接地址:https://www.777doc.com/doc-7225235 .html