小型电子产品软件开发复习版.docx

上传人:b****5 文档编号:7856668 上传时间:2023-01-26 格式:DOCX 页数:41 大小:460.10KB
下载 相关 举报
小型电子产品软件开发复习版.docx_第1页
第1页 / 共41页
小型电子产品软件开发复习版.docx_第2页
第2页 / 共41页
小型电子产品软件开发复习版.docx_第3页
第3页 / 共41页
小型电子产品软件开发复习版.docx_第4页
第4页 / 共41页
小型电子产品软件开发复习版.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

小型电子产品软件开发复习版.docx

《小型电子产品软件开发复习版.docx》由会员分享,可在线阅读,更多相关《小型电子产品软件开发复习版.docx(41页珍藏版)》请在冰豆网上搜索。

小型电子产品软件开发复习版.docx

小型电子产品软件开发复习版小型电子产品软件开发复习版试题试题3.21按键控制彩灯软件开发按键控制彩灯软件开发一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写完整程序实现如下模拟彩灯,开发板从左至右4个按键分别为S1-S4,从上至下8个灯为L1-L8,按下S1键8只LED小灯以1HZ频率闪烁,按下S2键8只灯奇偶交替点亮,间隔0.3S,按下S3键,L1-L4与L5-L8灯交替点亮,间隔0.2s,按下S4键熄灭所有灯。

二、要求1、根据提供的开放板硬件,分析系统功能,并画出系统主程序流程图;2、编写程序,程序代码要符合编程规范(函数/子程序名称、功能、入口参数、出口参数、注释等),易读性要好;3、编译调试、下载程序;4、调试系统达到功能指标;5、编写设计报告。

功能分析功能分析根据开发板硬件电路,P1口为8位LED灯端口,P3口的低四位为独立按键操作端口。

对P3口的低四位进行判断,以确定按键是否按下。

当按键S1按下,LED灯以1Hz频率闪烁,频率与周期互为倒数说明闪烁周期为1秒,在1秒钟时间能完成一次亮灭。

用定时/计数器定时500ms,每次时间一到让P1口取反一次,就可以使该端口上的LED灯实现1Hz频率的闪烁。

同理当按键S2按下后,先将P1口端口值设置为0x55,然后将定时/计数器定时300ms,每次时间一到让P1口取反一次,就可以使该端口上的LED灯实现0.3s的奇偶交替闪烁。

当按键S3按下后,将P1口端口值设置为0x0f,然后将定时/计数器定时200ms,每次时间一到让P1口取反一次,就可以使该端口上的LED灯实现0.2s的高低位交替闪烁。

当按键S3按下后,熄灭所有LED灯。

因为fosc=11.0592MHz,机器周期=12/11.0592MHz=1.085s,而定时/计数器在定时模式时就是对fosc的12分频即机器周期进行计数,因此要定时1ms需要计数次数为9216次。

为了使计算中断次数少而减少误差初值应该尽量取值大一些,但模式1的16位寄存器的最大值为65536,也就是说最大初值不能超过65536,为了取整数计算方便我们这里取46080,也就是50ms,要实现1Hz、0.3s和0.2s分别为进入中断次数为10次、6次和4次。

软件流程图软件流程图NYY初始化判断按键是否按下?

按键1按键2按键3按键4P1=0x00P1=0x55P1=0x0fP1=0xff开始延时P1取反P1=0x00延时P1取反延时P1取反程序代码程序代码/*按键控制彩灯:

编写完整程序实现如下模拟彩灯,开发板从左至右4个按键分别为S1-S4,从上至下8个灯为L1-L8,按下S1键8只LED小灯以1HZ频率闪烁,按下S2键8只灯奇偶交替点亮,间隔0.3S,按下S3键,L1-L4与L5-L8灯交替点亮,间隔0.2s,按下S4键熄灭所有灯。

晶振频率:

11.0592MHz*/#include/包含单片机寄存器的头文件#defineLEDP1/发光二极管接P1sbitS1=P30;/将S1位定义为P3.0sbitS2=P31;/将S2位定义为P3.1sbitS3=P32;/将S3位定义为P3.2sbitS4=P33;/将S4位定义为P3.3charflag=0,q=0;/flag为延时变量标志,q记录中断次数/*函数功能:

