在proteus和keil中用继电器控制照明灯,keil程序和proteus电路图如下,可是就是看不到效果,请各位大虾指点一下:
#include
#define uchar unsigned char
#define uint unsigned int
sbit s1=P1^0;
sbit out=P2^4;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
out=1;
while(1)
{
if(s1==0)
{
delay(30);
if(s1==0)
{
out=~out;
}
}
}
}
E:\singlechip\单片机C语言程序设计实训100例基于8051+Proteus仿真\学习51\19 继电器控制照明设备\untitled.bmp
图呢 你写的不太对 要把图放上面了 程序void main()
{
out=1;
while(1)
{
if(s1==0)
{
delay(30);
if(s1==0)
{
out=~out;
}
while(!s1);
}
}
}
你的程序我已经下载到我板子上调试过,问题已经解决
将f(s1==0)
{
delay(30);
if(s1==0) 中的30 改成100,就行。
但是这样对于你来说,还是不行。
我有一个观点,就是仿真的却有很大作用,但是能在硬件上调试成功才是王道,仿真毕竟还是仿的,永远都不是真的。
比如说在按钮这一块,不同的按钮,在消抖时间上略有差别,只有真正的拿在手里看得见摸得着的按钮才能调试,就比如那个delay(100)适合我的按钮,但不一定适合你的按钮,仿真的按钮那就不知道有机械抖动没,毕竟那不是机械的
建议你卖一块学习板,或自己焊接一个核心板也行,跟仿真差别我认为还是有点大的,就像我们在做模电试验一样,仿真一丁点问题也没有,可就是插在板子上没效,仿真把现实中的好多问题都理想化了,做得东西不能在现实中起不了作用,意义不是很大,你认为呢?
,
这儿也要改
while(1)
{
if(s1==0)
{
delay(100);
if(s1==0)
{
out=~out;
}
while(!s1);
}
}
}
引用: 引用 3 楼 great_bug 的回复:
看不到你的图.....
E:\singlechip\单片机C语言程序设计实训100例基于8051+Proteus仿真\学习51\19 继电器控制照明设备\untitled.bmp
用板子调试的话回让你对单片机有更好的理解,更多的兴趣,学起来也会很轻松的!祝你成功!你一定能够征服它!o(∩_∩)o...