找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1785|回复: 12
收起左侧

单片机C语言变量不起作用

[复制链接]
ID:293479 发表于 2021-3-21 21:45 | 显示全部楼层 |阅读模式
达到目的:开关打开后一直处于闭合状态,输出只要发出一个20ms的高电平后维持低电平,用虚拟示波器发现20ms高电平,60ms低电平,再20ms高电平,一直反复。特来讨教,谢谢

#include<reg51.h>
#define uint unsigned int
sbit left=P1^3;
sbit Lout=P3^2;               
unsigned char a;
void delay(uint z)
        {
                uint i,j;
                for(i=z;i>0;i--)
                        for(j=110;j>0;j--);
        }
        
void case1()
{
        if((left==0)&&(a==0))
        {        a=1;
                Lout=1;
                delay(20);
                Lout=0;
        }
}

void main()
{
        Lout=0;
        case1();
}
无标题.jpg




回复

使用道具 举报

ID:287575 发表于 2021-3-21 23:51 | 显示全部楼层
void main()
{
        Lout=0;
       while(1)
      {
        case1();
      }
}
这样就可以了,不过由于你改了a的值为i1后,没程序把他改为0,你的程序只能执行一次20Ms高电平,以后永远是低电平了,再按键也不起作用了
回复

使用道具 举报

ID:342822 发表于 2021-3-21 23:53 | 显示全部楼层
尾巴加  while (1);
回复

使用道具 举报

ID:420836 发表于 2021-3-22 02:05 | 显示全部楼层
该程序的主函数没有执行case1代码的无限循环。
回复

使用道具 举报

ID:293479 发表于 2021-3-22 09:11 | 显示全部楼层
zhangxiaozi 发表于 2021-3-21 23:51
void main()
{
        Lout=0;

谢谢,按照你的方法可以了。
回复

使用道具 举报

ID:293479 发表于 2021-3-22 09:11 | 显示全部楼层
taotie 发表于 2021-3-21 23:53
尾巴加  while (1);

回复

使用道具 举报

ID:517951 发表于 2021-3-22 09:41 | 显示全部楼层
可以采用中断方式,设置T0,T1两个定时器间隔时间输出高低电平,main()函数里面初始化T0,T1中断,就可以不需要while(1)了。
回复

使用道具 举报

ID:894851 发表于 2021-3-22 09:59 | 显示全部楼层
加一个死循环
回复

使用道具 举报

ID:894309 发表于 2021-3-22 11:15 来自手机 | 显示全部楼层
给case加个循环就好了
回复

使用道具 举报

ID:293479 发表于 2021-3-22 20:19 | 显示全部楼层
zhangxiaozi 发表于 2021-3-21 23:51
void main()
{
        Lout=0;

那么再请教一下,谢谢。
main里的程序既然只运行了一次,那么a=1才对,但是输出始终在动作,基本60ms有一次动作,这是哪个语句在起作用?
回复

使用道具 举报

ID:895034 发表于 2021-3-23 16:25 | 显示全部楼层
少了尾巴啊,要加一个循环
回复

使用道具 举报

ID:286211 发表于 2021-3-23 17:05 | 显示全部楼层
此程序只执行了一遍就停止了
回复

使用道具 举报

ID:895574 发表于 2021-3-24 14:08 | 显示全部楼层
要加循环,不然就执行了一遍
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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