[CAN-bus/DeviceNet] 串口控制液晶

[复制链接]
2462|2
 楼主| ljt4810 发表于 2007-6-5 11:10 | 显示全部楼层 |阅读模式
  我想通过串口向液晶里写字,但不知道如何从串口读数据.<br />如:uint8&nbsp;str[]={0x30,0x31,0x32}&nbsp;&nbsp;&nbsp;&nbsp;<br />  for(i=0;i&lt3;i++);<br />  wr_lcd&nbsp;(dat,str]);液晶上显012,如果从EasyARM(上位机软件)上发送0x30,0x31,0x32&nbsp;该怎样编程呢?&nbsp;麻烦提示一下!&nbsp;
 楼主| ljt4810 发表于 2007-6-5 20:56 | 显示全部楼层

杂没人回呢?

typedef&nbsp;struct&nbsp;UartMode<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;datab;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;字长度,5/6/7/8可选<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;stopb;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;停止位,1/2可选<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;parity;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;奇偶校验位,0-无校验,1-奇校验,2-偶校验<br />}UARTMODE;<br /><br />uint8&nbsp;rcv_buf[8];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;UART0数据接收缓冲区<br />volatile&nbsp;uint8&nbsp;rcv_new;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;接收新数据标志<br /><br />/*<br />*********************************************************************************************************<br />**&nbsp;函数名称&nbsp;:IRQ_UART0()<br />**&nbsp;函数功能&nbsp;:串口0接收中断服务程序<br />**&nbsp;入口参数&nbsp;:无<br />**&nbsp;出口参数&nbsp;:无<br />*********************************************************************************************************<br />*/<br />void&nbsp;__irq&nbsp;IRQ_UART0&nbsp;(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((U0IIR&nbsp;&&nbsp;0x0F)&nbsp;==&nbsp;0x04)&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rcv_new&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置接收到新的数据标志<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=0;&nbsp;i&lt8;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;rcv_buf&nbsp;=&nbsp;U0RBR;&nbsp;&nbsp;//&nbsp;读取FIFO的数据,并清除中断&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr&nbsp;=&nbsp;0x00;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;中断处理结束<br />}<br /><br />/*<br />*********************************************************************************************************<br />**&nbsp;函数名称&nbsp;:UART0_SendByte()<br />**&nbsp;函数功能&nbsp;:向串口0发送1字节数据<br />**&nbsp;入口参数&nbsp;:dat&nbsp;&nbsp;&nbsp;&nbsp;要发送的数据<br />**&nbsp;出口参数&nbsp;:无<br />*********************************************************************************************************<br />*/<br />void&nbsp;UART0_SendByte&nbsp;(uint8&nbsp;dat)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;U0THR&nbsp;=&nbsp;dat;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;要发送的数据<br />}<br /><br />/*<br />*********************************************************************************************************<br />**&nbsp;函数名称&nbsp;:UART0_SendBuf()<br />**&nbsp;函数功能&nbsp;:向串口发送8字节数据<br />**&nbsp;入口参数&nbsp;:无<br />**&nbsp;出口参数&nbsp;:无<br />*********************************************************************************************************<br />*/<br />void&nbsp;UART0_SendBuf&nbsp;(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=0;&nbsp;i&lt8;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UART0_SendByte(rcv_buf);<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;((U0LSR&nbsp;&&nbsp;0x20)&nbsp;==&nbsp;0);&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;等待数据发送完毕<br />}<br /><br />/*<br />*********************************************************************************************************<br />**&nbsp;函数名称&nbsp;:UART0_Init()<br />**&nbsp;函数功能&nbsp;:串口初始化,设置工作模式和波特率。<br />**&nbsp;入口参数&nbsp;:baud&nbsp;&nbsp;&nbsp;&nbsp;波特率<br />**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;&nbsp;&nbsp;&nbsp;模式设置(UARTMODE数据结构)<br />**&nbsp;出口参数&nbsp;:1-初始化成功,&nbsp;&nbsp;0-初始化失败<br />*********************************************************************************************************<br />*/<br />int8&nbsp;UART0_Init&nbsp;(uint32&nbsp;baud,&nbsp;UARTMODE&nbsp;set)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint32&nbsp;bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;参数过滤&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((baud&nbsp;==0&nbsp;)&nbsp;||&nbsp;(baud&nbsp;&gt&nbsp;115200))&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((set.datab&nbsp;&lt5)&nbsp;||&nbsp;(set.datab&nbsp;&gt&nbsp;8))&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((set.stopb&nbsp;==&nbsp;0)&nbsp;||&nbsp;(set.stopb&nbsp;&gt&nbsp;2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(set.parity&nbsp;&gt&nbsp;4)&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;设置串口波特率&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;U0LCR&nbsp;=&nbsp;0x80;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;DLAB&nbsp;=&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;bak&nbsp;&nbsp;&nbsp;=&nbsp;(Fpclk&nbsp;&gt&gt&nbsp;4)&nbsp;/&nbsp;baud;<br />&nbsp;&nbsp;&nbsp;&nbsp;U0DLM&nbsp;=&nbsp;bak&nbsp;&gt&gt&nbsp;8;<br />&nbsp;&nbsp;&nbsp;&nbsp;U0DLL&nbsp;=&nbsp;bak&nbsp;&&nbsp;0xFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;设置串口模式&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;bak&nbsp;&nbsp;&nbsp;=&nbsp;set.datab&nbsp;-&nbsp;5;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置字长<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(set.stopb&nbsp;==&nbsp;2)&nbsp;&nbsp;&nbsp;&nbsp;bak&nbsp;|=&nbsp;0x04;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;判断是否为2位停止位<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(set.parity&nbsp;!=&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set.parity&nbsp;=&nbsp;set.parity&nbsp;-&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bak&nbsp;|=&nbsp;0x08;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;bak&nbsp;|=&nbsp;set.parity&nbsp;&lt&lt&nbsp;4;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置奇偶校验<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;U0LCR&nbsp;=&nbsp;bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(1);<br />}<br /><br /><br />/*<br />*********************************************************************************************************<br />**&nbsp;函数名称&nbsp;:main()<br />**&nbsp;函数功能&nbsp;:从串口UART0接收字符串&quot;ABCDEFGH&quot;,并发送回上位机显示。<br />**&nbsp;调试说明&nbsp;:需要PC串口显示终端软件如EasyARM.exe。<br />*********************************************************************************************************<br />*/<br />int&nbsp;main&nbsp;(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;UARTMODE&nbsp;set;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;set.datab&nbsp;&nbsp;=&nbsp;8;<br />&nbsp;&nbsp;&nbsp;&nbsp;set.stopb&nbsp;&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;set.parity&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;rcv_new&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;PINSEL0&nbsp;=&nbsp;0x00000005;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置I/O连接到UART0<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;UART0_Init(115200,&nbsp;set);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;串口初始化<br />&nbsp;&nbsp;&nbsp;&nbsp;U0FCR&nbsp;=&nbsp;0x81;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;使能FIFO,并设置触发点为8字节<br />&nbsp;&nbsp;&nbsp;&nbsp;U0IER&nbsp;=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;允许RBR中断,即接收中断<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IRQEnable();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;使能IRQ中断<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;使能UART0中断&nbsp;*/<br />&nbsp;VICIntSelect&nbsp;=&nbsp;0x00000000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置所有的通道为IRQ中断<br />&nbsp;VICVectCntl0&nbsp;=&nbsp;0x20&nbsp;|&nbsp;0x06;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;UART0分配到IRQ&nbsp;slot0,即最高优先级<br />&nbsp;VICVectAddr0&nbsp;=&nbsp;(uint32)IRQ_UART0;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置UART0向量地址<br />&nbsp;VICIntEnable&nbsp;=&nbsp;1&nbsp;&lt&lt&nbsp;0x06;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;使能UART0中断<br /><br />&nbsp;&nbsp;init_lcd();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//液晶初始化<br />&nbsp;&nbsp;&nbsp;delay1&nbsp;(10)&nbsp;;<br />&nbsp;&nbsp;clrram&nbsp;();          //清屏<br />&nbsp;&nbsp;delay1&nbsp;(50)&nbsp;;<br />&nbsp;wr_lcd&nbsp;(comm,0x80);      //液晶起始行<br />&nbsp;delay1&nbsp;(10)&nbsp;;<br />if&nbsp;(rcv_new&nbsp;==&nbsp;1)<br />&nbsp;rcv_new&nbsp;=0;<br />&nbsp;&nbsp;for(i=0;i&lt8;i++)<br />&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;wr_lcd&nbsp;(dat,rcv_buf);<br />&nbsp;delay1&nbsp;(10)&nbsp;;&nbsp;<br />}<br />}<br />大家过来看看什么地方错了!<br /><br /><br />
 楼主| ljt4810 发表于 2007-6-8 15:02 | 显示全部楼层

没人做过串口吗?

  难道没人做过串口吗?<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

19

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部