n毫秒延时函数入口参数:

n出口参数:

无*/voiddelayms(unsignedintn)unsignedintj,k;for(j=0;jn;j+)for(k=0;k114;k+);voidmain(void)TMOD=0x01;/使用定时器T0的模式1TH0=(65536-46080)/256;/定时器T0的高8位设置初值,延时50msTL0=(65536-46080)%256;/定时器T0的低8位设置初值,延时50msEA=1;/开总中断ET0=1;/定时器T0中断允许while

(1)if(S1=0)/如果按键S1按下delayms(20);/延时20ms消抖if(S1=0)/如果按键S1确实按下while(!

S1);/等待按键抬起q=0;/中断次数清零flag=1;/延时变量为1,代表定时1秒的情况LED=0xff;/LED全部关闭TR0=1;/启动定时器T0/1Hz频率闪烁if(S2=0)/如果按键S2按下delayms(20);/延时20ms消抖if(S2=0)/如果按键S2确实按下while(!

S2);/等待按键抬起q=0;/中断次数清零flag=2;/延时变量为2,代表定时0.3秒的情况LED=0x55;/1357奇数位LED关闭,2468偶数位LED点亮TR0=1;/启动定时器T0/0.3秒间隔闪烁if(S3=0)/如果按键S3按下delayms(20);/延时20ms消抖if(S3=0)/如果按键S3确实按下while(!

S3);/等待按键抬起q=0;/中断次数清零flag=3;/延时变量为3,代表定时0.2秒的情况LED=0x0f;/低4位LED关闭,高4位位LED点亮TR0=1;/启动定时器T0/0.2秒高低4位间隔闪烁if(S4=0)/如果按键S3按下delayms(20);/延时20ms消抖if(S4=0)/如果按键S4确实按下while(!

S4);/等待按键抬起q=0;/中断次数清零flag=4;/延时变量为4,代表定时关闭的情况TR0=0;/关闭定时器LED=0xff;/LED全部关闭/全灭/*函数功能:

定时器T0的中断服务函数入口参数:

n出口参数:

无*/voidTime0(void)interrupt1using1/定时器T0的中断编号为1,使用第1组工作寄存器if(flag=1)/延时变量为1,代表定时1秒的情况q+;/累计次数if(q=10)/如果中断次数计满10次即500毫秒LED=LED;/8只LED小灯以1HZ频率闪烁q=0;/中断次数清零if(flag=2)/延时变量为2,代表定时0.3秒的情况q+;/累计次数if(q=6)/如果计满6次即0.3秒LED=LED;/8只LED小灯以0.3秒间隔闪烁q=0;/中断次数清零if(flag=3)/延时变量为3,代表定时0.2秒的情况q+;/累计次数if(q=4)/如果计满4次即0.2秒LED=LED;/8只LED小灯以0.2秒间隔高低4位闪烁q=0;/中断次数清零TH0=(65536-46080)/256;/定时器T0的高8位设置初值,延时50msTL0=(65536-46080)%256;/定时器T0的低8位设置初值,延时50ms仿真截图仿真截图试题3.22计数器软件开发一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写完整程序实现如下模拟计数器功能,开发板4个按键从左至右分别为S1-S4,开发板上电复位后显示0,利用S3、S4做外部中断输入(要求用外部中断实现),按下S3显示数据加1,按下S4数据显示减1,当计数小于0时,显示0并蜂鸣器发“嘟”声提示,当数据大于9时,显示9并蜂鸣器发“嘟”声提示。

功能分析功能分析根据开发板硬件电路,P0口为数码管段选操作端口,P2口为数码管位选操作端口,P1.0引脚连接蜂鸣器,P3.2引脚连接按键S3,P3.3引脚连接按键S4。

开通P2端口初始化数码管使其上电显示“0”,并设置计数变量初值为0,初始化外部中断和,设置外部中断为负边沿触发,也就是当外部中断P3.2和P3.3引脚为下降沿时触发中断。

当按键S3按下,Count加1并在数码上显示,但Count值大于9时,Sound发出提示音。

同理当按键S4按下,Count减1并在数码上显示,但Count值小于0时,Sound发出提示音。

软件流程图软件流程图NYN初始化判断按键是否按下?

