实现流程:
? 1. 新建一个工程(新项目)
? 2. 查看原理图确定需求(流水灯)对应LED引脚在单片机上的哪个引脚
? 3. 编写程序(通过查看原理图可以看到我们需要控制整个P2口以控制8个LED灯)
? 4. 编译程序,下载程序至开发板
? 5. 查看效果(调试)
进制转换表(因为单片机首先处理的是十六进制的数据,所以我们需要将二进制控制需求转换成十六进制去写代码):
控制代码:
?#include <REGX52.H> ? //头文件
?#include "Delay.h"
?#include "intrins.h"
??
?/* -------------------------------------------------------
? 项目名称:流水灯 ?
? I/O引脚:P2口(8个引脚)
?
?----------------------------------------------------------*/
??
?unsigned int yanchi = 100; ? ? //延时函数参数
??
?unsigned char code Stream_light_array[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; ? //流水灯数组(方法二)
??
??
?void Way_1(); ? //流水灯控制方法一
?void Way_2(); ? //流水灯控制方法二
?void Way_3(); ? //流水灯控制方法三
?void Way_4(); ? //流水灯控制方法四
?void Way_5(); ? //流水灯控制方法五
??
?int main() ? ? ? ? ? ?
?{
??
? Delay_ms(500);
? ? while(1) ? ? ? ? ?
? ? {
? Way_1();
? Way_2();
? Way_3();
? Way_4();
? Way_5();
? ? }
?}
??
??
?/*--------------------------------------------------------
? 名称:流水灯控制方法五
? 功能:通过移位指令(且或上0x01)将LED实现流水灯效果
??
?----------------------------------------------------------*/
?void Way_5()
?{
? int i;
? P2 = 0xFE;
? Delay_ms(500);
? for(i=0;i<7;i++)
? ? {
? P2=P2 << 1;
? ? P2 = P2 | 0x01; ? ? ? ? ? ?
? Delay_ms(500);
? }
?}
??
?/*--------------------------------------------------------
? 名称:流水灯控制方法四
? 功能:LED灯依次左移一位(依次点亮)
??
?----------------------------------------------------------*/
?void Way_4()
?{
? int i;
? P2 = 0xFE;
? Delay_ms(500);
? for(i=0;i<7;i++)
? ? {
? ? P2 = P2 << 1; ? ? ? ? ? ? ?
? Delay_ms(500);
? }
? P2 = 0xFF;
? Delay_ms(500);
?}
??
?/*--------------------------------------------------------
? 名称:流水灯控制方法三
? 功能:C52 提供了 _crol_(字符循环左移);_cror_ (字符循环右移)
? 等库函数,包含在头文件intrins.h中 ;
??
?----------------------------------------------------------*/
?void Way_3()
?{
? int i;
? P2 = 0xFE;
? Delay_ms(500);
? for(i=0;i<7;i++)
? ? {
? ? P2=_crol_ (P2,1); ? ? ? ? ? ? ?
? Delay_ms(500);
? }
?}
??
?/*--------------------------------------------------------
? 名称:流水灯控制方法二
? 功能:用数组循环方式控制流水灯
??
?----------------------------------------------------------*/
?void Way_2()
?{
??
? int i = 0;
? for(i = 0;i < 8; i++)
? {
? P2 = Stream_light_array[i];
? Delay_ms(500);
? }
?}
??
?/*--------------------------------------------------------
? 名称:流水灯控制方法一
? 功能:用十六进制赋值方式控制流水灯
??
?----------------------------------------------------------*/
?void Way_1()
?{
?
? P2 = 0xFE; ? ? ? //D1
? Delay_ms(yanchi);
? P2 = 0xFF;
?
? P2 = 0xFD; ? ? ? //D2
? Delay_ms(yanchi);
? P2 = 0xFF;
?
? P2 = 0xFB; ? ? ? //D3
? Delay_ms(yanchi);
? P2 = 0xFF;
?
? P2 = 0xF7; ? ? ? //D4
? Delay_ms(yanchi);
? P2 = 0xFF;
?
? P2 = 0xEF; ? ? ? //D5
? Delay_ms(yanchi);
? P2 = 0xFF;
?
? P2 = 0xDF; ? ? ? //D6
? Delay_ms(yanchi);
? P2 = 0xFF;
?
? P2 = 0xBF; ? ? ? //D7
? Delay_ms(yanchi);
? P2 = 0xFF;
?
? P2 = 0x7F; ? ? ? //D8
? Delay_ms(yanchi);
? P2 = 0xFF;
?}
??
延时代码C文件
#include "Delay.h"
??
?/*--------------------------------------------
? 名称:延时函数
? ? 功能:Ms延时
?----------------------------------------------*/
?void Delay_ms(unsigned int xms)
?{
? unsigned int j,k;
? for(j = xms; j > 0; j--)
? for(k = 113; k > 0;k--);
?}
??
延时代码H文件
#ifndef __Delay_H_
?#define __Delay_H_
??
?void Delay_ms(unsigned int xms); ? //延时函数
??
?#endif
??
注意事项:
-
这里要注意勾选HEX这个选项,否则不会生成hex文件(因为我们下载程序使用的是Hex文件)
-
在使用代码中的方法二时一定要记得添加头文件 #include “intrins.h” -
这里开始使用了模块化编程(模块化中的延时代码已放在代码下面,使用记得要添加 .h 文件)
实现效果:
项目总结:
?
|