优化疫情防控措施新十条seo网络推广培训
设计要求
使用套件上提供的USB转串口功能,完成下列程序设计要求。
串口每次收到8位数字0和1构成的字符串,控制单片机上8个LED指示灯的状态,并将收到的这8个数字显示在数码管上。
每一位数字0表示该位指示灯点亮,1表示该位指示灯熄灭。
例如:通过串口助手向设备发送:“10010011”,控制8个LED指示灯L1 - L8的亮灭顺序:灭、亮、亮、灭、亮、亮、灭、灭。
数码管显示格式如下图所示:
备注:
单片机IRC振荡器频率设置为12MHz。
键盘模式:BTN;扩展模式:IO模式
串口波特率:9600bps
上电指示灯均处于熄灭状态。
代码:
other.h
#ifndef __OTHER_H__
#define __OTHER_H__#include <STC15F2K60S2.H>
extern unsigned char Seg_Buff[8];//数码管显示缓存数组
void init74hc138(unsigned char n);//选通
void init();//系统初始化
void led_uart();//根据缓冲区数值控制LED
void seg_uart(unsigned char *str);//根据接收到的字符串更新数码管缓冲区
void Seg_Loop();//数码管动态刷新#endif
main.c
#include "other.h"
bit flag_seg=0;
bit flag_uart=0;
unsigned char readstr[8];//用于存储接收到的8位数字字符
unsigned char read_i=0;//接收字符的索引
void Timer0_Init(void) //100微秒@12.000MHz
{AUXR |= 0x80; //定时器时钟1T模式TMOD &= 0xF0; //设置定时器模式TL0 = 0x50; //设置定时初始值TH0 = 0xFB; //设置定时初始值TF0 = 0; //清除TF0标志TR0 = 1; //定时器0开始计时ET0 = 1; //使能定时器0中断EA=1;
}
void UartInit(void) //9600bps@12.000MHz
{SCON = 0x50; //8位数据,可变波特率AUXR |= 0x40; //定时器时钟1T模式AUXR &= 0xFE; //串口1选择定时器1为波特率发生器TMOD &= 0x0F; //设置定时器模式TL1 = 0xC7; //设置定时初始值TH1 = 0xFE; //设置定时初始值ET1 = 0; //禁止定时器中断TR1 = 1; //定时器1开始计时ES=1;EA=1;
}
void main(){init();UartInit();Timer0_Init();while(1){if(flag_seg){flag_seg=0;Seg_Loop();}if(flag_uart){flag_uart=0;seg_uart(readstr);led_uart();}}
}
void Timer0_Isr(void) interrupt 1
{static unsigned char count1=0;count1++;if(count1==20){flag_seg=1;count1=0;}
}
void uart() interrupt 4
{if(RI){RI=0;readstr[read_i++]=SBUF;if(read_i==8){read_i=0;flag_uart=1;}}
}
other.c
#include "other.h"void init74hc138(unsigned char n){P2=(P2&0x1f)|(n<<5);P2&=0x1f;
}
void init(){P0=0x00;init74hc138(5);P0=0xff;init74hc138(4);
}
void led_uart(){unsigned char i;EA=0;P0=0;for(i=0;i<8;i++){if(Seg_Buff[i]==1){P0|=(1<<i);}}init74hc138(4);EA=1;
}
seg.c
#include "other.h"void init74hc138(unsigned char n){P2=(P2&0x1f)|(n<<5);P2&=0x1f;
}
void init(){P0=0x00;init74hc138(5);P0=0xff;init74hc138(4);
}
void led_uart(){unsigned char i;EA=0;P0=0;for(i=0;i<8;i++){if(Seg_Buff[i]==1){P0|=(1<<i);}}init74hc138(4);EA=1;
}