21ic电子技术开发论坛 单片机与嵌入式系统 侃单片机论坛 串口与5110液晶屏不显示的问题
发新帖我要提问
返回列表
打印
[AVR单片机]

串口与5110液晶屏不显示的问题

[复制链接]
1472|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
SD10A|  楼主 | 2015-3-29 18:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过电脑测试串口通讯发送单个数字是没问题,但是要把发送的数据在5110显示却做不到 一直显示的W  我想是不是发送的数据类型不对  或者应该怎么解决呢?





#include "iom16v.h"
#include "macros.h"
#include "E:\AVR学习板\串口-5110试验\m5110.c"
#define  uchar unsigned char
#define  uint  unsigned int
//波特率,晶振
#define BAUD 19200                                       
#define FXTAL 12000000


//串口接收完毕中断触发声明
#pragma interrupt_handler USART_Received_Ir:12


//变量定义:接收缓冲变量,接收标志位
unsigned int RX_Buffer=0,RX_Flag=0;


//函数声明
void USART_Send(unsigned char);


//串口IO初始化函数
void USART_IO_Init()
{
                DDRD|=BIT(PD1); //PD1:TX为输出状态
}


//串口初始化函数
void USART_Init()
{
                unsigned int Temp;       
                USART_IO_Init();                //串口IO初始化函数调用
       
                UCSRA=0x00;                                                                        //串口控制器A清零
                UCSRB=0x00;                                                                        //串口控制器B清零
                UCSRC|=BIT(URSEL)|BIT(UCSZ1)|BIT(UCSZ0)|BIT(UPM1)|BIT(UPM0);        //选择USCRC,同膊讲僮鳎琂I检验危,1个停止位,八位数据
       
                Temp=(FXTAL/BAUD/16)-1;                        //求出9600波特率的赋值
                UBRRH=((Temp>>8)&0x00ff);                //波特率寄存器高八位赋值
                UBRRL=(Temp&0x00ff);                        //波特率寄存器低八位赋值
       
                //UBRR=71;        //从手册中直接取得赋值,9600kbps
               
                UCSRB|=BIT(TXEN)|BIT(RXEN)|BIT(RXCIE);        //发送使能,接收使能,接收完毕中断使能
                SREG|=BIT(7);                //全局中断使能
}


//串口发送函数
void USART_Send(unsigned char Data)
{
                while(!(UCSRA&(BIT(UDRE))));                //数据寄存器UDR是否为空?
                UDR=Data;                                                        //UDR赋值
                while(!(UCSRA&(BIT(TXC))));                        //数据是否已经发送完毕?
                UCSRA|=BIT(TXC);                                        //清除发送完毕标志位
}



//主函数
void main()
{
               
                lcd5110_init();
                display_english7X14(1,2,LIB[17]);
                USART_Init();
                while(1)
                {
                        if(RX_Flag)
                        {
                                RX_Flag=0;
                                //USART_Send(RX_Buffer);
                       
                         switch (RX_Buffer)//比较收到的数据
                                                                          {
                                                                         case 0:                display_english7X14(1,1,LIB[16]);break;//收到是0  就显示0  display_english7X14(1,1,LIB[16])是5110显示函数
                                                                         case 1:                display_english7X14(1,1,LIB[17]);break;
                                                                         case 2:                display_english7X14(1,1,LIB[18]);break;
                                                                         case 3:                display_english7X14(1,1,LIB[19]);break;
                                                                         case 4:                display_english7X14(1,1,LIB[20]);break;
                                                                         case 5:                display_english7X14(1,1,LIB[21]);break;
                                                                         case 6:                display_english7X14(1,1,LIB[22]);break;
                                                                         case 7:                display_english7X14(1,1,LIB[23]);break;
                                                                         case 8:                display_english7X14(1,1,LIB[24]);break;
                                                                         case 9:       display_english7X14(1,1,LIB[25]);break;
                                                                        default:           display_english7X14(1,1,LIB[86]);//没有匹配的 就显示字符W
                                                                         }
                                                                         USART_Send(RX_Buffer);
                }
                       
                }
}





//串口接收完毕中断函数
void USART_Received_Ir()
         {
                UCSRB&=~BIT(RXCIE);                //接收完毕中断不使能
               
                if(UCSRA|BIT(PE))                //如果出现奇偶校验错误
                        {UCSRA|=BIT(UDRE);//清空数据寄存器
                        //RX_Buffer=UDR;        //
                        }
               
                RX_Buffer=UDR;                        //读取UDR的数据
                RX_Flag=1;                                //接收标志位置一
                UCSRB|=BIT(RXCIE);                //接收完毕中断使能
        }



相关帖子

沙发
huangxz| | 2015-4-4 14:31 | 只看该作者
5110是什么东西啊

使用特权

评论回复
板凳
SD10A|  楼主 | 2015-4-4 21:13 | 只看该作者
huangxz 发表于 2015-4-4 14:31
5110是什么东西啊

就是液晶屏

使用特权

评论回复
地板
huangxz| | 2015-4-4 22:18 | 只看该作者

看你这题目跟5110没有什么关系。
先确定一下串口波特率是否正确,

使用特权

评论回复
5
SD10A|  楼主 | 2015-4-5 16:53 | 只看该作者
huangxz 发表于 2015-4-4 22:18
看你这题目跟5110没有什么关系。
先确定一下串口波特率是否正确,

怎么没关系?我要把串口发送的数据显示在5110上面,现在是串口是正常的,但是显示不了

使用特权

评论回复
6
yklstudent| | 2015-4-5 17:04 | 只看该作者
你确认串口无问题,那就找5110驱动代码或者硬件部分的问题;贴一段串口部分的代码,有毛用

使用特权

评论回复
7
wh13651| | 2015-4-8 13:18 | 只看该作者
我觉得你可以用液晶显示一下RX_Buffer,看看他到底返回了什么

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
SD10A + 3 这个是很好的思路 我试验一下
8
supaopcb| | 2015-4-15 09:38 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

169

帖子

4

粉丝
关闭 热门推荐
快速回复 在线客服 返回列表 返回顶部