找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1438|回复: 9
打印 上一主题 下一主题
收起左侧

想请问一下这个代码是哪里有问题吗?为什么仿真的时候灯都不亮呢?

[复制链接]
跳转到指定楼层
楼主
想请问一下这个代码是哪里有问题吗?为什么仿真的时候灯都不亮呢?求大神指点!

                     
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:328014 发表于 2021-4-11 20:28 | 只看该作者
应该是你的程序有问题,程序呢,没程序大家无法分析啊
回复

使用道具 举报

板凳
ID:897406 发表于 2021-4-11 21:08 来自手机 | 只看该作者
51hei团团 发表于 2021-4-11 20:28
应该是你的程序有问题,程序呢,没程序大家无法分析啊

#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit huang=P2^0;//黄灯sbit lv=P2^2;//绿灯sbit hong=P2^4;//红灯sbit hongwai=P1^0;//热释电sbit butter=P2^6;//蜂鸣器低电平开蜂鸣器sbit  baojing=P1^1//直接报警按键;sbit  bufang=P1^7;//布防按键sbit  quxiao=P3^4;//取消按键uchar tt=0;//定时器变量uchar num=0;//定时的计时变量uchar flag=0;//标志位void timer1init(void)//定时器1,16位方式2{        EA=0;       TMOD=0x11;//设置定时器0为工作方式1        TH0=(65536-10000)/256;        TL0=(65536-10000)%256;        ET0=1;//开定时器0中断        TR0=1;//启动定时器0        tt=0;//        EA=0;//关总中断} void delay(uint z)//延时函数{        uint x,y;        for(x=z;x>0;x--)                for(y=110;y>0;y--);}void main()//主函数{               huang=0;//初始黄灯亮                 lv=0;//初始绿灯亮                 hong=0;//初始红灯亮                 timer1init();//初始化定时器                 while(1)                 {                               if(!baojing)//如果直接报警键被按下                                {                                        delay(5);//延时消抖                                        if(!baojing)//判断报警键是不是被按下                                        {                                           hong=1;//红灯亮                                          lv=0;        //绿灯灭                                          flag=7;//标志位等于7                                          butter=0;//蜂鸣器响                                          EA=0;//关中断                                        }                                        while(!baojing);//判断按键是不是弹开                                        delay(5);//如果弹开延时消抖                                        while(!baojing);//弹开后跳出程序                                }                         if((!bufang)&&(flag<4))//在初始状态和按下取消键后可以进去这个函数                                {                                        delay(5);//延时消抖                                        if(!bufang)//如果布防被按下                                        {                                            EA=1;   //开定时器                                           flag=2;//另=2                                        }                                        while(!bufang);//布防键是不是弹开                                        delay(5);//延时                                        while(!bufang);//布防键弹开                                }                        if(!quxiao)//如果取消键按下                                {                                        delay(5);//延时消抖                                        if(!quxiao)//取消键是不是按下                                        {                                             flag=3;//FLAG等于3                                          butter=1;//蜂鸣器不响                                          tt=0;//                                          num=0;//定时初始0                                          EA=0;//关中断                                        delay(5);//延时消抖                                          lv=0;//绿灯灭                                          hong=0;//红灯灭                                        }                                        while(!quxiao);//取消按键抬开                                        while(!quxiao);//如果弹开跳出                                }                    if(flag==4)//如果布防时间到                          {                           tt=0;//清计数为0                           EA=0;//关中断                           num=0;//记的秒数清零                           lv=1;//关绿灯                           flag=5;//flag等于5                          }                                if(hongwai)//如果感应到人黄灯亮                           huang=1;                        else  huang=0;//感应不到人黄灯灭                        if(flag==5)//如果flag等于5                           {                             if(hongwai)//如果感应到人                                   {                                    butter=0;//蜂鸣器响                                    EA=1;//开中断                                    }                           }                                                   }}void time0() interrupt 1{        TH0=(65536-50000)/256;        TL0=(65536-50000)%256;        tt++;        if(tt==10)          {tt=0; num++;}        if((flag==5)&&(num%2==0))//布防15秒后会让flag=5 ,num为偶数灯亮             hong=1;        if((flag==5)&&(num%2==1))//布防15秒后会让flag=5 ,num为奇数灯灭             hong=0;        if((flag==2)&&(num%2==0))//按键布防键后flag等于2,num为偶数灯亮              lv=1;        if((flag==2)&&(num%2==1)) // 按键布防键后flag等于2,num为奇数灯灭              lv=0;        if((flag==2)&&(num==30))//布防时间,num=30即15秒,可以更改此实现布防延迟时间           flag=4;           }
回复

使用道具 举报

地板
ID:342822 发表于 2021-4-11 22:21 | 只看该作者
void main()//主函数
{              
huang=0;//初始黄灯亮  ???????              
lv=0;//初始绿灯亮   ????????              
hong=0;//初始红灯亮   ????????            
timer1init();//初始化定时器               
while(1)                 {                              
if(!baojing)//如果直接报警键被按下                                
{                                       
delay(5);//延时消抖                                       
if(!baojing)//判断报警键是不是被按下                                       
{                                          
hong=1;//红灯亮   ????????????                                    
lv=0;        //绿灯灭 ??????????  
你看矛盾的干活
回复

使用道具 举报

5#
ID:342822 发表于 2021-4-11 22:34 | 只看该作者
如果下面语句正确
huang=0;//初始黄灯亮  ???????              
lv=0;//初始绿灯亮   ????????              
hong=0;//初始红灯亮
那么仿真电路里的三个发光管要采用灌电流方式即正极接VCC
回复

使用道具 举报

6#
ID:844772 发表于 2021-4-12 09:17 | 只看该作者
LED都接反了,你放大看看就知道了,比如要黄灯亮,按你接的是要huang=1;且按钮那边为0才行
回复

使用道具 举报

7#
ID:897406 发表于 2021-4-12 09:20 | 只看该作者
好的,还有个问题就是为什么左边的哪个单刀双掷开关在转换高低电平时候黄灯不亮呢?这是代码:

if(hongwai)//如果感应到人黄灯亮
                           huang=1;
                        else  huang=0;//感应不到人黄灯灭

                        if(flag==5)//如果flag等于5
                           {
                             if(hongwai)//如果感应到人
                                   {
                                    butter=0;//蜂鸣器响
                                    EA=1;//开中断
                                    }
回复

使用道具 举报

8#
ID:897406 发表于 2021-4-12 14:43 | 只看该作者
glinfei 发表于 2021-4-12 09:17
LED都接反了,你放大看看就知道了,比如要黄灯亮,按你接的是要huang=1;且按钮那边为0才行

红灯和绿灯在按键后都能亮,只有黄灯不亮,led方向没接反啊.我现在的问题就是不管hongwai 是高电平还是低电平,黄灯都不亮,这个应该怎么解决啊?
回复

使用道具 举报

9#
ID:73051 发表于 2021-4-12 15:21 来自手机 | 只看该作者
sbit  baojing=P1^1//直接报警按键;
回复

使用道具 举报

10#
ID:897406 发表于 2021-4-12 18:02 | 只看该作者
什么意思?为什么要sbit  baojing=P1^1//直接报警按键;

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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