S3按下执行中断INT0count+Count-开始S4按下执行中断INT1YYN判断是否count9count=0,声音提示count=9,声音提示程序代码程序代码/*编写完整程序实现如下模拟计数器功能,开发板4个按键从左至右分别为S1-S4,开发板上电复位后显示0,利用S3、S4做外部中断输入(要求用外部中断实现),按下S3显示数据加1,按下S4数据显示减1,当计数小于0时,显示0并蜂鸣器发嘟声提示,当数据大于9时,显示9并蜂鸣器发嘟声提示。

*/#includesbitbuz=P10;/buz接蜂鸣器sbitwei=P20;/数码管位选通位sbitS3=P32;sbitS4=P33;unsignedchari;/定义全局变量iunsignedcharflag;/蜂鸣器鸣叫标志位unsignedcharcodetab=0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;/共阳极09的段码/延时函数,入口参数为n,没有出口参数voiddelayms(unsignedintn)unsignedintj,k;for(j=0;jn;j+)for(k=0;k114;k+);/主函数main()EA=1;/打开总中端EX0=1;/打开外部中断0EX1=1;/打开外部中断1IT0=1;/设置外部中断0触发方式为边沿触发IT1=1;/设置外部中断1触发方式为边沿触发while

(1)wei=0;/选通7段数码管第1位P0=tabi;/让数码管显示09if(flag)flag=0;/清蜂鸣器鸣叫标志位buz=0;/蜂鸣器鸣叫delayms(500);/延时500毫秒buz=1;/蜂鸣器关闭voidint0()interrupt0/外部中断0delayms(20);/延时消抖if(S3=0)/按键确认按下while(!

S3);/等待按键松开if(i0)/判断i是否大于0i-;/i自减else/i不大于0i=0;/给i直接赋值0flag=1;/蜂鸣器鸣叫仿真截图仿真截图试题试题3.23按键控制组合灯软件开发按键控制组合灯软件开发一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写完整程序实现如下功能,4个按键分别控制2个灯,4个按键从左至右分别称为S1-S4,单片机引脚1、2所接灯分别为LED1、LED2,按下S1控制LED1亮灭变化(当前灭则点亮,当前亮则变灭),S2控制LED2亮灭变化,S3开所有灯,S4关闭所有灯。

功能分析功能分析根据开发板硬件电路,P1口为8位LED端口,LED1接P10,LED2接P11,P3端口低四位为独立按键S1、S2、S3和S4。

循环扫描P3口的低四位,判断按键是否按下,当确认S1按键被按下后执行LED1亮灭变化(当前灭则点亮,当前亮则变灭);同理当确认S2按键被按下后执行LED2亮灭变化(当前灭则点亮,当前亮则变灭);当确认S3按键被按下后开启LED1、LED2;当确认S3按键被按下后关闭LED1、LED2。

软件流程图软件流程图YN初始化判断按键是否按下?

按键1按键2按键3按键4LED1取反LED2取反LED1、2全亮LED1、2全灭开始程序代码程序代码/*编写完整程序实现如下功能,4个按键分别控制2个灯,4个按键从左至右分别称为S1-S4,单片机引脚1、2所接灯分别为LED1、LED2,按下S1控制LED1亮灭变化(当前灭则点亮,当前亮则变灭),S2控制LED2亮灭变化,S3开所有灯,S4关闭所有灯。

*/#includesbits1=P30;/按键S1位sbits2=P31;/按键S2位sbits3=P32;/按键S3位sbits4=P33;/按键S4位sbitLED1=P10;/LED1位sbitLED2=P11;/LED2位/*函数功能:

n毫秒延时函数入口参数:

n出口参数:

无*/voiddelayms(unsignedintn)unsignedintj,k;for(j=0;jn;j+)for(k=0;k114;k+);/*函数功能:

主函数*/main()while

(1)/死循环if(s1=0)/判断按键S1是否被按下delayms(20);/延时20毫秒if(s1=0)/判断按键S1是否被按下while(!

s1);/等待按键松开LED1=!

LED1;/LED1灯取反elseif(s2=0)/判断按键S2是否被按下delayms(20);/延时20毫秒if(s2=0)/判断按键S2是否被按下while(!

s2);/等待按键松开LED2=!

LED2;/LED2灯取反elseif(s3=0)/判断按键S3是否被按下delayms(20);/延时20毫秒if(s3=0)/判断按键S3是否被按下while(!

s3);/等待按键松开LED1=0;/点亮LED1LED2=0;/点亮LED2elseif(s4=0)/判断按键S3是否被按下delayms(20);/延时20毫秒if(s4=0)/判断按键S3是否被按下while(!

s4);/等待按键松开LED1=1;/熄灭LED1LED2=1;/熄灭LED2仿真截图仿真截图试题3.24频率计软件开发一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序,使频率计在上电后,具有:

能测试1-100HZ的低频信号;并把结果显示在数码管上。

误差小于1HZ。

功能分析功能分析根据开发板硬件电路,P0口为数码管段选操作端口,P2口为数码管位选操作端口,使用3位数码管显示当前输入脉冲的频率。

将T0工作于定时工作方式的模式1,T1工作于计数工作方式的模式2,T0用于定时50毫秒,每20次定时次数到即为1秒,定时1秒到,读取T1的计数结果,即为输入脉冲在1秒内的脉冲个数,也即频率。

输入脉冲应接T1的外部脉冲输入端即P3.5。

软件流程图软件流程图YN初始化定时器开始启动定时器数码管显示T1计数值也即频率T0定时1秒到?

TL1清零,中断次数清零程序代码程序代码/*技能抽查第四题:

编写程序,使频率计在上电后,具有:

能测试1-100HZ的低频信号;并把结果显示在数码管上。

误差小于1HZ。

晶振频率:

11.0592MHz*/#include/包含单片机寄存器的头文件sbitpulse=P35;/脉冲输入从T1/P3.5送入unsignedcharq;/记录中断次数,定时1sunsignedintcnt;/脉冲次数暂存unsignedchartable=0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xbf;/共阳极数码管09、-的段码表/*函数功能:

n毫秒延时函数入口参数:

n出口参数:

无*/voiddelayms(unsignedintn)unsignedintj,k;for(j=0;jn;j+)for(k=0;k114;k+);/*函数功能:

显示子函数入口参数:

cnt出口参数:

无*/voiddisplay(unsignedintcnt)P2=tablecnt/100;P0=0x7f;delayms

(1);P0=0xff;P2=tablecnt/10%10;P0=0xbf;delayms

(1);P0=0xff;P2=tablecnt%10;P0=0xdf;delayms

(1);P0=0xff;/*函数功能:

主函数*/voidmain(void)TMOD=0x61;/定时器0,工作方式1,计数器1,工作方式2(8位自动重装)TR0=1;/开定时器0中断ET0=1;/定时器0允许TH0=(65536-46080)/256;TL0=(65536-46080)%256;TR1=1;/开计数器1中断ET1=1;/允许计数器1中断EA=1;while

(1)display(cnt);/*函数功能:

/定时器计数器T0中断服务函数入口参数:

无出口参数:

无*/voidtime0(void)interrupt1q+;if(q=20)/1秒钟到q=0;cnt=TL1;/定时计数器1中的计数值即为输入脉冲的频率值TL1=0;/计数值清零ET1=1;/恢复外部计数1。

开始下一轮测量TR1=1;TH0=(65536-46080)/256;/定时器0重复赋初值TL0=(65536-46080)%256;仿真截图仿真截图试题3.25小型电子产品软件开发一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序实现如下功能,单片机开发板上从左至右4个按键分别为S1-S4,按下S1从单片机第1个引脚上输出频率为1KHz的方波,再按下S1则停止输出方波;方波频率误差小于1%。

功能分析功能分析根据开发板硬件电路,P3端口低四位为独立按键S1、S2、S3和S4。

循环扫描P3.0引脚,判断按键是否按下,当确认S1按键被按下后启动定时器T0的中断模式,向P1.0引脚不断发送1KHz的方波。

当确认S1按键再次被按下后停止定时器T0,停止发送方波信号。

进入等待状态,等待按键再次被按下重新发送1KHz的方波信号。

软件流程图软件流程图NYNY初始化定时器开始发射频率为1KHz方波判断按键是否按下?

判断按键是否再次按下?

