📄 uart.c
字号:
#include <reg52.h>
#include <ctype.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <intrins.h>
#include "define.h"
//#include "val.h"
#include "function.h"
#define MAOHAO_WEN 0XBA
extern unsigned char idata cSendBuffer[30],cReceBuffer[30];
extern unsigned char cSendLen,cReceLen,cReceTimeOut,cSendPosi;
extern bit bReceOK;
extern unsigned char banhou_set[4],buchang_set[4];
extern unsigned char tuidao_set[4],muxin_set[4];
extern bit lesser_bit;
extern bit main_set_bit,dis_pass_bit;
extern bit speed_set_bit,luoju_set_bit;
extern bit daoju_set_bit,master_bit,enter_bit;
extern unsigned char comm_time;
extern unsigned char jin_speed_set[4];
extern unsigned char tui_speed_set[4],gun_speed_set[4];
extern unsigned char luoju_set[4];
extern unsigned char chuandong_set[4],gunju_set[4];
extern unsigned char gunjing_set[4];
extern unsigned char daoju_set[4];
extern unsigned char mujing_set[4],chuangdu_set[4];
extern unsigned char maichong_set[4];
extern unsigned char jindao_speed[4],zhuji_speed[4],daoju[4];
extern unsigned char buchang_set[4];
bit rece_bit_fail;
bit rece_bit_success;
bit en_bit_tran; //
unsigned char tran_step;
extern unsigned char rece_pt,speed_time;
extern bit en_bit_enter;
/*
发送的过程分为三次,每次发送完后,等待接收数据,并对接受的数据进行判断
接收正确则退出发送程序
*/
void tran_sub(void)
{
if(!en_bit_tran) return;
switch(tran_step) {
case 0: { // 第一次发送
readDsp();
comm_time=0;
rece_bit_fail=0;
rece_bit_success=0;
tran_step=1;
}
break;
case 1:
{
if(rece_bit_fail||(comm_time>50)) {
tran_step++;
readDsp();
rece_bit_fail=0;
comm_time=0;
}
else {
if(rece_bit_success) tran_step=4;
}
}
break;
case 2:{ // 第三次发送
// 接收的数据错误,发送缓冲器的数据仍然有效,立即进行第二次发送
if(rece_bit_success) tran_step=4;
else {
if(rece_bit_fail||(comm_time>50)) {
rece_bit_fail=0;
tran_step++;
readDsp();
comm_time=0;
}
}
}
break;
case 3: {
if(rece_bit_fail||(comm_time>50)) tran_step=5; // 发送错误, 退出发送程序
else {
if(rece_bit_success) tran_step=4; // 第三次发送程序正确
}
}
break;
default: { // 强行退出发送过程
// tran_command=0; // 没有发送命令,发送程序将不被执行
tran_step=0; // 对发送的步骤进行初始化
rece_bit_fail=0;
rece_bit_success=0;
en_bit_tran=0;
en_bit_enter=0;
}
break;
}
}
//------------------------------------------------
void readDsp(void)
{
if((lesser_bit)&&(speed_time>10))
{
sendRead(2) ;
speed_time=0;
}
if(!en_bit_enter){
if(master_bit) sendRead(1);
else if(lesser_bit) sendRead(2) ;
else if(main_set_bit) sendRead(3) ;
else if(luoju_set_bit) sendRead(4) ;
else if(daoju_set_bit) sendRead(5) ;
else if(speed_set_bit) sendRead(6) ;
}
else {
if(main_set_bit) mainSetWrite();
else if(luoju_set_bit) luojuSetWrite();
else if(daoju_set_bit) daojuSetWrite();
else if(speed_set_bit) speedSetWrite();
}
}
void CheckCommData(void)
{
if(!bReceOK) return;
bReceOK = 0;
cReceTimeOut = 0;
if((cReceBuffer[2]==(2+0x30))&&(cReceBuffer[4]==(0+0x30))&&(checkOut()==0)) // 累加和判断
{
rece_bit_success=1;
switch(cReceBuffer[6]-0x30){
case 1:
{
banhou_set[0]=cReceBuffer[7]-0x30;
banhou_set[1]=cReceBuffer[8]-0x30;
banhou_set[2]=cReceBuffer[9]-0x30;
// banhou_set[3]=cReceBuffer[10]-0x30;
tuidao_set[0]=cReceBuffer[11]-0x30;
tuidao_set[1]=cReceBuffer[12]-0x30;
tuidao_set[2]=cReceBuffer[13]-0x30;
// banhou_set[3]=cReceBuffer[14]-0x30;
muxin_set[0]=cReceBuffer[15]-0x30;
muxin_set[1]=cReceBuffer[16]-0x30;
muxin_set[2]=cReceBuffer[17]-0x30;
// banhou_set[3]=cReceBuffer[18]-0x30;
// banhou_set[0]=cReceBuffer[19]-0x30;
// banhou_set[1]=cReceBuffer[20]-0x30;
// banhou_set[2]=cReceBuffer[21]-0x30;
// banhou_set[3]=cReceBuffer[22]-0x30;
}
break;
/********************************************************************/
case 2:
{
jindao_speed[0]=cReceBuffer[7]-0x30;
jindao_speed[1]=cReceBuffer[8]-0x30;
jindao_speed[2]=cReceBuffer[9]-0x30;
jindao_speed[3]=cReceBuffer[10]-0x30;
zhuji_speed[0]=cReceBuffer[11]-0x30;
zhuji_speed[1]=cReceBuffer[12]-0x30;
zhuji_speed[2]=cReceBuffer[13]-0x30;
zhuji_speed[3]=cReceBuffer[14]-0x30;
daoju[0]=cReceBuffer[15]-0x30;
daoju[1]=cReceBuffer[16]-0x30;
daoju[2]=cReceBuffer[17]-0x30;
daoju[3]=cReceBuffer[18]-0x30;
buchang_set[0]=cReceBuffer[19]-0x30;
buchang_set[1]=cReceBuffer[20]-0x30;
buchang_set[2]=cReceBuffer[21]-0x30;
//buchang_set[3]=cReceBuffer[22]-0x3
}
break;
/**********************************************************************/
case 3:
{
banhou_set[0]=cReceBuffer[7]-0x30;
banhou_set[1]=cReceBuffer[8]-0x30;
banhou_set[2]=cReceBuffer[9]-0x30;
//jindao_speed[3]=cReceBuffer[10]-0x30;
tuidao_set[0]=cReceBuffer[11]-0x30;
tuidao_set[1]=cReceBuffer[12]-0x30;
tuidao_set[2]=cReceBuffer[13]-0x30;
//zhuji_speed[3]=cReceBuffer[14]-0x30;
muxin_set[0]=cReceBuffer[15]-0x30;
muxin_set[1]=cReceBuffer[16]-0x30;
muxin_set[2]=cReceBuffer[17]-0x30;
//daoju[3]=cReceBuffer[18]-0x30;
buchang_set[0]=cReceBuffer[19]-0x30;
buchang_set[1]=cReceBuffer[20]-0x30;
buchang_set[2]=cReceBuffer[21]-0x30;
//buchang_set[3]=cReceBuffer[22]-0x30;
}
break;
/**********************************************************************/
case 4:
{
luoju_set[0]=cReceBuffer[7]-0x30;
luoju_set[1]=cReceBuffer[8]-0x30;
luoju_set[2]=cReceBuffer[9]-0x30;
//jindao_speed[3]=cReceBuffer[10]-0x30;
chuandong_set[0]=cReceBuffer[11]-0x30;
chuandong_set[1]=cReceBuffer[12]-0x30;
chuandong_set[2]=cReceBuffer[13]-0x30;
chuandong_set[3]=cReceBuffer[14]-0x30;
gunju_set[0]=cReceBuffer[15]-0x30;
gunju_set[1]=cReceBuffer[16]-0x30;
gunju_set[2]=cReceBuffer[17]-0x30;
gunju_set[3]=cReceBuffer[18]-0x30;
gunjing_set[0]=cReceBuffer[19]-0x30;
gunjing_set[1]=cReceBuffer[20]-0x30;
gunjing_set[2]=cReceBuffer[21]-0x30;
gunjing_set[3]=cReceBuffer[22]-0x30;
}
break;
/**********************************************************************/
case 5:
{
daoju_set[0]=cReceBuffer[7]-0x30;
daoju_set[1]=cReceBuffer[8]-0x30;
daoju_set[2]=cReceBuffer[9]-0x30;
daoju_set[3]=cReceBuffer[10]-0x30;
mujing_set[0]=cReceBuffer[11]-0x30;
mujing_set[1]=cReceBuffer[12]-0x30;
mujing_set[2]=cReceBuffer[13]-0x30;
mujing_set[3]=cReceBuffer[14]-0x30;
chuangdu_set[0]=cReceBuffer[15]-0x30;
chuangdu_set[1]=cReceBuffer[16]-0x30;
chuangdu_set[2]=cReceBuffer[17]-0x30;
chuangdu_set[3]=cReceBuffer[18]-0x30;
maichong_set[0]=cReceBuffer[19]-0x30;
maichong_set[1]=cReceBuffer[20]-0x30;
maichong_set[2]=cReceBuffer[21]-0x30;
maichong_set[3]=cReceBuffer[22]-0x30;
}
break;
/**********************************************************************/
case 6:
{
jin_speed_set[0]=cReceBuffer[7]-0x30;
jin_speed_set[1]=cReceBuffer[8]-0x30;
jin_speed_set[2]=cReceBuffer[9]-0x30;
jin_speed_set[3]=cReceBuffer[10]-0x30;
tui_speed_set[0]=cReceBuffer[11]-0x30;
tui_speed_set[1]=cReceBuffer[12]-0x30;
tui_speed_set[2]=cReceBuffer[13]-0x30;
tui_speed_set[3]=cReceBuffer[14]-0x30;
gun_speed_set[0]=cReceBuffer[15]-0x30;
gun_speed_set[1]=cReceBuffer[16]-0x30;
gun_speed_set[2]=cReceBuffer[17]-0x30;
//daoju[3]=cReceBuffer[18]-0x30;
//buchang_set[0]=cReceBuffer[19]-0x30;
//buchang_set[1]=cReceBuffer[20]-0x30;
// buchang_set[2]=cReceBuffer[21]-0x30;
//buchang_set[3]=cReceBuffer[22]-0x30;
}
break;
default:
return;
/**********************************************************************/
}
}
else rece_bit_fail=1;
cReceLen = 0;
}
void sendRead(unsigned char x)
{
unsigned char i,j;
tran_en = 1;
cSendBuffer[1] = '0';
cSendBuffer[2] = '2'; //地址为2
cSendBuffer[3] = '0';
cSendBuffer[4] = '0';
cSendBuffer[5] = '0';
cSendBuffer[6] = 0x30 + x; //屏号
i = 0x2 +x;
j = (~i) + 1;
if((j / 16) >= 10)
cSendBuffer[7] = 0x41 + j / 16 -10;
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -