文章目录
- 一、上位机发送信号控制单片机
- 1、显示对应的流水灯
- 2、显示对应数码管
- 3、控制数码管显示的数字
- 二、两机收发信息
一、上位机发送信号控制单片机
1、显示对应的流水灯
实现现串口通信接收上位机的信息,控制流水灯的亮灭与亮的位置,发送流水灯控制信号,单片机接收信号并显示对应的流水灯。
#include <reg52.h>
#define uchar unsigned char;
uchar UART_buff;
bit Money = 0;
void main (void)
{
SCON = 0x50;
TMOD = 0x20;
TH1 = 0xFD;
TL1 = 0xFD;
TR1 = 1;
ES = 1;
EA = 1;
while(Money==0);
}
void ser_int (void) interrupt 4
{
if(RI == 1)
{
RI = 0;
UART_buff = SBUF;
P1 = UART_buff;
if(UART_buff == '$') Money = 1;
}
}
2、显示对应数码管
现串口通信接收上位机的信息,控制数码管显示的位置,发送数码管的位选信号,单片机接收信号并显示对应的数码管,显示数字为9。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
Uartinit();
void delay(uint x);
sbit dula= P2^6;
sbit wela= P2^7;
uchar Uart_buff;
void UartInit(void)
{
SCON = 0x50;
TMOD = 0x20;
TL1 = 0xFD;
TH1 = 0xFD;
ET1= 0;
TR1= 1;
ES= 1;
EA= 1;
}
void main()
{
Uartinit();
while(1) ;
}
void display() interrupt 4
{
if(RI==1)
{
RI= 0;
Uart_buff= SBUF;
wela= 1;
P0= Uart_buff;
wela= 0;
dula= 1;
P0= 0x6F;
dula= 0;
delay(500);
}
}
void delay(uint x)
{
uint i,j;
for(i=x; i>0; i--)
{
for(j=110; j>0; j--) ;
}
}
3、控制数码管显示的数字
现串口通信接收上位机的信息,控制数码管显示的数字,发送数码管的段选信号,单片机接收信号并显示相应的数字,位置为左边4个位选,同时流水灯不断左移变化。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
void display_ISR();
void Uart_Init();
void delay_ms(uint x);
void light();
uchar UART_buff;
sbit dula = P2^6;
sbit wela = P2^7;
void Uart_Init()
{
SCON = 0x50;
TMOD = 0x20;
TH1 = 0xFD;
TL1 = 0xFD;
ET1 = 0;
TR1 = 1;
ES = 1;
EA = 1;
}
void main()
{
uchar temp = 0xFE;
Uart_Init();
P1 = temp;
delay_ms(500);
while(1)
{
light(temp);
}
}
void light(temp)
{
if(temp != 0x00)
{
temp = temp << 1;
P1 = temp;
delay_ms(500);
}
else
temp = 0xFF;
P1 = temp;
}
void display_ISR() interrupt 4
{
if(RI==1)
{
UART_buff = SBUF;
RI = 0;
wela = 1;
P0 = 0xF0;
wela = 0;
dula = 1;
P0 = UART_buff;
dula = 0;
delay_ms(1500);
}
}
void delay_ms(uint x)
{
uint i, j;
for(i=x; i>0; i--)
for(j=110; j>0; j--) ;
}
二、两机收发信息
实现不断收发信息,串口通信上的发送信息与接收信息,在上位机向单片机发送信息
然后单片机接收信息并将数据进行+2处理,再发送回上位机显示出来。
#include <reg52.h>
#define uchar unsigned char
void Uart_Init();
sbit LED= P1^4;
bit new=0, sended=1;
uchar UART_buff;
void Uart_Init()
{
SCON= 0x50;
TMOD= 0x20;
TH1= 0xFD;
TL1= 0xFD;
ET1= 0;
TR1= 1;
ES = 1;
EA = 1;
}
void main()
{
Uart_Init();
while(1)
{
if((new==1) && (sended==1))
{
SBUF = UART_buff;
new = 0;
sended = 0;
}
}
}
void ser_int (void) interrupt 4
{
if(RI == 1)
{
RI = 0;
new= 1;
UART_buff = SBUF;
if(UART_buff == '1')
LED= 1;
else if(UART_buff == '0')
LED= 0;
else
{
UART_buff = UART_buff + 2;
}
}
else
{
TI = 0;
sended = 1;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)