软件组任务任务目的:掌握C语言在MCU上的编程应用任务准备:开发板,按键2个,LED 1个。(开发板型号无要求,没有开发板的可以使用Proteus仿真)功能实现:1 分解任务:编写按键扫描程序。要求定义一个按键扫描函数 如:int key_scan(void)定义两个按键变量,K1加 ,K2 减。2分解任务:编写LED点亮延时程序要求定义编写一个延时函数 如 void delay_ms (uint16 time)实现LED点亮和熄灭。3综合任务:根据上面两个分解任务编写程序,要求LED开始亮灭时间为2S,通过按键按下K1(加)后,LED亮灭时间在原来时间的基础上增加0.5S,按下按键K2(减)后LED亮灭时间在原来的基础上减少0.5秒。(注LED亮灭时间范围控制在0.5S ~ 4S,并且带有循环效果 如:此时LED亮灭时间为0.5S,按下按键K2后LED亮灭时间变为4S。)我只需要软件程序 谢谢
你应该说明你用的说明开发板。以最简单的51单片机为例。
写按键扫描程序。要求定义一个按键扫描函数 ,K1加 ,K2 减。
sbit k1=P3^1; //定义P31口是k1
sbit k2=P3^2; //K2
//按键检测函数,k1:+ k2+-
void keyscan()
{
if(k1==0) //检测按键K1是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k1==0) //再次判断按键是否按下
{
; //要执行的任务
}
while(!k1); //检测按键是否松开
}
if(k2==0)
{
delay(1000);
if(k2==0)
{
;
}
while(!k2);
}
}
编写LED点亮延时程序要求定义编写一个延时函数
//延时函数,i=1,10us
void delay(u16 i)
{
while(i--);
}
综合任务:根据上面两个分解任务编写程序,要求LED开始亮灭时间为2S,通过按键按下K1(加)后,LED亮灭时间在原来时间的基础上增加0.5S,按下按键K2(减)后LED亮灭时间在原来的基础上减少0.5秒。(注LED亮灭时间范围控制在0.5S ~ 4S,并且带有循环效果 如:此时LED亮灭时间为0.5S,按下按键K2后LED亮灭时间变为4S。)
#include "reg52.h"
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit k1=P3^1; //定义P31口是k1
sbit k2=P3^2; //K2
sbit led=P3^3; //LED
u8 LED_T=200 //LED默认时间2s
u8 LED_T_max=400
u8 LED_T_min=50
//延时函数,j=1,10ms
void delay(u16 j)
{
for (i=1;i<=1000,i++)
{
while(j--);
}
}
//按键检测函数,k1:+ k2+-
void keyscan()
{
if(k1==0) //检测按键K1是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k1==0) //再次判断按键是否按下
{
LED_T+=50; //要执行的任务
if (LED_T>400) //亮灭时间范围限定
{
LED_T=50;
}
}
while(!k1); //检测按键是否松开
}
if(k2==0)
{
delay(1000);
if(k2==0)
{
LED_T-=50;
if(LED_T<50)
{
LED_T=400;
}
}
while(!k2);
}
}
void main()
{
while(1)
{
keyscan();
led=1;
delay(LED_T);
led=0;
delay(LED_T);
}
}
简单的可以直接买个ardunio 进行写代码 最适合新手入门