搜索
bottom↓
回复: 10

求助:atmega16驱动ht1622 lcd一直点不亮,帮忙看一下我错在哪了?

[复制链接]

出0入0汤圆

发表于 2010-5-13 22:58:31 | 显示全部楼层 |阅读模式
/ht1622 的相关定义与函数
// CS   接在ATMEGA16的PA5上
// WR   接在ATMEGA16的PA6上
// DATA 接在ATMEGA16的PA7上

#define uchar unsigned char
//#define BIAS 0x52     //0b1000 0101 0010  1/3bais 4duty 0x52
#define BIAS 0x2e       //0b1000 0010 1110  1/4bias 8duty 0x2e
#define SYSDIS 0X00   //0b1000 0000 0000  关系统振荡器和LCD偏压发生器
#define LCDOFF 0X04   //0b1000 0000 0100  关LCD偏压
#define LCDON 0X06    //0b1000 0000 0110  打开LCD偏压
#define SYSEN 0X02    //0b1000 0000 0010 打开系统振荡器
#define XTAL 0x28     //0b1000 0010 1000 外部接时钟
#define RC256 0X30    //0b1000 0011 0000  内部时钟
#define TONEON 0X12   //0b1000 0001 0010  打开声音输出
#define TONEOFF 0X10  //0b1000 0001 0000 关闭声音输出
#define WDTDIS 0X0A   //0b1000 0000 1010  禁止看门狗

#define LCD_CS       PORTA&=~(1<<5)        //
#define LCD_CSH()    PORTA|=(1<<5)        //
#define LCD_CSL()    PORTA&=~(1<<5)        //
//#define LCD_RD        P4DIR|=BIT5        //
//#define LCD_RDH()    P4OUT|=BIT5        //
//#define LCD_RDL()    P4OUT&=~BIT5        //
#define LCD_WR       PORTA&=~(1<<6)        //06.03.10   BY TZQ
#define LCD_WRH()    PORTA|=(1<<6)       //
#define LCD_WRL()    PORTA&=~(1<<6)        //
#define LCD_DATA     PORTA&=~(1<<7)        //
#define LCD_DATAH()  PORTA|=(1<<7)        //
#define LCD_DATAL()  PORTA&=~(1<<7)        //
//#define LCD_DIN        P4DIR&=~BIT3        //
//#define LCD_DTST    P4IN&BIT3        //LCD引脚

//uchar  Tab1[32]={0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
                      //    0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10};
uchar  Tab2[32]={0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
                           0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20};
//uchar  Tab3[32]={0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
                        //   0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40};
uchar  Tab4[32]={0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
                           0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80};


//########### ht1622的子程序

//延时函数
void s_ms(unsigned int t)
{
    for(;t>1;t--)
    {
    }
}

/*************************************************
*原型:void SendBit_1622(unsigned char bit,unchar cnt)
*功能:LCD送数
*说明:LCD-HT1622 数据在高锁存
*参数:bit
*返回:无
**************************************************/
void SendBit_1622(uchar data,uchar cnt) //data 的高cnt 位写入HT1622,高位在前
{
        uchar i;
        for(i =0; i <cnt; i ++)
        {
                if((data&0x80)==0) LCD_DATAL();
                else LCD_DATAH();
                LCD_WRL();
                s_ms(60);
                LCD_WRH();
                data<<=1;
        }
}


void SendDataBit_1622(uchar data,uchar cnt) //data 的低cnt 位写入HT1622,低位在前
{
        uchar i;
        for(i =0; i <cnt; i ++)
        {
                if((data&0x01)==0)  LCD_DATAL();
                else LCD_DATAH();
                LCD_WRL();
                s_ms(60);
                LCD_WRH();
                data>>=1;
        }
}

void SendCmd(uchar command)
{
        LCD_CSL();
        //s_ms(10);
        SendBit_1622(0x80,3); //写入标志码"100"
        SendBit_1622(command,9); //写入9 位数据,其中前8 位为command 命令,最后1 位任意
        //s_ms(10);
        LCD_CSH();
}

void Write_1622(uchar addr,uchar data)
{
        LCD_CSL();
        //s_ms(10);
        SendBit_1622(0xa0,3); //写入标志码"101"
        SendBit_1622(addr<<2,6); //写入6 位addr
        SendDataBit_1622(data,4); //写入data 的低4 位
        //s_ms(10);
        LCD_CSH();
}

