打印
[AVR单片机]

12864串口通信,没有显示,能麻烦帮我看一下吗

[复制链接]
1039|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sing146|  楼主 | 2014-10-13 21:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<iom16v.h>
#include<macros.h>

#define RS_CLR        PORTC&=~(1 << 5)         //RS置低//片选信号
#define RS_SET        PORTC|=(1 <<5)         //RS置高

#define RW_CLR        PORTC&=~(1 << 6)        //RW置低//数据信号
#define RW_SET        PORTC|=(1 <<6)        //RW置高

#define EN_CLR        PORTC&=~(1 << 7)       //E置低//时钟信号
#define EN_SET        PORTC|=(1 << 7)        //E置高

#define PSB_CLR        PORTC&=~(1 <<0)      //PSB置低,串口方式//并行、串行选择信号
#define PSB_SET        PORTC|=(1 << 0)        //PSB置高,并口方式

#define RST_CLR        PORTC&=~(1 << 1)       //RST置低 //复位信号
#define RST_SET        PORTC|=(1 << 1)         //RST置高

/************************************************************
                      延时函数
************************************************************/
void delay_us(unsigned int us)
{
  unsigned int i;
  for(i=0;i<us;i++)
  asm("nop");
}

void delay_ms(unsigned int ms)
{
  unsigned int i,j;
  for(i=0;i<ms;i++)
  for(j=0;j<1141;j++);
}
/*************************************************************
                               初始化程序
************************************************************/
void Port_Init(void)
{
   PORTC==0X00;
   DDRC==0XFF;
   PSB_CLR;                  //液晶串口方式
   RST_SET;                  //复位脚RST置高
   TIMSK = 0x00;
   MCUCR = 0x00;
   GICR  = 0x00;  
}
/********************************************************************
* 名称 : sendbyte()
* 功能 : 按照液晶的串口通信协议,发送数据
* 输入 : data
* 输出 : 无
***********************************************************************/
void sendbyte(unsigned char data)
{
        unsigned int i;
        for(i=0; i<8; i++)
        {
                if((data<<i)&(0X80))
                {
                    RW_SET;
                }
                else
                {
                        RW_CLR;
                }
                delay_us(1);
                //EN_CLR;
                //delay_us(1);
                //EN_SET;
                //delay_us(1);
        }
}

/********************************************************************
* 名称 : write_com()
* 功能 : 写串口指令,分三个字节写完
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void write_com(unsigned char cmdcode)
{
        RS_SET;
        sendbyte(0XF8);
        sendbyte(cmdcode&(0XF0));
        sendbyte((cmdcode<<4)&0XF0);
        RS_CLR;
}

/********************************************************************
* 名称 : write_data()
* 功能 : 写串口指令
* 输入 : data
* 输出 : 无
***********************************************************************/
void write_data(unsigned char data)
{
        RS_SET;
        sendbyte(0XFA);
        sendbyte(data & 0XF0);
        sendbyte((data << 4) & 0XF0);
        RS_CLR;
}


/********************************************************************
*                显示屏初始化函数
********************************************************************/
void lcd_init(void)
{
        RST_CLR;
        delay_ms(100);
        RST_SET;
        delay_ms(20);
        write_com(0X30);
        delay_ms(5);
        write_com(0X0D);
        delay_ms(5);
        write_com(0X06);
        delay_ms(5);
        write_com(0X80);
        delay_ms(5);
        write_com(0X0C);
        delay_ms(50);
}

void LCD_clear(void)
{
        write_com(0X01);
        delay_ms(50);
}

void show(unsigned char *s)
{
        while(*s > 0)
    {
                write_data(*s);
                s++;
                delay_ms(50);
    }
}

void Test(void)
{
        //write_com(0x03);//
        //delay_ms(50);
        write_com(0X80);//写资料到RAM
        delay_ms(100);
        show("HAN");
        delay_ms(100);
        write_com(0X90);
        delay_ms(100);
        show("哈哈");
        delay_ms(100);
        write_com(0X89);
        delay_ms(100);
        show("          ");
        delay_ms(100);
        write_com(0X98);
        delay_ms(100);
        show("    搞定");
        delay_ms(100);
}

void  main(void)
{
    Port_Init();                                  //系统初始化,设置IO口属性
        delay_ms(100);                                //延时100ms
        lcd_init();                                   //液晶参数初始化设置
        LCD_clear();                                  //清屏
        Test();                                      //显示汉字
}

相关帖子

沙发
wangch_sh| | 2014-10-15 14:38 | 只看该作者
1.硬件问题
2.时序问题

使用特权

评论回复
板凳
ningling_21| | 2014-10-18 16:30 | 只看该作者
对比度调好了吗?

使用特权

评论回复
地板
Mcuzone_xyz| | 2014-10-20 13:55 | 只看该作者
12864总线速度太慢

使用特权

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

本版积分规则

5

主题

16

帖子

0

粉丝