标题: 程序写keil里面没有报错,生成hex文件就放在proteus里面,就是仿真不出来怎么办? [打印本页]
作者: 农夫山泉不甜 时间: 2020-5-27 14:50
标题: 程序写keil里面没有报错,生成hex文件就放在proteus里面,就是仿真不出来怎么办?
设计内容: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
(100.46 KB, 下载次数: 71)
作者: 农夫山泉不甜 时间: 2020-5-27 15:08
那个数码管的灯不亮,但是按钮灯是亮的。求大佬解答
作者: g2363451687 时间: 2020-5-27 16:09
keil不报错只是语法没错,程序定义的变量尽量别乱定义名字,比如用拼音什么的会让人看不懂,建议先完成pwm驱动然后再完成按键一步步来
作者: leily 时间: 2020-5-27 16:12
厉害,谢谢分享
作者: 农夫山泉不甜 时间: 2020-5-27 16:48
就是那个数码管不显示也不亮
作者: devcang 时间: 2020-5-27 16:58
建议 用一些led来显示不同的状态
作者: taotie 时间: 2020-5-27 18:27
lun203 9脚接+5v
p2.0继电器 p2.1驱动
继电器不能仿真 换一个能仿真的
错误不少慢慢查找吧
作者: gianthunter 时间: 2020-5-27 18:32
是程序错误还是软件问题?VCC属性设置了吗
作者: 农夫山泉不甜 时间: 2020-5-27 19:43
嗯嗯,我是小白,还搞不太明白就用拼音了
作者: 农夫山泉不甜 时间: 2020-5-27 20:00
哥你能不能帮我改改啊,这个pwm驱动我咋一直搞不好呢
作者: 农夫山泉不甜 时间: 2020-5-27 20:01
哥 您能不能帮我改改啊,我卡到这里好几天了,谢谢大佬
作者: 农夫山泉不甜 时间: 2020-5-27 21:15
程序对着呢,没有报错,图用别的hex文件也有反应,就是一起用这个自己写的没反应
作者: 农夫山泉不甜 时间: 2020-5-27 21:16
对的,所以现在很烦,也不知道错误在哪儿?所以来这儿找一下大佬求助一下,
作者: 农夫山泉不甜 时间: 2020-5-27 21:18
这个图错了很多吗?哦哦哦,谢谢。哥你能给点建议吗?还是不太会啊
作者: xff1094214476 时间: 2020-5-27 21:21
直接看懵了
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |