hande5 发表于 2024-11-4 10:40:42

{:4_165:}

lway 发表于 2024-11-19 15:24:43

学习一下

springvirus 发表于 2024-12-5 15:22:32

感谢分享!!!

cxx_yxz 发表于 2025-1-15 21:29:22

我最近也在使用这款单片机做LCD断码屏项目,有个问题请教一下,LCD显示时的死区时间长度是什么意思,长和短有什么区别。还有我调试出来,正面视角看都没有问题,稍微侧面偏一点看,就会发现一些本该不亮的段,有隐约被点亮的效果,我唤作残影。我把电压调低的话,侧面视角看残影会消失,但是正面看的话会变暗。不知道是屏幕本身问题,还是哪里配置问题。单片机是5V通过一个二极管供电,电压约4.8V,11.0592MHZ内部IRC, 屏是3V的。下面是LCD初始化代码
void LCD_initial(void) /*LCD_initial*/
{
       
        unsigned char vx_vol;
        P_SW2 |= 0x80;        // SFR enable
        ADC_CONTR = 0x80; //open ADC voltage
        ADCTIM = 0x3f;                //0011 1111       
        ADCCFG = 0x0f;                //0000 1111       
        delay_ms(5);       
        ADC_CONTR = 0xcf; //start ADC ch15 interal 1.19V       
        _nop_();
        _nop_();
        while (!(ADC_CONTR & 0x20));
        ADC_CONTR &= ~0x20;               
        vx_vol=       ADC_RES;
        ADC_CONTR = 0x00;//close ADC

        LCDCFG = (vx_vol*375/16/119-13)& 0x07;    //根据ADC的电压来配置3V液晶的电压参数
        DBLEN   = 0x07;
        COMLENH        = 0x00;
        COMLENM        = 0x61;
        COMLENL = 0xa5;
        BLINKRATE = 60;                // ÉÁ˸ÂÊÅäÖüĴæÆ÷, LCDÉÁ˸ÂÊ = LCDË¢ÐÂÂÊ / BLINKRATE Hz
       
       
        COMON= 0x0f;
        SEGON1 = 0x00;
        SEGON2 = 0x00;
        SEGON3 = 0Xff;                // SEGÏßʹÄܼĴæÆ÷3, SEG23~SEG16
        SEGON4 = 0xff;                // SEGÏßʹÄܼĴæÆ÷4, SEG31~SEG24
        SEGON5 = 0x00;

        C0SEGV2 = 0x01;
        C0SEGV3 = 0x00;
        C1SEGV2 = 0x01;
        C1SEGV3 = 0x00;
        C2SEGV2 = 0x08;
        C2SEGV3 = 0x40;       
        C3SEGV2 = 0x09;
        C3SEGV3 = 0x00;

        LCDCR = 0x01;        // LCD
       
}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    

ainijd 发表于 2025-2-21 10:00:04

                能详细解释一下这段程序吗
        LCD_buff&= ~(1<<seg_pos);//
                        LCD_buff&= ~(3<<seg_pos);
                        LCD_buff &= ~(3<<seg_pos);
                        LCD_buff &= ~(3<<seg_pos);
               
                        if(dat & 0x01)                LCD_buff |= (1<<seg_pos);        //T_SEG_ABC;                //A
                        if(dat & 0x02)                LCD_buff |= (2<<seg_pos);        //T_SEG_ABC;                //B
                        if(dat & 0x04)                LCD_buff|= (2<<seg_pos);        //T_SEG_ABC;                //C
                        if(dat & 0x08)                LCD_buff|= (1<<seg_pos);        //T_SEG_DEFG;        //D
                        if(dat & 0x10)                LCD_buff|= (1<<seg_pos);        //T_SEG_DEFG;        //E
                        if(dat & 0x20)                LCD_buff |= (1<<seg_pos);        //T_SEG_DEFG;        //F
                        if(dat & 0x40)                LCD_buff |= (2<<seg_pos);        //T_SEG_DEFG;        //G               
                        break;

ainijd 发表于 2025-2-21 10:13:38

      if((n == 0) || (n >= 15))      
                return;      //合法值 1~5

      dat =t_display;

      switch( n )
      {
                case 1:
                case 2:
                case 3:
                        LCD_buff&= ~(1<<seg_pos);
                        LCD_buff&= ~(3<<seg_pos);
                        LCD_buff &= ~(3<<seg_pos);
                        LCD_buff &= ~(3<<seg_pos);
这段能详细解释一下吗

手机刷机菜鸟 发表于 2025-2-22 10:40:51

这个很不错!
页: 1 2 3 4 5 [6]
查看完整版本: 8H4K64TLCD驱动段码LCD屏教程(一)点亮段码LCD屏