打印

请高手指教下我这段程序的错误之处

[复制链接]
2001|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
limanli20|  楼主 | 2009-5-12 07:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include"sfr_r82b.h"
#define uchar unsigned char
#define uint unsigned int
#define Data_HT1622  p1_addr.bit.b0
#define WR_HT1622    p0_addr.bit.b0
#define CS_HT1622    p0_addr.bit.b1
#define beiguang1622 p6_addr.bit.b0
//HT1622初始化 

void Delay_us(uchar a)
{
    uchar z;
    for(z=a;z>0;z--);
    }

//HT1622写入脉冲 
void LCD_CLK(void) 

        Delay_us(10); 
        WR_HT1622 = 0; 
        Delay_us(10); 
        WR_HT1622 = 1; 
        Delay_us(10); 

//向HT1622写命令 
void LCD_WRCMD(uint dat) 

        uchar i; 
        CS_HT1622 = 0;                                
        Delay_us(3);                                                             
        for (i=0;i<12;i++) 
        { 
                if (dat&0x8000==0x800) 
                { 
                        Data_HT1622 = 1; 
                } 
                else 
                { 
                        Data_HT1622 = 0; 
                } 

                dat <<= 1; 
                LCD_CLK(); 
        } 
        Delay_us(3); 
        CS_HT1622 = 1; 

//向HT1622写数据 
void LCD_WRDATA(uint date) 

    uchar j;
    CS_HT1622 = 0;                                
    Delay_us(3); 
       for (j=0;j<13;j++) 
        { 
                if (date&0x8000==0x800) 
                { 
                        Data_HT1622 = 1; 
                } 
                else 
                { 
                        Data_HT1622 = 0; 
                } 

                date <<= 1; 
                LCD_CLK(); 
        }                          
      Delay_us(3); 
      CS_HT1622 = 1;
       

//初始化
void LCD_Init(void) 

        pd6_addr.bit.b0=1;
        pd1_addr.bit.b7=1;
        pd0_addr.bit.b0=1;
        pd0_addr.bit.b1=1;
        pd1_addr.bit.b0=1;    
        LCD_WRCMD(0x8000); 
        LCD_WRCMD(0x8020);
        LCD_WRCMD(0x8300); 
        LCD_WRCMD(0x8040); 
        LCD_WRCMD(0x8060);
        LCD_WRCMD(0x0000);          

void main()
{
    LCD_Init();
    beiguang1622=1;
    if(p1_addr.bit.b7==1)
    {
        Delay_us(3);
        if(p1_addr.bit.b7==1)
        {
           LCD_WRDATA(0xBCF8);    
        }
    }
    else
    {
      LCD_WRDATA(0xBC80);
    }
    
    
}

相关帖子

沙发
limanli20|  楼主 | 2009-5-12 07:11 | 只看该作者

附加:

我是个刚学单片机的新手,想用1622显示芯片来段式显示液晶,可就是显示不了。对照液晶规格书,发送的数据是应该可以显示的

使用特权

评论回复
板凳
九浩| | 2009-5-12 21:30 | 只看该作者

我也是新手:提点个人见解!

我用过1602液晶显示芯片,写入数据之后,需要延时一会,再写入脉冲,如果延时的时间不够,就会造成数据丢失或数据根本无法写入!
可把延时程序改成:
void delay(uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}
不妨试试!

使用特权

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

本版积分规则

5

主题

6

帖子

0

粉丝