標(biāo)題:
求51單片機C語言PC機串口通訊工具發(fā)送一個串口數(shù)據(jù):70,然后收到串口數(shù)據(jù):當(dāng)前...
[打印本頁]
作者:
lmy1200
時間:
2022-12-5 11:18
標(biāo)題:
求51單片機C語言PC機串口通訊工具發(fā)送一個串口數(shù)據(jù):70,然后收到串口數(shù)據(jù):當(dāng)前...
#include "STC15.h"
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define BAUD 9600
#define FOSC 11059200UL
sbit Yellow=P3^6;
sbit Write=P3^3;
sbit _12V_BOOST_EN=P1^5;
sbit _12v_DRE=P1^1;
sbit _5V_BRE=P1^2;
sbit LED1=P0^0;
sbit LED2=P0^1;
sbit LED3=P0^2;
sbit LED4=P0^3;
sbit Key1=P1^4;
uchar PWM_Y=0;
uchar PWM_W=0;
uchar number=255;
uchar mode=1;
bit flag=0;
bit flag_cd=0;
void IO_init()
{
P0M1 = 0; P0M0 = 0;
P1M1 &= 0xff; P1M0 |= 0x00;
P2M1 = 0; P2M0 = 0;
P3M1 = 0; P3M0 = 0;
P4M1 = 0; P4M0 = 0;
P5M1 = 0; P5M0 = 0;
P6M1 = 0; P6M0 = 0;
P7M1 = 0; P7M0 = 0;
}
void _MCU_()
{
if(_12v_DRE==0||_5V_BRE==0)
{
_12V_BOOST_EN=1;
}else{_12V_BOOST_EN=0;}
}
void Time_init()
{
AUXR &= 0x7F;
TMOD &= 0xF0;
TMOD |= 0x01;
TL0 = 0x9C;
TH0 = 0xFF;
TF0 = 0;
TR0 = 1;
ET0=1;
}
void Uart_init()
{
SCON=0x50;
T2L=(65536-(FOSC/4/BAUD));
T2H=(65536-(FOSC/4/BAUD))>>8;
AUXR=0x14;
AUXR|=0x01;
ES=1;
EA=1;
}
void send(uchar dat)
{
ES=0;
SBUF=dat;
while(TI==0);
TI=0;
ES=1;
}
void receive()
{
if(number!=255)
{
send(number);
/* send(number/100+0x30);
send(number%100/10+0x30);
send(number%10+0x30);
send('\n');*/
switch(number)
{
case 101:mode=1;
PWM_Y=0;
PWM_W=0;
number=255;
break;
case 102:mode=2;
PWM_Y=25;
PWM_W=25;
number=255;
break;
case 103:mode=3;
PWM_Y=0;
PWM_W=80;
number=255;
break;
case 104:mode=4;
PWM_Y=80;
PWM_W=0;
number=255;
break;
case 105:if(mode==2)
{
flag=!flag;
}
number=255;
break;
default: switch(mode)
{
case 2: if(flag==0)
{
PWM_Y=number;
PWM_W=number;
}
else
{
PWM_Y=100-number;
PWM_W=number;
}
break;
case 3: PWM_Y=0;
PWM_W=number;
break;
case 4: PWM_Y=number;
PWM_W=0;
break;
}
number=255;
break;
}
}
}
void led_cl()
{
static uint i=0;
switch(mode)
{
case 1: LED1=0;LED2=1;LED3=1;LED4=1;
break;
case 2: i++; if(i>60000) {i=0;}
if(flag==0)
{
LED1=1;LED2=0;LED3=1;LED4=1;
}
else
{
if(i<30000) {LED1=1;LED2=0;LED3=1;LED4=1;}
else {LED1=1;LED2=1;LED3=1;LED4=1;}
}
break;
case 3: LED1=1;LED2=1;LED3=0;LED4=1;
break;
case 4: LED1=1;LED2=1;LED3=1;LED4=0;
break;
}
}
void delay(uint time)
{
uint x,y;
for(x=time;x>0;x--)
for(y=110;y>0;y--);
}
void key_cl()
{
unsigned long j=0;
static bit keybuf1=1;
static bit backup1=1;
keybuf1=Key1;
if(keybuf1!=backup1)
{
delay(200);
if(keybuf1==Key1)
{
if(backup1==1)
{
while(Key1==0)
{
j++;
led_cl();
if(j>=50000)
{
j=0;
flag_cd=1;
break;
}
}
if(flag_cd==0)
{
mode++; if(mode>4) {mode=1;}
send(mode+100);
switch(mode)
{
case 1: PWM_Y=0;
PWM_W=0;
break;
case 2: PWM_Y=25;
PWM_W=25;
break;
case 3: PWM_Y=0;
PWM_W=80;
break;
case 4: PWM_Y=80;
PWM_W=0;
break;
}
}
else
{
mode=1;
PWM_Y=0;
PWM_W=0;
}
j=0;
flag_cd=0;
}
backup1=keybuf1;
}
}
}
void main()
{
IO_init();
Time_init();
Uart_init();
send(mode+100);
while(1)
{
_MCU_();
receive();
led_cl();
key_cl();
}
}
void Timer0_ISR (void) interrupt 1
{
static int a=0;
TL0 = 0x9C;
TH0 = 0xFF;
if(PWM_Y<=a) {Yellow=0;}
else {Yellow=1;}
if(PWM_W<=a) {Write=0;}
else {Write=1;}
a++; if(a>100) {a=0;}
}
void uart() interrupt 4
{
if(RI==1)
{
RI=0;
number=SBUF;
}
if(TI==1)
{
TI=0;
}
}
復(fù)制代碼
作者:
lmy1200
時間:
2022-12-6 11:00
單片機C語言PC機串口通訊工具發(fā)送一個串口數(shù)據(jù):70,然后收到串口數(shù)據(jù):顯示當(dāng)前LED的模式
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1