小型电子产品软件开发复习版Word格式.docx
《小型电子产品软件开发复习版Word格式.docx》由会员分享,可在线阅读,更多相关《小型电子产品软件开发复习版Word格式.docx(41页珍藏版)》请在冰豆网上搜索。
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);
/中断次数清零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);
/中断次数清零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);
/中断次数清零flag=4;
/延时变量为4,代表定时关闭的情况TR0=0;
/关闭定时器LED=0xff;
/LED全部关闭/全灭/*函数功能:
定时器T0的中断服务函数入口参数:
无*/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位设置初值,延时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;
/主函数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(!
/等待按键松开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出口参数:
/*函数功能:
主函数*/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清零,中断次数清零程序代码程序代码/*技能抽查第四题:
编写程序,使频率计在上电后,具有:
11.0592MHz*/#include/包含单片机寄存器的头文件sbitpulse=P35;
/脉冲输入从T1/P3.5送入unsignedcharq;
/记录中断次数,定时1sunsignedintcnt;
/脉冲次数暂存unsignedchartable=0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xbf;
/共阳极数码管09、-的段码表/*函数功能:
显示子函数入口参数:
cnt出口参数:
无*/voiddisplay(unsignedintcnt)P2=tablecnt/100;
P0=0x7f;
delayms
(1);
P0=0xff;
P2=tablecnt/10%10;
P0=0xbf;
P2=tablecnt%10;
P0=0xdf;
主函数*/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则停止输出方波;
11.0592MHz*/#include/包含单片机寄存器的头文件sbitpulse=P10;
/将方波输出位pulse定义为P1.0输出口sbitS1=P30;
/将S1位定义为P3.0按键/*函数功能:
k123;
主函数*/voidmain(void)TMOD=0x01;
/使用定时器T0的模式1TH0=(65536-460)/256;
/定时器T0的高8位设置初值,延时500msTL0=(65536-460)%256;
/定时器T0的低8位设置初值,延时500msEA=1;
if(S1=0)while(!
TR0=!
TR0;
/TR0取反,定时器启动或关闭/*函数功能:
无*/voidTime0(void)interrupt1using1/定时器T0的中断编号为1,使用第1组工作寄存器pulse=!
pulse;
TH0=(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;
S2按键后停止计时;
最大计时为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;
/清零按键/*函数功能:
数码管显示子函数入口参数:
无*/voiddisplay(void)duan=tablesecond%10&
0x7f;
wei=0x7f;
wei=0xff;
duan=tabletime%10;
wei=0xbf;
主函数*/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