还剩13页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
宁德师范学院计算机系实验报告(学年第学期)2022—20222课程名称单片机原理实验名称独立按键识别专业计算机科学与技术(非师)年级级12学号姓名王秋B2022102147指导教师杨烈君实验日期delay3000;ifKey==OMode=Mode+l%3;whileKey==O;ifMode==0sec=O;ifMode=l time_Eclipse;ifMode==2;void mainwhile1displayO;Button_Control;PutTime;图码表,按一次开始计时,第二次住手40-99图码,按表第三次清零50-
99.扩展要求通过个按键实现时钟的调整53#define ucharunsigned char#define disp_null10uchar codetab
[11]={OxcO,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,Oxbf};〃共阳数码管显示的段码表〜9uchar dispBuf[8J;〃分别给时、分、秒赋初值uchar hour=13,min=23,sec=25;sbit keyl=P3A2;sbit key2=P3A3;sbit key3=P3A4;定义时间间隔void delayintwhilex—;void PutTimedispBuf
[7]=sec%10;dispBuf
[6]=sec/10;dispB uf
[5]=disp_null;dispBuf
[4]=min%10;dispBuf
[3]=min/10;dispBuf
[2]=disp_null;dispB uf[lj=hour%10;dispBuf
[0]=hour/l0;uchar ScanKeyO〃识别是否按键ifkeyl==O returnT;//如果按键被按,则返回1ifkey2==0returnifkey3==0return return0;uchar ReadKeyOuchartmp;〃读取按键值tmp=ScanKey;没有按键,退出if tmp==0return0;//〃延时一小段时间,消抖摆布delay1000;10mS〃如果现在读回来的和原来的值不一样,抛却if tmp!=ScanKey return0;如果一旦读回来的值为也就是松开按键,那末就可以返回while ScanKey;//0,return〃按键返回tmp;void displayOuchar i;fori=0;i8;i++P2=0;P2=l«i;PO=tab[dispBuf[i]];delaylOO;void mainunsigned char mode=;unsigned charms;whilelPutTime;display;switchReadKeyO case,r mode=mode+1%4;break;case+:ifmode==break;else ifmode==l hour=hour+1%24;else ifmode==2min=min+l%60;else ifmode==3sec=sec+1%60;break;case,-,:ifmode==0break;else ifmode==1hour hour=hour-1%24;else ifmode==2min min=min-l%60;else ifmode==3sec sec=sec-l%60;break;〃控制加的时延ms++;1ifms=50sec++;ms=0;〃表示进位,当秒满六十则向分钟进同时秒数清零ifsec=601,min++;sec=0;ifmin=60hour++;min=0;//当小时数满小时时;则小时数清零,完成计时ifhour=2424hour=0;图按键实现时钟的调整,选择模式,63KEY1KEY2+,KEY3-图按键实现时钟的调整,选择模式,73KEY1KEY2+,KEY3-图按键实现时钟的调整,选择模式,83KEY1KEY2+,KEY3-实验总结(包括过程总结、心得体味及实验改进意见等)过程总结在电路中增加按键、灯、八位段数码管(共阳/共阴自选),将口作数据输出口与段
1.Led7P27数码管数据引脚相连,引脚输出位选控制信号掌握查询式按键的原理和编程方法P
3.在软件中画好单片机最小核心电路,包括复位电路和晶振电路,理解按键防抖技术,2Proteus51当第一次检测到有建按下时,先延时()而后再确认键电平是否依旧维持闭合状态的电平10〜20ms,若保持闭合状态电平,则确认此间已按下,从而消除颤动影响心得体味本次的实验是通过对按键的不同控制实现各个功能,在理想的环境下按键的反馈是即时且无误差的,但是在实际的环境中要考虑到按键颤动的现象,所以要写一个判断按键颤动的函数,还有单按键控制多个灯的亮灭,可以设置一个变量来记录按键的情况来实现对不同部件的控制,而多按键的时候只需要判断是哪一个按键被按下,然后执行对应的程序指导教师评语:成绩评定________________教师签字________________£月日备注注、报告内的项目或者设置,可根据实际情况加以补充和调整、教师批改学生实验报告应在学生12提交实验报告日内10实验目的掌握查询式按键的原理和编程方法
1.理解按键防抖技术
2.实验要求.在软件中画好单片机最小核心电路,包括复位电路和晶振电路1Proteus
51.在电路中增加按键、灯、八位段数码管(共阳/共阴自选),将口作数据输出口与段2Led7P27数码管数据引唧相连,引唧输出位选控制信号P3实现单按键控制灯闪烁
3.Led实现单按键多功能识别——控制路灯闪烁
4.4Led.实现的计数器效果,按一下数值加一50-
99.实现码表(按一次开始计时,第二次住手,第三次清零)60-99扩展要求通过个按键实现时钟的调整(模式,)
7.3KEY1KEY2+,KEY3-实验设备(环境)计算机、应沁乐谓序、应用程序PmteusISIS7Pmfess1Keil实验内容:实现单按键控制灯闪烁
1.Led实现单按键多功能识别控制路灯闪烁
2.4Led.实现的计数器效果,按一下数值加一30-
99.实现码表(按一次开始计时,第二次住手,第三次清零)40-
995.扩展要求通过个按键实现时钟的调整(模式,)3KEY1KEY2+,KEY3-MHAM«IADI4AIMI5AD5MGAl*.3AHFZLA91*22AtO1,2VAIIP24Al2P25Al5P26AU参考原理图Pi7AIS实验步骤、实验结果及分析、使用建立一个文件1ProteusISIS7Pro^^^ic^a@U^,.DSN、在“库”下拉菜单中,选中“拾取元件”(快捷键)分别选择以下元件、、2P,AT89c51CAPCAPELECCRYSTALRESPACK-
80、构建仿真电路
34、创建一个Keil应用程序新建工程项目文件;为工程选择目标器件(AT89c52);为工程项目创建源程叙文件并输入程序代码;保存创建的源程序项目文件;把源程叙文件添加到项目中、把程序经过编译后生成的文件添加到仿真电路中的处理器中(编辑元件一文件路径)程5HEX序代码实现单按键控制灯闪烁
1.Led#define ucharunsigned charsbit Ledl=PlAO;sbit Key=P3A2;uchar Mode=0;(定义时间间隔void delayintwhilex-;〃根据按键模式执行相应的代码void button_Cotrol ifKey==0delaylOOO;ifKey==0Mode=Mode+1%2;whileKey==O;ifMode==0Led1=;ifMode=l Led1=~Led1;delaylOOO;void mainwhile1button_Cotrol;图单按钮,控制灯闪烁1led实现单按键多功能识别一控制路灯闪烁
2.4Led#define ucharunsigned charsbit Ledl=PlAO;sbit Led2=P1A1;sbitLed3=Pl A2;sbitLed4=PlA3;sbit Key=P3A2;uchar Mode=0;灯定义时间间隔void delayintwhilex-;〃根据按键模式执行相应的代码void button_Cotrol ifKey==0delaylOOO;ifKey==0Mode=Mode+1%4;whileKey==O;ifMode==0Led4=0;Led1=~Led1;delay3000;ifMode==lLed1=0;Led2=〜Led2;delay3000;ifMode==2Led2=0;Led3=~Led3;delay3000;ifMode=3Led3=0;Led4=~Led4;delay3000;void mainLed1=0;Led2=0;Led3=0;Led4=0;whilel button_Cotrol;图单按键多功能识别,控制路灯闪烁24Led实现的计数器效果,按一下数值加
3.0-991#define ucharunsigned char#define disp_null10sbit Key=P3A2;〃共阳数码管显示uchar codetab[l l]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,Oxff};的段码表0〜9uchar DispBuf
[8];uchar sec=O;/定义时间间隔void delayintwhilex-;void PutTimeDispBuf
[7]=sec%10;DispBuf
[6]=sec/10;DispBuf
[5]=disp_null;DispBuf[4J=disp_null;DispBuf
[3]=disp_null;DispBuf
[2]=disp_null;DispBuf
[1]=disp_null;DispBuf
[0]=disp_null;void displayOuchari;fori=0;i8;i++P2=0;P2=l«i;PO=tab[DispBuf[i]];delaylOO;void Button_ControlifKey==0delay3000;ifKey==0sec++;whileKey==0;void mainwhile1displayO;PutTime;Button_Control;图的计数器效果,按一下数值加30-991,实现码表按一次开始计时,第二次住手,第三次清零40-99#define ucharunsignedchar#define disp_null1八sbit Key=P32;〃共阳数码管显示uchar codetab l]={xc0,0xf9,0xa4,xb,0x99,0x92,0x82,0xf8,0x8,0x90,Oxff};的段码表0〜9uchar DispBuf
[8];uchar sec=0;uchar temp=30;uchar Mode=2;什定义时间间隔void delayintwhilex—;void PutTimeDispBuf
[7]=sec%10;DispBuf
[6]=sec/10;DispB uf
[5]=disp_null;DispBuf
[4]=disp_null;DispB uf
[3]=disp_null;DispBuf
[2]=disp_null;DispB uf
[1]=disp_null;DispBuff]=disp_null;void displayOuchari;fori=0;i8;i++P2=0;P2=l«i;PO=tab[DispBuf[i]];delaylOO;void time_EclipseifMode==ltemp—;iftemp==0temp=30;sec++;ifsec99sec=0;void Button_ControlifKey==0。