打印

初学单片机

[复制链接]
981|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#include<reg51.h>
sbit LED=P1^7;
sbit KEY=P3^7;
void delay(unsigned int a);
main(){
int b=0;
while(1){
if(KEY==0){
switch(b){
case 0:{
delay(20);
while(KEY==0){
LED=~LED;
b=1;
while(KEY==0);}}
break;
case 1:{
delay(20);
while(1){
LED=~LED;
delay(20);
if(KEY==0)
break;}
b=2;
while(KEY==0);}
break;
case 2:{
delay(20);
LED=0;
b=0;
while(KEY==0);}
break;}}}}
void delay(unsigned int a){
unsigned int i;
while(--a!=0)
for(i=600;i>0;i--);}
这个程序,我的设想是第一次按微动开关,LED常亮,第二次按开关,LED闪烁,第三次按开关,LED再次常亮,第四次按开关,LED灭。但是不知道为什么,LED的切换状态很乱,没有达到预想效果。请高人指点,谢谢

相关帖子

沙发
tyw| | 2014-2-18 15:13 | 只看该作者

使用特权

评论回复
板凳
651927693| | 2014-2-18 16:14 | 只看该作者
格式好乱

使用特权

评论回复
地板
用什么名字好呢?|  楼主 | 2014-2-18 17:04 | 只看该作者
651927693 发表于 2014-2-18 16:14
格式好乱

看到有些书上是这样写的唉。那怎么写比较好呢,求指教

使用特权

评论回复
5
用什么名字好呢?|  楼主 | 2014-2-18 17:15 | 只看该作者
#include<reg51.h>
sbit LED=P1^7;
sbit KEY=P3^7;
void delay(unsigned int a);
main()
{
        int b=0;
        while(1)
        {
                if(KEY==0)
                {
                        switch(b)
                        {
                                case 0:
                                {
                                        delay(20);
                                        while(KEY==0)
                                        {
                                                LED=~LED;
                                                b=1;
                                                while(KEY==0);
                                        }
                                }
                                        break;
                                case 1:
                                {
                                        delay(20);
                                        while(1)
                                        {
                                                LED=~LED;
                                                delay(20);
                                                if(KEY==0)
                                                break;
                                        }
                                        b=2;
                                        while(KEY==0);
                                }
                                        break;
                                case 2:
                                {
                                        delay(20);
                                        LED=0;
                                        b=0;
                                        while(KEY==0);
                                }
                                        break;
                        }
                }
        }
}
void delay(unsigned int a)
{
        unsigned int i;
        while(--a!=0)
        for(i=600;i>0;i--);
}
这样呢?

使用特权

评论回复
6
651927693| | 2014-2-20 00:45 | 只看该作者
建议你看看
Linux内核编码风格(编程代码风格推荐)
https://bbs.21ic.com/forum.php?mo ... &fromuid=858286

使用特权

评论回复
7
Simplue| | 2014-2-20 11:20 | 只看该作者
本帖最后由 Simplue 于 2014-2-20 11:26 编辑

逻辑混乱了 慢慢来
你自己分析一遍就知道了
比如你的那个 case0 里面 while(key==0){.....} 如果一直按着 那灯的就一直改变状态了

使用特权

评论回复
8
orangelxlf| | 2014-2-20 17:27 | 只看该作者
用状态机做,很容易的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