请问一下大家,我想通过STC12C5A60S2串口通信像12864液晶屏发送中文字符,却没办法在中文屏中显示,所以想问问大家到底是哪里除了问题。
代码如下

- #include<include.h>
- sbit RXD=P3^0;
- sbit TXD=P3^1;
- bit Flage_Receive_Ok,Receive;
- uint idata receive_count;
- uchar xdata uart_buff[205]={0};
- /*****************************************************
- "广告屏串口命令功能:"
- "help----帮助命令。"
- "ad*:&-----发送广告词,“*”为1~5时,写入缓冲区和EEPROM第“*”条广告地址;“*”不为1~5时,只写入缓冲区。“&”为广告词。"
- "cmd:1-----查看EEPROM中保存的广告词。"
- "cmd:2*----删除EEPROM中保存的广告词。"
- "cmd:3*----选择需要显示的广告词,“*”为1~5的数字。"
- "cmd:4-----查看当前时间。"
- "cmd:5*----设置当前时间,“*”为时间,格式:2016-1-05-05-05-05-05(2016年周一05月05日05时05分05秒)。"
- "命令格式:*命令$"
- *****************************************************/
- unsigned char code help1 []={"广告屏串口命令功能:"};
- unsigned char code help2 []={"help------帮助命令。"};
- unsigned char code help3 []={"ad*:&-----发送广告词,“*”为1-5时,写入缓冲区和EEPROM第“*”条广告词地址;“*”不为1-5时,只写入缓冲区。“&”为广告词。"};
- unsigned char code help4 []={"cmd:1-----查看EEPROM中保存的广告词。返回格式:序号(EEPROM广告词序号):数据"};
- unsigned char code help5 []={"cmd:2*----删除EEPROM中保存的广告词。"};
- unsigned char code help6 []={"cmd:3*----选择需要显示的广告词,“*”为1~5的数字。"};
- unsigned char code help7 []={"cmd:4-----查看当前时间。"};
- unsigned char code help8 []={"cmd:5*----设置当前时间,“*”为时间,格式:2016-01-05-05-05-05-05(2016年周一05月05日05时05分05秒)。"};
- unsigned char code help9 []={"命令格式:*命令$"};
- /*****************************************************
- 不同命令下的串口提示信息
- *****************************************************/
- unsigned char code uart_save_ad []={"写入广告词成功!"};
- unsigned char code uart_show_ad []={"EEPROM中的广告词:"};
- unsigned char code uart_set_ad []={"选择广告词成功!"};
- unsigned char code uart_dele_ad1 []={"EEPROM中无广告词可删!"};
- unsigned char code uart_dele_ad2 []={"删除广告词成功!"};
- unsigned char code uart_show_time []={"当前时间为:"};
- unsigned char code uart_set_time []={"设置时间成功!"};
- /*****************************************************
- 函数名:timer0_uart_init
- 功能:定时器0、串口初始化
- 参数:void
- 返回值:void
- 变量:
- *****************************************************/
- void timer0_uart_init()
- {
- //定时器初始化
- TMOD = 0x21;
- //初始化化定时1ms
- TH0 = 0x0FC;
- TL0 = 0x066;
- //EA = 1;
- ET0 = 1;
- TR0 = 1;
-
- //串口初始化
- //TMOD=0x20;
- TH1=0xfd;
- TL1=0xfd;
- SM0=0;
- SM1=1;
- RI=0;
- TI=0;
- REN=1;
- ES=1;
- TR1=1;
-
- //开总中断
- EA=1;
- }
- /*****************************************************
- 函数名:send_LF_CR
- 功能:向串口发送回车、换行符
- 参数:void
- 返回值:void
- 变量:
- *****************************************************/
- void send_LF_CR()
- {
- SBUF = 0x0d;
- while(!TI);
- TI=0;
- SBUF = 0x0a;
- while(!TI);
- TI=0;
- }
- /*****************************************************
- 函数名:send_help
- 功能:发送串口命令帮助
- 参数:void
- 返回值:void
- 变量:
- *****************************************************/
- void send_help()
- {
- uint i;
- //发送回车换行
- send_LF_CR();
- //发送help内容
- for(i=0;i<strlen(help1);i++)
- {
- SBUF=help1[i];
- while(!TI);
- TI=0;
- }
- send_LF_CR();
- for(i=0;i<strlen(help2);i++)
- {
- SBUF=help2[i];
- while(!TI);
- TI=0;
- }
- send_LF_CR();
- for(i=0;i<strlen(help3);i++)
- {
- SBUF=help3[i];
- while(!TI);
- TI=0;
- }
- send_LF_CR();
- for(i=0;i<strlen(help4);i++)
- {
- SBUF=help4[i];
- while(!TI);
- TI=0;
- }
- send_LF_CR();
- for(i=0;i<strlen(help5);i++)
- {
- SBUF=help5[i];
- while(!TI);
- TI=0;
- }
- send_LF_CR();
- for(i=0;i<strlen(help6);i++)
- {
- SBUF=help6[i];
- while(!TI);
- TI=0;
- }
- send_LF_CR();
- for(i=0;i<strlen(help7);i++)
- {
- SBUF=help7[i];
- while(!TI);
- TI=0;
- }
- send_LF_CR();
- for(i=0;i<strlen(help8);i++)
- {
- SBUF=help8[i];
- while(!TI);
- TI=0;
- }
- send_LF_CR();
- for(i=0;i<strlen(help9);i++)
- {
- SBUF=help9[i];
- while(!TI);
- TI=0;
- }
- send_LF_CR();
- }
- /*****************************************************
- 函数名:uart_control
- 功能:串口控制函数,执行串口命令
- 参数:void
- 返回值:void
- 变量:
- *****************************************************/
- void uart_control()
- {
- uint i,j;
- if(Flage_Receive_Ok==1)
- {
- ES=0;
- send_LF_CR();
- for(j=0;j<receive_count;j++)
- {
- SBUF=uart_buff[j];
- while(!TI);
- TI=0;
- }
- //接收到的数据为广告数据
- if((uart_buff[0]=='a')&&(uart_buff[1]=='d')&&(uart_buff[3]==':'))
- {
- input=receive_count-4;
-
- for(i=0;i<input;i++)
- store[i]=uart_buff[i+4];
- begin = 0;
- one_save = 0;
- /****************************************************
- 指定保存地址才进行写入到EEPROM,否则只存入显示缓冲区
- uart_buff[2]中的值对应EEPROM的广告保存地址
- *********uart_buff[2]***********EEPROM地址***********
- 1 3
- 2 6
- 3 9
- 4 12
- 5 15
- *****************************************************/
- if(((uart_buff[2]-'0')>=1)&&((uart_buff[2]-'0')<=5))
- {
- i = uart_buff[2]-'0'-1;
-
- if((i<2)||((i==2)&&(input<=88)))
- {
- for(j=0; j< USING_CHAR_NUM; j++)
- eepromBUF[j] = IapReadByte(IAP_ADDRESS+j);
- if((eepromBUF[0]<5)&&(eepromBUF[IAP_ADDRESS+3+i*3]==0))
- eepromBUF[0] = eepromBUF[0]+1;//广告词数加1
- eepromBUF[IAP_ADDRESS+3+i*3] = input;//修改广告词长度
-
- for(j=0;j< input; j++)
- eepromBUF[24+i*200+j] = store[j];
-
- IapEraseSector(IAP_ADDRESS);
- //写入EEPROM
- for(j=0; j< USING_CHAR_NUM; j++)
- IapProgramByte(IAP_ADDRESS+j,eepromBUF[j]);
- }
- else if((i==2)&&(input>88))
- {
- //写第一个扇区
- for(j=0; j< USING_CHAR_NUM; j++)
- eepromBUF[j] = IapReadByte(IAP_ADDRESS+j);
- if((eepromBUF[0]<5)&&(eepromBUF[IAP_ADDRESS+3+i*3]==0))
- eepromBUF[0] = eepromBUF[0]+1;//广告词数加1
- eepromBUF[IAP_ADDRESS+3+i*3] = input;//修改广告词长度
-
- for(j=0;j< 88; j++)
- eepromBUF[424+j] = store[j];
-
- IapEraseSector(IAP_ADDRESS);
- //写入EEPROM
- for(j=0; j< USING_CHAR_NUM; j++)
- IapProgramByte(IAP_ADDRESS+j,eepromBUF[j]);
-
- //写第二个扇区
- for(j=0; j< USING_CHAR_NUM; j++)
- eepromBUF[j] = IapReadByte(IAP_ADDRESS1+j);
-
- for(j=0;j<(input-88); j++)
- eepromBUF[j] = store[j+88];
-
- IapEraseSector(IAP_ADDRESS1);
-
- //写入EEPROM
- for(j=0; j< USING_CHAR_NUM; j++)
- IapProgramByte(IAP_ADDRESS1+j,eepromBUF[j]);
- }
- else if(i>2)
- {
- //写第一个扇区
- for(j=0; j< USING_CHAR_NUM; j++)
- eepromBUF[j] = IapReadByte(IAP_ADDRESS+j);
- if((eepromBUF[0]<5)&&(eepromBUF[IAP_ADDRESS+3+i*3]==0))
- eepromBUF[0] = eepromBUF[0]+1;//广告词数加1
- eepromBUF[IAP_ADDRESS+3+i*3] = input;//修改广告词长度
-
- IapEraseSector(IAP_ADDRESS);
- //写入EEPROM
- for(j=0; j< USING_CHAR_NUM; j++)
- IapProgramByte(IAP_ADDRESS+j,eepromBUF[j]);
-
- EepromWriteByte(i*200+24,store,200);
- }
- }
-
- }
- /***************************************************************
- *******************接收到的数据为命令数据***********************
- 命令数据格式:
- uart_buff[0] uart_buff[1] uart_buff[2] uart_buff[3] uart_buff[4] uart_buff[5~]
- 'c' 'm' 'd' ':' '1-5' "数据"
-
- ----------------------------------------------------------------------------------
- "cmd:1-----查看EEPROM中保存的广告词。"
- "cmd:2*----删除EEPROM中保存的广告词。"
- "cmd:3*----选择需要显示的广告词,“*”为1~5的数字。"
- "cmd:4-----查看当前时间。"
- "cmd:5*----设置当前时间,“*”为时间,格式:2016-1-05-05-05-05-05(2016年周一05月05日05时05分05秒)。"
- ***************************************************************/
- else if((uart_buff[0]=='c')&&(uart_buff[1]=='m')&&(uart_buff[2]=='d')&&(uart_buff[3]==':'))
- {
- //判断命令号,即uart_buff[4]中的内容
- switch(uart_buff[4])
- {
- case '1': //一号命令,发送广告数据
- send_LF_CR();
- for(i=0;i<strlen(uart_show_ad);i++)
- {
- SBUF=uart_show_ad[i];
- while(!TI);
- TI=0;
- }
- ad_index.AD_number = IapReadByte(IAP_ADDRESS);
- if((ad_index.AD_number) > 0)
- {
- for(i=0,j=0;i<5;i++)
- {
- if(IapReadByte(IAP_ADDRESS+3+i*3) !=0)
- {
- (ad_index.addr_buff+j)->addr = (IapReadByte(IAP_ADDRESS+1+i*3)<<8) | IapReadByte(IAP_ADDRESS+2+i*3);
- (ad_index.addr_buff+j)->len_addr = IAP_ADDRESS+3+i*3 ;
- (ad_index.addr_buff+j)->len = IapReadByte(IAP_ADDRESS+3+i*3);
- j++;
- }
- }
- send_LF_CR();
- for(i=0;i<ad_index.AD_number;i++)
- {
- SBUF = i+1+'0';
- while(!TI);
- TI=0;
- SBUF = '(';
- while(!TI);
- TI=0;
- SBUF = (((ad_index.addr_buff+i)->len_addr)/3)+'0';
- while(!TI);
- TI=0;
- SBUF = ')';
- while(!TI);
- TI=0;
- SBUF = ':';
- while(!TI);
- TI=0;
- for(j=0;j<((ad_index.addr_buff+i)->len);j++)
- {
- SBUF = IapReadByte(((ad_index.addr_buff+i)->addr)+j);
- while(!TI);
- TI=0;
- }
- send_LF_CR();
- }
- }
- break;
- case '2'://2号命令删除第uart_buff[5]条广告词
- ad_index.AD_number = IapReadByte(IAP_ADDRESS);
- if(ad_index.AD_number > 0)
- {
- for(i=0,j=0;i<5;i++)
- {
- if(IapReadByte(IAP_ADDRESS+3+i*3) !=0)
- {
- (ad_index.addr_buff+j)->addr = (IapReadByte(IAP_ADDRESS+1+i*3)<<8) | IapReadByte(IAP_ADDRESS+2+i*3);
- (ad_index.addr_buff+j)->len_addr = IAP_ADDRESS+3+i*3 ;
- (ad_index.addr_buff+j)->len = IapReadByte(IAP_ADDRESS+3+i*3);
- j++;
- }
- }
-
- for(i=0;i<ad_index.AD_number;i++)
- {
- if(((ad_index.addr_buff+i)->len_addr) == (uart_buff[5]-'0')*3)
- {
- (ad_index.addr_buff+i)->len = 0;
- break;
- }
-
- }
- (ad_index.AD_number)--;
-
- EepromWriteByte((ad_index.addr_buff+i)->len_addr,(uchar *)(&((ad_index.addr_buff+i)->len)),1);//广告词长度清零
- EepromWriteByte(IAP_ADDRESS,(uchar *)(&(ad_index.AD_number)),1);//写入广告总数
- send_LF_CR();
- for(i=0;i<strlen(uart_dele_ad2);i++)
- {
- SBUF=uart_dele_ad2[i];
- while(!TI);
- TI=0;
- }
- }
- else
- {
- send_LF_CR();
- for(i=0;i<strlen(uart_dele_ad1);i++)
- {
- SBUF=uart_dele_ad1[i];
- while(!TI);
- TI=0;
- }
- }
- break;
- case '3': //3号命令选择显示第uart_buff[5]条广告词
- for(i=0;i<((ad_index.addr_buff+(uart_buff[5]-'0')-1)->len);i++)
- store[i] = IapReadByte(((ad_index.addr_buff+(uart_buff[5]-'0')-1)->addr)+i);
- input = (ad_index.addr_buff+(uart_buff[5]-'0')-1)->len;
- send_LF_CR();
- for(i=0;i<strlen(uart_set_ad);i++)
- {
- SBUF=uart_set_ad[i];
- while(!TI);
- TI=0;
- }
- end =0;
- begin = 0;
- page = 0;
- AD_delete = 0;
- page_data = 0;
- WriteCommandLCD(0x01,1);
- function = 0;
-
- break;
- case '4': //4号命令查看当前时间
- send_LF_CR();
- for(i=0;i<strlen(uart_show_time);i++)
- {
- SBUF=uart_show_time[i];
- while(!TI);
- TI=0;
- }
- SBUF = 2 +'0';
- while(!TI);
- TI=0;
- SBUF = '0';
- while(!TI);
- TI=0;
- for(i=0;i<7;i++)
- {
- if(i!= 1)
- {
- SBUF = (TIME[6-i]>>4)+'0';
- while(!TI);
- TI=0;
- SBUF = (TIME[6-i]&0x0f)+'0';
- while(!TI);
- TI=0;
- SBUF = TimeType[13-i*2-1];
- while(!TI);
- TI=0;
- SBUF = TimeType[13-i*2];
- while(!TI);
- TI=0;
- }
- else{
- SBUF = TimeType[13-i*2-1];
- while(!TI);
- TI=0;
- SBUF = TimeType[13-i*2];
- while(!TI);
- TI=0;
-
- SBUF = TimeWeekType[(TIME[6-i]-1)*2];
- while(!TI);
- TI=0;
- SBUF = TimeWeekType[(TIME[6-i]-1)*2+1];
- while(!TI);
- TI=0;
- }
- }
- break;
- case '5': //5号命令设置时间,时间数据在uart_buff[5~26],格式:2016-1-05-05-05-05-05
-
- for(i=0;i<7;i++)
- {
- TIME[i] = ((uart_buff[25-i*3]-'0')<<4)+(uart_buff[26-i*3]-'0');
- }
- Ds1302Init();
-
- send_LF_CR();
- for(i=0;i<strlen(uart_set_time);i++)
- {
- SBUF = uart_set_time[i];
- while(!TI);
- TI=0;
- }
-
- break;
- default:
- break;
- }
- }
- else if((uart_buff[0]=='h')&&(uart_buff[1]=='e')&&(uart_buff[2]=='l')&&(uart_buff[3]=='p'))
- {
- send_help();
- }
- //清楚uart_buff[1~4]内容
- for(i=0;i<4;i++)
- uart_buff[i]=0;
- //清楚接收标志位
- receive_count = 0;
- Flage_Receive_Ok = 0;
- ES=1;
- }
- }
复制代码 |