功能
利用51单片机,加上按键、8个LED小灯、以及限流电阻,设计一个按键按下小灯循环亮灭,这里在不涉及中断的情况下,实现此功能。
1.硬件电路
在proteus中,仿真只需51单片机(80c51),8LED小灯,限流电阻,及一个按键。 首先,8LED小灯接P1口,加限流电阻后共阴极接地(共阴就是二极管低电平汇聚一起,自己的理解哈哈),然后按键在我看来随便接个P2或P3都可以(不知道仿真里面是带了上拉电阻还是其他)
proteus仿真电路图
2.点亮D1操作先查看有无问题
1.写基础程序(基础定义LED,只需点亮功能即可),其实这一个步骤是我自己思考后加的,原本是直接编最后程序,但是我觉得可以编一个小程序试试硬件电路或其他有没有用,以下为程序简单代码,尝试作用,减少后期试错成本
#include"reg52.h"
#define led P1
sbit k1=P3^2;
main()
{
while(1)
{
led=0x01;
}
}
2.生成hex文件放入proteus软件中的单片机里,达到烧录程序进入硬件仿真的效果,点击运行后,出现如下结果,如图
D1点亮,说明proteus仿真电路有效,代码编译有效,且生成的hex文件也有效果
编辑按键循环灯程序及仿真实验(代码如下)
#include"reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
u8 code table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
#define led P1
sbit k1=P3^2;
void delay(u16 i)
{
while(i--);
}
void Deled()
{
while(1)
{
u8 j=0;
for(j;j<8;j++)
{
led=table[j];
delay(10000);
}
}
}
void DigKey()
{
if(k1==0)
{
delay(1000);
if(k1==0)
{
Deled();
}
while(!k1);
}
}
main()
{
DigKey();
return 0;
}
生成hex文件后放入proteus仿真的80c51单片机中,点击运行后,按下按键,灯达到循环流水亮灭效果,以下如图
问题及解决(代码)
1. 开始遇到自己写的一个函数出现如下情况,如图
虽然只是警告,但是我想看看警告问题出在哪,于是打开搜索,得到如下答案,然后加了头文件后,依然显示有这个警告,正在我左思右想之际,我个人感觉就是因为字母开头大小写问题,之前所看函数开头都是大写,而自己写的用小写出了问题,于是我把d换成D,编译之后果然没有那个警告了。我真牛哇哈哈哈
2. 第二个问题(警告)则是main()主函数返回值问题,编程序忘了加return 0;这一个语句,加上这条语句编译后警告就没了,如下图
加return 0;语句后,如下图
小小仿真任务完成,哈哈(说明一下哦,这里按键按下后灯循环,再次按下按键将没有任何作用,因为没写哈哈)
|