掌握C语言在MC U上的编程应用

软件组任务任务目的:掌握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单片机为例。

功能1

写按键扫描程序。要求定义一个按键扫描函数 ,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);     
    }
}

功能2

编写LED点亮延时程序要求定义编写一个延时函数

//延时函数,i=1,10us
void delay(u16 i)
{
    while(i--);    
}

功能3

综合任务:根据上面两个分解任务编写程序,要求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-=50if(LED_T<50)
            {
                LED_T=400;
            }
        }
        while(!k2);     
    }
}

void main()
{
    while(1)
    {
        keyscan();
        led=1;
        delay(LED_T);
        led=0;
        delay(LED_T);
    }
}

参考链接

mcu芯片编程c语言用链表吗,链表在MCU编程时的一个应用_心灵福至的博客-CSDN博客 链表是一种很常见的数据结构,在uc/OS中有大量的应用。相比数组等数据结构而言其优势有以下几点1:插入与删除效率高,只要操作一次就能完成2:对数据的管理更加灵活与便捷,有利于编写逻辑清晰的程序。关于数组在程序中的应用是很普遍的,下面说说我们MCU程序员如何应用链表这种数据结构来更好的设计程序。先描述一下我们要做的事情:主控系统中需要管理多种子设备,每个加入主控的子设备都有一个编号,每种子设备都有对... https://blog.csdn.net/weixin_35682010/article/details/117078424?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166778427916800182793054%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166778427916800182793054&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-117078424-null-null.nonecase&utm_term=C%E8%AF%AD%E8%A8%80%E5%9C%A8MCU%E4%B8%8A%E7%9A%84%E7%BC%96%E7%A8%8B%E5%BA%94%E7%94%A8&spm=1018.2226.3001.4450

简单的可以直接买个ardunio 进行写代码 最适合新手入门