51单片机心形灯——实现串口通信编程
即其中一个单片机的按键控制另外一个单片机上的灯亮灭
心形灯效果图 如果是静态效果请刷新页面哦
心形灯原理图
- 编译软件:Keil uVision5
(如有需要可点此链接下载:https://download.csdn.net/download/qq_36931762/11343174) - 单片机程序下载软件:STC-ISP
(如有需要可点此链接下载:https://download.csdn.net/download/qq_36931762/11343157) - 程序代码:
灯状态处于0亮1灭
发送方:
#include <reg52.h>
sbit k1=P3^2;
sbit k2=P3^3;
sbit k3=P3^4;
sbit k4=P3^5;
#define LED1 P0
#define LED2 P2
void UsartInit(){
SCON=0x50;
TMOD=0x20;
PCON=0x80;
TH1=0xF4;
TL1=0xF4;
ES=1;
EA=1;
TR1=1;
}
void delay(unsigned int ms)
{
unsigned int i,j;
for(i=0;i<ms;i++)
for(j=0;j<110;j++);
}
unsigned char keyscan(void){
unsigned char key='.';
if (k1==0)
{
delay(1);
if(k1==0)
{
key='1';
while(!k1);
}
}
if (k2==0)
{
delay(1);
if(k2==0)
{
key='2';
while(!k2);
}
}
if (k3==0)
{
delay(1);
if(k3==0)
{
key='3';
while(!k3);
}
}
if (k4==0)
{
delay(1);
if(k4==0)
{
key='4';
while(!k4);
}
}
return key;
}
void Tras(unsigned char key)
{
SBUF=key;
while(!TI);
TI=0;
}
void main()
{
unsigned char key;
UsartInit();
while(1)
{
key=keyscan();
if(key!='.')
{
Tras(key);
key='.';
}
}
}
接收方:
#include <reg52.h>
#define uchar unsigned char;
#define uint unsigned int;
uchar receiveData;
uchar flag;
uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};
sbit LED17=P3^6;
void UsartInit(){
SCON=0x50;
TMOD=0x20;
PCON=0x80;
TH1=0xF4;
TL1=0xF4;
ES=1;
EA=1;
TR1=1;
}
void Delay(unsigned int a){
unsigned char b;
for(;a>0;a--){
for(b=110;b>0;b--);
}
}
void AllOn(){
P0=0x00;
P2=0x00;
LED17=0;
}
void AllDown(){
P0=0xff;
P2=0xff;
LED17=1;
}
void RFlow(){
int i;
for(i=0;i<=7;i++){
P2=table[i];
Delay(300);
}
P2=table[8];
for(i=7;i>=0;i--){
P0=table[i];
//P2=table[i];
Delay(300);
}
P0=table[8];
LED17=0;
Delay(300);
LED17=1;
}
void LFlow(){
int i;
for(i=0;i<=7;i++){
P0=table[i];
//P2=table[i];
Delay(300);
}
P0=table[8];
for(i=7;i>=0;i--){
//P0=table[i];
P2=table[i];
Delay(300);
}
P2=table[8];
LED17=0;
Delay(300);
LED17=1;
}
void main(){
UsartInit();
while(1)
{
switch(receiveData)
{
case '1': AllOn();break;
case '2': AllDown();break;
case '3': LFlow();break;
case '4': RFlow();break;
default:break;
}
}
}
void Usart() interrupt 4{
receiveData=SBUF;
RI=0;
P0=0xff;
P2=0xff;
LED17=1;
}
存在我心形灯效果图与代码放错不匹配的情况,如果你按照我的代码装载运行效果与我效果图不一样请评论告诉我!我找一下改一下,如果我后期把相应的效果视频删了,那么就emmmmm意会~意会~我觉得你很聪明肯定懂我的意思hiahia