找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4197|回复: 14
收起左侧

程序写keil里面没有报错,生成hex文件就放在proteus里面,就是仿真不出来怎么办?

[复制链接]
ID:762484 发表于 2020-5-27 14:50 | 显示全部楼层 |阅读模式
设计内容:1、3个独立按键分别控制“自然风”、“睡眠风”、“常风”,(三者的区别是直流电机的停歇时间不同),并在数显管上显示出区别
   2、每种类型风可以根据按下独立按键次数分为4个档的风力调节。
    3、设计风扇的过热保护,用继电器实现。即当风扇运行一段时间后,暂停10秒。
   4、其他创新内容(如报警提示
程序如下:#include<reg51.h>  //头文件
sbit K1=P1^0;                //定义按键 开关
sbit K2=P1^1;                //正常风
sbit K3=P1^2;                //自然风
sbit K4=P1^3;                //睡眠风
sbit mada=P2^0;                         //马达驱动
sbit jdq=P2^1;                         //继电器驱动
int PWM=40;                                 //PWM寄存器
int dang=1;                                 //档位寄存器
int i,j;   //输出PWM是的变量
int moshi=0;        //模式标志
int time;        //睡眠和自然风开关间隙时间,定时寄存器
int time1;        //定时工作1分钟休息10秒钟,定时寄存器
int daima=0;        //数码管显示位选选择
sbit p1=P2^4;         //数码管位选
sbit p2=P2^5;
sbit p3=P2^6;
sbit p4=P2^7;
char data_7seg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0x86};           //数码管段码
void xianshi()                                                //显示子程序
{  switch(daima)
  {case 0:
   p1=0;p2=0;p3=0;p4=0;                                //位选关
   P0=data_7seg[moshi];                        //发送第一位数码管显示代码
   p1=1;p2=0;p3=0;p4=0;                                //第一个位选开
   daima=1;                                                //显示延迟
   break;
   case 1:
   p1=0;p2=0;p3=0;p4=0;                                //位选关
   P0=data_7seg[10];                        //发送第二位数码管显示代码
   p1=0;p2=1;p3=0;p4=0;                                //第二个位选开
   daima=2;                                                //显示延迟
   break;
   case 2:
   p1=0;p2=0;p3=0;p4=0;                            //位选关
   P0=data_7seg[10];                        //发送第三位数码管显示代码
   p1=0;p2=0;p3=1;p4=0;                                //第三个位选开
   if(moshi==0)
   daima=0;                                                //显示延迟
   else
   daima=3;
   break;
   case 3:
   p1=0;p2=0;p3=0;p4=0;                                //位选关
   P0=data_7seg[dang];                        //发送第四位数码管显示代码
   p1=0;p2=0;p3=0;p4=1;                                //第四个位选开
   daima=0;                                                //显示延迟
   break;
}
}
void key()                                           //按键扫描
{        if(K1==0)           //档位切换
    { dang++;                          //循环
          if(dang>4)
          dang=1;
          switch(dang)                        //根据档位控制PWM占空比
          {         case 1: PWM=40; break;
                   case 2: PWM=60; break;
                 case 3: PWM=80; break;
                 case 4: PWM=100; break;
          }
        }
        while(K1==0);
        if(K2==0)           //正常模式按键
    {
         moshi=1;           //正常模式
        }
        while(K2==0);
    if(K3==0)           //自然风模式按键
    {
        moshi=2;           //自然风模式
        }
        while(K3==0);
        if(K4==0)           //睡眠模式按键
    {
        moshi=3;           //睡眠模式
        }
        while(K4==0);
}
void main()                        //主程序
{         
    mada=0;                         //初始化端口
        i=100;
        jdq=0;
        TMOD=0X12;                        //定义中断和开启中断                                                                                                               
        TH0=256-100;
        TL0=256-100;
        ET0=1;TR0=1;
        EA=1;
        TH1 = 0x3C;
    TL1 = 0x0B0;
    ET1 = 1;
    TR1 = 1;
        while(1)           //无限循环
        {  key();           //按键扫描
           if(moshi==0)          //模式=0,待机
           {i=0;jdq=1;time1=0; }
           else
           if(moshi==1)                //模式=1,正常
           i=PWM;                        //正常输出
           else
           if(moshi==2)                 //模式=2,自然风
           {  if(time<200) //开10秒,关5秒
              i=PWM;
                  else
                  i=0;
           }
           else
           if(moshi==3)           //模式=3,睡眠风
           {  if(time<100) //开5秒,关10秒
              i=PWM;
                  else
                  i=0;
           }
      
        }
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
void Timer0Interrupt(void) interrupt  0     //定时器中断,输出PWM,占空比
{       
        if(j>100)
        j=0;
        if(j<i)
        {
        mada=1;
        }
        else
       
        {
    mada=0;
        }       
         xianshi();
}
void Timer1Interrupt(void) interrupt 3                          //定时器中断0,计时
{
    TH1 = 0x3C;
    TL1 = 0x0B0;
    if(moshi>1)
        time++;
        else
        time=0;
       
         
        time1++;
        if(time1>=1400)
    time1=0;
        if(time1>=1200)
        jdq=1;
        else
        if(moshi>0)
        jdq=0;
        if(time>=300)  time=0;
}
ok.PNG
回复

使用道具 举报

ID:762484 发表于 2020-5-27 15:08 | 显示全部楼层
那个数码管的灯不亮,但是按钮灯是亮的。求大佬解答
回复

使用道具 举报

ID:523886 发表于 2020-5-27 16:09 | 显示全部楼层
keil不报错只是语法没错,程序定义的变量尽量别乱定义名字,比如用拼音什么的会让人看不懂,建议先完成pwm驱动然后再完成按键一步步来
回复

使用道具 举报

ID:762615 发表于 2020-5-27 16:12 | 显示全部楼层
厉害,谢谢分享
回复

使用道具 举报

ID:762484 发表于 2020-5-27 16:48 | 显示全部楼层
就是那个数码管不显示也不亮
回复

使用道具 举报

ID:277550 发表于 2020-5-27 16:58 | 显示全部楼层
建议  用一些led来显示不同的状态
回复

使用道具 举报

ID:342822 发表于 2020-5-27 18:27 | 显示全部楼层
lun203  9脚接+5v
p2.0继电器    p2.1驱动
继电器不能仿真  换一个能仿真的
错误不少慢慢查找吧
回复

使用道具 举报

ID:759918 发表于 2020-5-27 18:32 | 显示全部楼层
是程序错误还是软件问题?VCC属性设置了吗
回复

使用道具 举报

ID:762484 发表于 2020-5-27 19:43 | 显示全部楼层
g2363451687 发表于 2020-5-27 16:09
keil不报错只是语法没错,程序定义的变量尽量别乱定义名字,比如用拼音什么的会让人看不懂,建议先完成pwm ...

嗯嗯,我是小白,还搞不太明白就用拼音了
回复

使用道具 举报

ID:762484 发表于 2020-5-27 20:00 | 显示全部楼层
g2363451687 发表于 2020-5-27 16:09
keil不报错只是语法没错,程序定义的变量尽量别乱定义名字,比如用拼音什么的会让人看不懂,建议先完成pwm ...

哥你能不能帮我改改啊,这个pwm驱动我咋一直搞不好呢
回复

使用道具 举报

ID:762484 发表于 2020-5-27 20:01 | 显示全部楼层
devcang 发表于 2020-5-27 16:58
建议  用一些led来显示不同的状态

哥 您能不能帮我改改啊,我卡到这里好几天了,谢谢大佬
回复

使用道具 举报

ID:762484 发表于 2020-5-27 21:15 | 显示全部楼层
gianthunter 发表于 2020-5-27 18:32
是程序错误还是软件问题?VCC属性设置了吗

程序对着呢,没有报错,图用别的hex文件也有反应,就是一起用这个自己写的没反应
回复

使用道具 举报

ID:762484 发表于 2020-5-27 21:16 | 显示全部楼层
农夫山泉不甜 发表于 2020-5-27 16:48
就是那个数码管不显示也不亮

对的,所以现在很烦,也不知道错误在哪儿?所以来这儿找一下大佬求助一下,
回复

使用道具 举报

ID:762484 发表于 2020-5-27 21:18 | 显示全部楼层
taotie 发表于 2020-5-27 18:27
lun203  9脚接+5v
p2.0继电器    p2.1驱动
继电器不能仿真  换一个能仿真的

这个图错了很多吗?哦哦哦,谢谢。哥你能给点建议吗?还是不太会啊
回复

使用道具 举报

ID:762892 发表于 2020-5-27 21:21 | 显示全部楼层
直接看懵了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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