void WriteAll_1622(uchar addr,uchar *p,uchar cnt)
{
        uchar i;
        LCD_CSL();
        //s_ms(10);
        SendBit_1622(0xa0,3); //写入标志码"101"
        SendBit_1622(addr<<2,6); //写入6 位addr
        for(i =0; i <cnt; i ++,p++) //连续写入数据
        {
                SendDataBit_1622(*p,8);
        }
        //s_ms(10);
        LCD_CSH();
}



#include<avr/io.h>
#include"ht1622.h"

#define uchar unsigned char
#define uint unsigned int




int main()
{
        uchar a[10];
        a[0]=0x21;a[1]=0x43;a[2]=0x65;a[3]=0x87;a[4]=0xa9;
        DDRA=0xff;         //端口A为输出
        PORTA=0xFF;        //关闭所有LED
       
        LCD_WRH();
        LCD_DATAH();
        LCD_CSL();
        s_ms(100);
        LCD_CSH();

        SendCmd(BIAS); //设置偏压和占空比
        SendCmd(SYSEN); //打开系统振荡器
        SendCmd(LCDON); //打开LCD 偏压发生器
        Write_1622(0x09,0x01); //在地址0x09 处写入数据0x01
        WriteAll_1622(0,a,5); //在起始地址为0 处连续写入5 个字节数据
        // a为写入数据的起始地址,5 为写入的字节数
        // SendCmd(LCDOFF); //关闭LCD 显示



        while(1)
        {
          //PORTD=~led;  //端口输出led值
          //if (led==128)
          //   led=1;
          // led=led*2;  //向左移动一位
          //led<<=1;    //2010-04-22用移位方法测试
          //s_ms(65535); //延时
          //s_ms(65535);
          //s_ms(65535);
          //s_ms(65535);
        }
        return 0;
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2010-5-13 23:00:15 | 显示全部楼层
m16主频16MHz,pa5--cs pa6--wr  pa7-data,就是点不亮,愁死我了

出0入0汤圆

 楼主| 发表于 2010-5-13 23:02:39 | 显示全部楼层
bias 的设置没找到资料,自己猜的,不知道有没有影响。

出0入0汤圆

 楼主| 发表于 2010-5-14 07:47:21 | 显示全部楼层
各位请关心一下,弄了好几天了,实在是没头绪。

出0入0汤圆

发表于 2010-5-14 07:58:54 | 显示全部楼层
樓主,若需要幫忙,請聯系我,QQ:8 5 9 2 0 7 6 1 1。確定可以幫你點亮!

出0入0汤圆

 楼主| 发表于 2010-5-15 16:09:31 | 显示全部楼层
在gmolzc 的帮助下,问题已经解决,感谢gmolzc

出0入0汤圆

发表于 2010-9-6 15:16:42 | 显示全部楼层
楼主 你是哪里问题呢

出0入0汤圆

发表于 2010-12-19 10:21:25 | 显示全部楼层
回复【5楼】cn123456
在gmolzc 的帮助下,问题已经解决,感谢gmolzc
-----------------------------------------------------------------------

楼主,怎么不懂规矩,
问题解决了,怎么没有把解决的过程和结果共享出来,鄙视你!

出0入0汤圆

发表于 2013-7-10 17:19:48 | 显示全部楼层
cn123456 发表于 2010-5-15 16:09
在gmolzc 的帮助下,问题已经解决,感谢gmolzc

楼主你好,最近我也在用HT1622驱动断码LCD,也是不显示,用示波器看com口的波形,能看到1/4Basie,1/8duty波形,但是SEG脚始终是一个1.5V的波形(供电电压为3V),求指教,十分感谢!

出0入0汤圆

发表于 2013-7-11 08:45:07 | 显示全部楼层
gmolzc 发表于 2010-5-14 07:58
樓主,若需要幫忙,請聯系我,QQ:8 5 9 2 0 7 6 1 1。確定可以幫你點亮!

你好,最近我也在用ht1622驱动断码lcd,参考了几个驱动程序,但是不能显示,请大侠指教,不胜感激!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 01:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表