51单片机作为下位机程序,我凭什么拿到了阿里、腾讯、今日头条3家大厂offer

82 阅读3分钟

51单片机作为下位机程序,本代码段实现两个功能:

1、控制LED灯按指定规则显示

2、将接收的上位机数据返回给上位机

源代码在这儿:download.csdn.net/detail/ting…

#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年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。 img img

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!