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

上传人:聆听****声音 文档编号:606468 上传时间:2023-04-29 格式:DOCX 页数:40 大小:432.77KB
下载 相关 举报
小型电子产品软件开发——复习版指南.docx_第1页
第1页 / 共40页
小型电子产品软件开发——复习版指南.docx_第2页
第2页 / 共40页
小型电子产品软件开发——复习版指南.docx_第3页
第3页 / 共40页
小型电子产品软件开发——复习版指南.docx_第4页
第4页 / 共40页
小型电子产品软件开发——复习版指南.docx_第5页
第5页 / 共40页
小型电子产品软件开发——复习版指南.docx_第6页
第6页 / 共40页
小型电子产品软件开发——复习版指南.docx_第7页
第7页 / 共40页
小型电子产品软件开发——复习版指南.docx_第8页
第8页 / 共40页
小型电子产品软件开发——复习版指南.docx_第9页
第9页 / 共40页
小型电子产品软件开发——复习版指南.docx_第10页
第10页 / 共40页
小型电子产品软件开发——复习版指南.docx_第11页
第11页 / 共40页
小型电子产品软件开发——复习版指南.docx_第12页
第12页 / 共40页
小型电子产品软件开发——复习版指南.docx_第13页
第13页 / 共40页
小型电子产品软件开发——复习版指南.docx_第14页
第14页 / 共40页
小型电子产品软件开发——复习版指南.docx_第15页
第15页 / 共40页
小型电子产品软件开发——复习版指南.docx_第16页
第16页 / 共40页
小型电子产品软件开发——复习版指南.docx_第17页
第17页 / 共40页
小型电子产品软件开发——复习版指南.docx_第18页
第18页 / 共40页
小型电子产品软件开发——复习版指南.docx_第19页
第19页 / 共40页
小型电子产品软件开发——复习版指南.docx_第20页
第20页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

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

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

目 录

试题3.21按键控制彩灯软件开发 3

功能分析 3

软件流程图 3

程序代码 4

仿真截图 7

试题3.22计数器软件开发 8

功能分析 8

软件流程图 8

程序代码 9

仿真截图 11

试题3.23按键控制组合灯软件开发 12

功能分析 12

软件流程图 12

程序代码 12

仿真截图 14

试题3.24频率计软件开发 16

功能分析 16

软件流程图 16

程序代码 17

仿真截图 18

试题3.25小型电子产品软件开发 20

功能分析 20

软件流程图 20

程序代码 21

仿真截图 22

试题3.26秒表软件开发 23

功能分析 23

软件流程图 23

程序代码 23

仿真截图 26

试题3.27倒计时秒表软件开发 27

功能分析 27

软件流程图 27

程序代码 27

仿真截图 30

试题3.28小交通灯控制软件开发 31

功能分析 31

软件流程图 31

程序代码 32

仿真截图 34

试题3.29单片机与PC机通信软件开发 35

功能分析 35

软件流程图 35

程序代码 35

试题3.30单片机与PC机通信软件开发 37

功能分析 37

软件流程图 37

程序代码 38

试题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.085µs,而定时/计数器在定时模式时就是对fosc的12分频即机器周期进行计数,因此要定时1ms需要计数次数为9216次。

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

软件流程图

开始

初始化

Y

N

判断按键

是否按下?

Y

按键1

按键2

按键3

按键4

P1=0x00

P1=0x55

P1=0x0f

P1=0xff

延时P1取

延时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 //发光二极管接P1

sbitS1=P3^0;//将S1位定义为P3.0sbitS2=P3^1;//将S2位定义为P3.1sbitS3=P3^2;//将S3位定义为P3.2sbitS4=P3^3;//将S4位定义为P3.3

charflag=0,q=0; //flag为延时变量标志,q记录中断次数

/****************************************************************

函数功能:

n毫秒延时函数

入口参数:

n 出口参数:

****************************************************************/voiddelayms(unsignedintn)

{

unsignedintj,k;for(j=0;j

for(k=0;k<114;k++);

}

voidmain(void)

{

TMOD=0x01; //使用定时器T0的模式1

TH0=(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,初始化外部中断

INT0和INT1,设置外部中断为负边沿触发,也就是当外部中断P3.2和P3.3引脚为下降沿时触发中断。

当按键S3按下,Count加1并在数码上显示,但Count值大于9

时,Sound发出提示音。

同理当按键S4按下,Count减1并在数码上显示,但Count

值小于0时,Sound发出提示音。

软件流程图

开始

初始化

N

判断按键是否

按下?

Y

N

判断是否

count>9

判断是否

count<0

N

Y

Y

count=0,声音提示

count=9,声音提示

Count--

count++

S4按下执行中断INT1

S3按下执行中断INT0

程序代码

/******************************************************************

编写完整程序实现如下模拟计数器功能,开发板4个按键从左至右分别为S1-S4,开发板上电复位后显示0,利用S3、S4做外部中断输入(要求用外部中断实现),按下S3显示数据加1,按下S4数据显示减1,当计数小于0时,显示0并蜂鸣器发"嘟"声提示,当数据大于9时,显示9并蜂鸣器发"嘟"声提示。

******************************************************************/#include

sbitbuz=P1^0;//buz接蜂鸣器

sbitwei=P2^0;//数码管位选通位

sbitS3=P3^2;sbitS4=P3^3;

unsignedchari;//定义全局变量iunsignedcharflag;//蜂鸣器鸣叫标志位

unsignedcharcodetab[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//共阳极0~9的段码

//延时函数,入口参数为n,没有出口参数voiddelayms(unsignedintn)

{

unsignedintj,k;for(j=0;j

for(k=0;k<114;k++);

}

//主函数main()

{

EA=1;//打开总中端EX0=1;//打开外部中断0

EX1=1;//打开外部中断1

IT0=1;//设置外部中断0触发方式为边沿触发IT1=1;//设置外部中断1触发方式为边沿触发while

(1)

{

wei=0;//选通7段数码管第1位P0=tab[i];//让数码管显示0~9if(flag)

{

flag=0;//清蜂鸣器鸣叫标志位buz=0;//蜂鸣器鸣叫delayms(500);//延时500毫秒buz=1;//蜂鸣器关闭

}

}

}

voidint0()interrupt0//外部中断0

{

delayms(20);//延时消抖if(S3==0)//按键确认按下

{

while(!

S3); //等待按键松开if(i<9)//判断i是否小于9

i++;//i自加

else//i不小于9

{

i=9;//给i直接赋值9flag=1; //蜂鸣器鸣叫

}

}

}

voidint1()interrupt2//外部中断1

{

delayms(20);//延时消抖if(S4==0)//按键确认按下

{

while(!

S4); //等待按键松开if(i>0)//判断i是否大于0

i--;//i自减

else//i不大于0

{

i=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。

软件流程图

开始

初始化

N

判断按键

是否按下?

Y

按键1

按键2

按键3

按键4

LED1取反

LED2取反

LED1、2全

LED1、2全

程序代码

/************************************************************************

编写完整程序实现如下功能,4个按键分别控制2个灯,4个按键从左至右分别称为S1-S4

,单片机引脚1、2所接灯分别为LED1、LED2,按下S1控制LED1亮灭变化(当前灭则点亮,

当前亮则变灭),S2控制LED2亮灭变化,S3开所有灯,S4关闭所有灯。

*************************************************************************/#include

sbits1=P3^0;//按键S1位sbits2=P3^1;//按键S2位sbits3=P3^2;//按键S3位sbits4=P3^3;//按键S4位sbitLED1=P1^0;//LED1位sbitLED2=P1^1;//LED2位

/****************************************************************

函数功能:

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

n

出口参数:

****************************************************************/

voiddelayms(unsignedintn)

{

unsignedintj,k;for(j=0;j

for(k=0;k<114;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;//点亮LED2

}

}

elseif(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。

初始化定时器

软件流程图

开始

T0定时1秒

到?

N

Y

TL1清零,中断次数清零

数码管显示T1计数值也即频率

启动定时器

程序代码

/***********************************************************************

技能抽查第四题:

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

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

误差小于1HZ。

晶振频率:

11.0592MHz

*************************************************************************/

#include //包含单片机寄存器的头文件sbitpulse=P3^5;//脉冲输入从T1/P3.5送入unsignedcharq;//记录中断次数,定时1sunsignedintcnt; //脉冲次数暂存

unsignedchartable[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xbf};//共阳极数码管0~9、-的段码表

/****************************************************************

函数功能:

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

n

出口参数:

****************************************************************/voiddelayms(unsignedintn)

{

unsignedintj,k;for(j=0;j

for(k=0;k<114;k++);

}

/****************************************************************

函数功能:

显示子函数入口参数:

cnt

出口参数:

****************************************************************/voiddisplay(unsignedintcnt)

{

P2=table[cnt/100];

P0=0x7f;

delayms

(1);P0=0xff;

P2=table[cnt/10%10];

P0=0xbf;

delayms

(1);P0=0xff;

P2=table[cnt%10];

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2