单片机交流
直播中

whfxsea668

12年用户 506经验值
擅长:模拟技术 EDA/IC设计
私信 关注
[问答]

如何利用51单片机实现LED的点亮/闪烁?

如何利用51单片机实现LED的点亮/闪烁?

回帖(1)

周莹

2021-9-27 11:45:36
   
一、Keil创建项目

1. 打开keil软件,在工具栏点击Project选项选择new uVision Project创建新的工程并保存,步骤如下图所示:















2. 创建新的文件,按快捷键“Ctrl+S”命名为led.c并保存,步骤如下:















3. 在.c文件中编写C语言程序
#include "reg51.h"    ***it led=P2^0; void main(){        while(1)                        {                        led=0;                 }       }




4. 依次点击工具栏中的"Option for target"选择框中的"output ",勾选“Create Hex file ”,确保自己编写的源程序转换为.hex文件,为后续操作使用





5. 依次点击工具栏按钮,生成目标文件





程序运行成功,将在相对路径Object文件夹中生成learning_002.hex文件
二、Proteus搭建虚拟仿真威廉希尔官方网站






三、LED点亮

搭建好威廉希尔官方网站 后,点击AT89C51主控,导入上文用keil中C语言程序生成的learning_002.hex文件





点击软件右下角的运行按钮,红色的发光二级管被点亮





四、LED闪烁

C语言代码改为如下:
#include "reg51.h"    unsigned int x;***it led=P2^0; void main(){        x=50000;        while(1)                        {                        led=0; //亮                        while(x--);  //延时                        led=1; //灭                        while(x--);         //延时                }       }




五、流水灯实现

1. 流水灯(库函数法)

#include #include #define uint unsigned int#define uchar unsigned charuchar temp;int x;void main(){        x=50000;        temp = 0x01;        P1 = temp;        while(x--);   //延时        while(1)        {                temp = _crol_(temp,1);  //调用库函数                P1=temp;                while(x--);        }} 2. 流水灯(左移法)

#include unsigned int x;//shift to the left water lampvoid main(){        x=50000;        P1=0x01;        while(1)        {                while(x--);    //delay time                P1=P1<<1;      //左移                if(P1==0x00)                        P1=0x01;   //回到起始位置        }}




3. 流水灯(右移法)

#include unsigned int x;//shift to the right water lampvoid main(){        x=50000;        P1=0x80;        while(1)        {                while(x--);                P1=P1>>1;                if(P1==0x00)                        P1=0x80;        }}




4. 流水灯(数组索引法)

#include #define uint unsigned int #define uchar unsigned char        uchar table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};uchar p;int x;void main(){        x=50000;        while(1)                {                  for(p=0;p<8;p++)                  {                          P1=table[p];                           while(x--);                  }                  for(p=6;p>=1;p--)                  {                        P1=table[p];                        while(x--);                  }                }}










  
举报

更多回帖

发帖
×
20
完善资料,
赚取积分