停止发射方波程序代码程序代码/*技能抽查第五题:

单片机开发板上从左至右4个按键分别为S1-S4,按下S1从单片机第1个引脚上输出频率为1KHz的方波,再按下S1则停止输出方波;方波频率误差小于1%。

晶振频率:

11.0592MHz*/#include/包含单片机寄存器的头文件sbitpulse=P10;/将方波输出位pulse定义为P1.0输出口sbitS1=P30;/将S1位定义为P3.0按键/*函数功能:

n毫秒延时函数入口参数:

n出口参数:

无*/voiddelayms(unsignedintn)unsignedintj,k;for(j=0;jn;j+)for(k=0;k123;k+);/*函数功能:

主函数*/voidmain(void)TMOD=0x01;/使用定时器T0的模式1TH0=(65536-460)/256;/定时器T0的高8位设置初值,延时500msTL0=(65536-460)%256;/定时器T0的低8位设置初值,延时500msEA=1;/开总中断ET0=1;/定时器T0中断允许while

(1)if(S1=0)/如果按键S1按下delayms(20);if(S1=0)while(!

S1);TR0=!

TR0;/TR0取反,定时器启动或关闭/*函数功能:

定时器T0的中断服务函数入口参数:

无出口参数:

无*/voidTime0(void)interrupt1using1/定时器T0的中断编号为1,使用第1组工作寄存器pulse=!

pulse;TH0=(65536-460)/256;/定时器T0的高8位设置初值,延时500msTL0=(65536-460)%256;/定时器T0的低8位设置初值,延时500ms仿真截图仿真截图试题3.26秒表软件开发一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序如下功能,开发板上4键从左至右为S1-S4,上电后,开始时显示“0.0”;利用S1按键后启动计时;S2按键后停止计时;S3按键后计时归零;最大计时为9.9秒。

计时误差小于0.2秒,显示稳定。

功能分析功能分析根据开发板硬件电路,P0口为数码管段选操作端口,P2口为数码管位选操作端口,P1.0引脚连接蜂鸣器,P3.1引脚连接按键S1。

开通P2端口初始化数码管使其上电显示“0.0”,并将计数变量设置为99,当按键S1被按下时启动定时器T0的中断方式对计数变量进行自加并显示在数码管上。

当计数变量为99时,数码管显示9.9并关闭定时器T0。

若计时过程中按键S2有被按下,则关闭定时器T0并将计数变量保存,并等待按键S1被按下继续计数和显示时间。

若S3有被按下,则关闭定时器T0并将计数变量值清0,并等待按键S1被按下重新计数和显示时间。

软件流程图软件流程图YN初始化数码管显示0开始判断按键是否按下?

按键1按键2按键3显示时间时间停止清零程序代码程序代码/*数码秒表设计:

开发板上4键从左至右为S1-S4,上电后,开始时显示0.0;利用S1按键后启动计时;S2按键后停止计时;S3按键后计时归零;最大计时为9.9秒。

计时误差小于0.2秒,显示稳定。

晶振频率:

11.0592MHz*/#include/包含51单片机寄存器定义的头文件unsignedcharcodetable=0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xbf;/共阳极数码管09、-的段码表unsignedcharint_time=0,time=0;/int_time记录中断次数,time储存百毫秒数unsignedcharsecond=0;/储存秒#defineduanP0#defineweiP2sbitS1=P30;/启动按键sbitS2=P31;/停止按键sbitS3=P32;/清零按键/*函数功能:

n毫秒延时函数入口参数:

n出口参数:

无*/voiddelayms(unsignedintn)unsignedintj,k;for(j=0;jn;j+)for(k=0;k114;k+);/*函数功能:

数码管显示子函数入口参数:

无出口参数:

无*/voiddisplay(void)duan=tablesecond%10&0x7f;wei=0x7f;delayms

(1);wei=0xff;duan=tabletime%10;wei=0xbf;delayms

(1);wei=0xff;/*函数功能:

主函数*/voidmain(void)/主函数TMOD=0x01;/使用定时器T0TH0=(65536-46080)/256;/将定时器计时时间设定为=46080微秒=50毫秒TL0=(65536-46080)%256;EA=1;/开启总中断ET0=1;/定时器T0中断允许while

(1)if(S1=0)/开始计数TR0=1;/启动定时器T0开始运行if(S2=0)/停止计数TR0=0;if(S3=0)/清零int_time=0;/计数清零time=0;second=0;TR0=0

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1