给大家分享一个单片机通过【VGA控制板】控制52寸大尺寸显示器程序,给大家学习研究!因为字数有限制,只能给前面的串口通讯和协议程序了。
单片机演示程序和通讯协议, #include<Atmel/AT89x52.H> //定义颜色数据类型(可以是数据结构,有什么不明白的可以加我QQ交流2321069078) //************************************************************* void InitUART(void) //串口初始化使用22.1184M晶体 { SCON = 0x50; //选择模式1,8位数据格式,使能UART PCON |= 0x80; //波特率加倍 TMOD =TMOD| 0x20; //定时器1:模式2 ,自动装载初值 //波特率计算公式:TH1=TL1=256-(2*22.1184*1000000)/(32*12*baud) //若选115200波特率则TH1=TL1=256-(2*22.1184*1000000)/(32*12*115200)=0xff //若选19200波特率则TH1=TL1=256-(2*22.1184*1000000)/(32*12*19200)=0xfa TH1 = 0xfa; TL1 = 0xfa; TR1 = 1; //定时器1计数使能 REN = 1; //允许串口接受使能 } /* ****************************************************************** * * 名称: write_byte() * 功能: 向串口发送一个字节的数据 * 入口参数:i为待发送的字节数据 ****************************************************************** */ void UART_SendByte(unsigned char i) { SBUF=i; //发送本次数据 while(TI==0){}//等待发送完毕 TI=0; } void SetVariable(unsigned int adr,unsigned short nBytes,unsigned char *m_VarP) { unsigned char temp; unsigned short m_CheckCRC;//命令校验 UART_SendByte(0x81); //开始,固定,一个字节 UART_SendByte(0x0); //命令类型,设置变量 UART_SendByte(0x2); //接收方的设备号 m_CheckCRC=0x81+0x0+0x2; temp=adr&0xff; UART_SendByte(temp); //地址1 m_CheckCRC=m_CheckCRC+temp; temp=(adr>>8)&0xff; UART_SendByte(temp); //地址2 m_CheckCRC=m_CheckCRC+temp; temp=(adr>>16)&0xff; UART_SendByte(temp); //地址3 m_CheckCRC=m_CheckCRC+temp; temp=(adr>>24)&0xff; UART_SendByte(temp); //地址4 m_CheckCRC=m_CheckCRC+temp; temp=(nBytes)&0xff; UART_SendByte(temp); //个数低8位 m_CheckCRC=m_CheckCRC+temp; temp=(nBytes>>8)&0xff; UART_SendByte(temp); //个数高8位 m_CheckCRC=m_CheckCRC+temp; while(nBytes!=0) { temp=*m_VarP; UART_SendByte(temp); m_CheckCRC=m_CheckCRC+temp; nBytes--; m_VarP++; } UART_SendByte(m_CheckCRC); UART_SendByte(m_CheckCRC>>8); } |