找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1160|回复: 3
收起左侧

一个简单的单片机状态机程序,就是跑不起来,不知道为啥?

[复制链接]
ID:997026 发表于 2022-3-23 20:13 | 显示全部楼层 |阅读模式
之前没写过状态机,现在写了一个简单的状态机(不知道算不算状态机,姑且这么叫),但是很奇怪,就是跑不起来。我测试了各种方法,都没用,找不到问题在哪里,希望能得到大神的帮助。

简单说明:
1,状态机实现功能主要是通过按键设置LED亮灭
2,分两个状态: LED_OFF, LED_ON.  即LED熄灭,LED点亮, 通过按键在两个状态间切换

程序如下:
#define  LED_OFF    0
#define  LED_ON      1

unsigned char    STATE=0;
unsigned char    led_on; //按键设置变量

void state_machine(void);
void LED_ON(void);

int main(void)
{
   STATE=LED_OFF;
   while(1)
   {
      state_machine();
   }
}


void state_machine(void)
{
   switch(STATE)
   {
    case LED_OFF:
    if(led_on)
     {
      STATE=LED_ON;
     }
     else
     {
      STATE=LED_OFF;
     }
    break;

    case LED_ON:
    LED_ON();
    if(!led_on)
     {
      STATE=LED_OFF;
     }
     else
     {
      STATE=LED_ON;
     }
     break;   
   }
}


就这么一个简单的小程序,就是跑不起来,看起来好像也没问题,不知道问题出在哪里。我把LED_ON() 直接放在main里,是没问题的,像这样:
int main(void)
{
   state1=0;
   while(1)
   {
      LED_ON();
   }
}


一用状态机写法就点不亮了,请求各位有经验的大神帮助,我基础不太好,不知道是不是哪里细节没注意到。谢谢
回复

使用道具 举报

ID:101869 发表于 2022-3-23 21:06 来自手机 | 显示全部楼层
你的led_on没有被控制,起码要有个按键来操作啊
回复

使用道具 举报

ID:68468 发表于 2022-3-23 21:16 | 显示全部楼层
你这个程序贴出来的不完整,按键呢?LED_ON()呢?
回复

使用道具 举报

ID:342822 发表于 2022-3-23 21:59 | 显示全部楼层
是AVR单片机吗
如果是,头文件呢,方向寄存器设置呢.引脚别名呢都没有看到~~~~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表