51单片机作为下位机程序,本代码段实现两个功能:
1、控制LED灯按指定规则显示
2、将接收的上位机数据返回给上位机
#include <REG52.H>
#include <stdio.h>
#include <intrins.h>
#define uchar unsigned char //宏定义
#define uint unsigned int //宏定义
uchar b; //用来接收数据存储
uchar j=0;
uint i=0; //用来判断相应的子程序
uchar LED1= 0xfe; //作为流水灯的开始
uchar LED2=0Xfe; //作为跑马灯的开始
uchar LED3 = 0xfE; //作为二进制加法灯的开始
uchar LED4=0XFF; //作为花样灯的开始
uchar code table[]={0xff,//全灭
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,//依次逐个点亮
0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,//依次逐个叠加
0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,//依次逐个递减
0x7e,0xbd,0xdb,0xe7,0xe7,0xdb,0xbd,0x7e,//两边靠拢后分开
0x7e,0x3c,0x18,0x00,0x00,0x18,0x3c,0x7e,//两边叠加后递减
0x00};//全亮
void delay(void); //延时函数的声明
void liushuideng(void); //流水灯的声明
void paomadeng(void); //跑马灯的声明
void huayangdeng(void); //花样灯的声明
void stopLed(); //停止所有灯的效果
void erjinzhideng(void); //二进制加法灯的声明
void xianshi(uint j); //显示程序
void init(void); //初始化函数
void main (void)
{
init(); //初始化
while(1)
{
xianshi(i); //显示
}
}
void init(void) //初始化函数的定义
{
SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1
TMOD|= 0x20; //定时器工作方式2
PCON|= 0x80;
TH1 = 0xF3; //baud2 / 波特率4800、数据位8、停止位1。效验位无 (12M)
TL1 = 0xF3;
TR1 = 1; //开启定时器
PS=1; //把串口中断的优先级设为最高
ES = 1; //开串口中断
EA = 1;
}
void delay(void) //延时函数的定义
{
uchar i;
uchar ms=250;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
void liushuideng(void) //流水灯
{
P2 = LED1;
delay();
LED1 = LED1 << 1; //循环右移1位,点亮下一个LED "<<"为左移位
if(P2 ==0X00 )
{
LED1 = 0xfe; // 0xfe = 1111 1110
}
}
void paomadeng(void) //跑马灯
{
P2 = LED2;
LED2 = crol(LED2,1); //循环右移1位,点亮下一个LED 此函数位库函数
delay();
}
void huayangdeng(void) //花样灯
{ P2=table[j++];
delay();
if(j==42)
j=0;
}
void erjinzhideng(void) //二进制加法灯
{
P2= LED4;
delay();
LED4--;
}
收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!