找回密码
 立即注册
查看: 35|回复: 8

关于STC8H4K64TLCD驱动笔段LCD的问题

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:240
  • 最近打卡:2026-03-06 09:09:49
已绑定手机

9

主题

116

回帖

722

积分

高级会员

积分
722
发表于 4 天前 | 显示全部楼层 |阅读模式
液晶增值表如下:
  
显示图案如下:

我现在是想点亮标号为2的“8”字,
代码如下:
     case 6:            
            LCD_buff[1]  &= ~(1<<7);//固定操作bit7,bit7    清除
            LCD_buff[6]  &= ~(1<<7);//固定操作bit7,bit7
            LCD_buff[11] &= ~(1<<7);//固定操作bit7,bit7
            LCD_buff[16] &= ~(1<<7);//固定操作bit7,bit7
        
          LCD_buff[2]  &= ~(3<<seg_pos[n-1]);//固定操作bit0,bit1    清除
            LCD_buff[4]  &= ~(3<<seg_pos[n-1]);//固定操作bit0,bit1    清除
            LCD_buff[12] &= ~(3<<seg_pos[n-1]);//固定操作bit0,bit1    清除
            LCD_buff[17] &= ~(1<<seg_pos[n-1]);//固定操作bit0,bit1    清除
        
        
            if(dat & 0x01)        LCD_buff[17] |= (1<<seg_pos[n-1]);    //T_SEG_ABC[n];        //A
            if(dat & 0x02)        LCD_buff[16] |= (1<<7)          ;    //T_SEG_ABC[n];        //B
            if(dat & 0x04)        LCD_buff[11] |= (1<<7)          ;    //T_SEG_ABC[n];        //C
            if(dat & 0x08)        LCD_buff[4]  |= (1<<seg_pos[n-1]);    //T_SEG_DEFG[n];    //D
            if(dat & 0x10)        LCD_buff[4]  |= (2<<seg_pos[n-1]);    //T_SEG_DEFG[n];    //E
            if(dat & 0x20)        LCD_buff[12] |= (2<<seg_pos[n-1]);    //T_SEG_DEFG[n];    //F
            if(dat & 0x40)        LCD_buff[12] |= (1<<seg_pos[n-1]);    //T_SEG_DEFG[n];    //G        
            break;
u8 code seg_pos[]={0,3,6,1,4,0,4,2,0,6,4,2,0,6};
这个位置设置的是0,本来想显示出来的数字是0,实际显示的数字是7,少显示了2个段,这种骑着位码的该怎么定义位置呢?比较的困惑,这种该怎么处理?

截图202603031027025683.jpg
截图202603031027372204.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:719
  • 最近打卡:2026-03-07 07:41:42
已绑定手机

97

主题

7247

回帖

1万

积分

超级版主

积分
13780
发表于 4 天前 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:240
  • 最近打卡:2026-03-06 09:09:49
已绑定手机

9

主题

116

回帖

722

积分

高级会员

积分
722
发表于 3 天前 | 显示全部楼层
现在是有些地方没明白,这个也不知道参考哪里
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:240
  • 最近打卡:2026-03-06 09:09:49
已绑定手机

9

主题

116

回帖

722

积分

高级会员

积分
722
发表于 3 天前 | 显示全部楼层
好的就是,用笨办法,显示出来了,想要的0,中间的一个8,一直闪动,应该还是有地方没搞对
354a1154fc3ba7640fba3f75ce2e944c.jpg

354a1154fc3ba7640fba3f75ce2e944c.mp4

364.07 KB, 下载次数: 0

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:240
  • 最近打卡:2026-03-06 09:09:49
已绑定手机

9

主题

116

回帖

722

积分

高级会员

积分
722
发表于 3 天前 | 显示全部楼层
笨办法的显示函数如下:

                        LCD_load(1,0);//显示标号为5的8
                        LoadToLcd();               
                                delay_ms(1000);        

                         LCD_load(2,0);//显示标号为5的8
                        LoadToLcd();               
                                delay_ms(1000);        

                                LCD_load(4,0);//显示标号为4个8
                        LoadToLcd();               
                                delay_ms(1000);        
                                
                                        LCD_load(5,0);//显示标号为5的8
                        LoadToLcd();               
                                delay_ms(1000);        
                                
                        LCD_load(6,0);//显示标号为5的8
                        LoadToLcd();               
                                delay_ms(1000);        
                                
                                                LCD_load(7,0);//显示标号为5的8
                        LoadToLcd();               
                                delay_ms(1000);        
                                


switch( n )
        {
                case 1:
                case 2:
                                LCD_buff[0]  &= ~(1<<seg_pos[n-1]);//清除bit0
                        LCD_buff[5]  &= ~(7<<seg_pos[n-1]);//清除bit0,bit1,bit2
                        LCD_buff[10] &= ~(7<<seg_pos[n-1]);//清除bit0,bit1,bit2
                        LCD_buff[15] &= ~(7<<seg_pos[n-1]);//清除bit0,bit1,bit2
               
                        if(dat & 0x01)                LCD_buff[15] |= (2<<seg_pos[n-1]);        //T_SEG_ABC[n];                //A  A在bit1上
                        if(dat & 0x02)                LCD_buff[15] |= (4<<seg_pos[n-1]);        //T_SEG_ABC[n];                //B  B在bit2上
                        if(dat & 0x04)                LCD_buff[10] |= (4<<seg_pos[n-1]);        //T_SEG_ABC[n];                //C  c在bit2上
                        if(dat & 0x08)                LCD_buff[5]  |= (2<<seg_pos[n-1]);        //T_SEG_DEFG[n];        //D  D在bit1上
                        if(dat & 0x10)                LCD_buff[5]  |= (1<<seg_pos[n-1]);        //T_SEG_DEFG[n];        //E  E在bit0上
                        if(dat & 0x20)                LCD_buff[10] |= (1<<seg_pos[n-1]);        //T_SEG_DEFG[n];        //F  F在bit0上
                        if(dat & 0x40)                LCD_buff[10] |= (2<<seg_pos[n-1]);        //T_SEG_DEFG[n];        //G         G在bit1上
                        break;
                case 3:
                   LCD_buff[0]  &= ~0xc0;////         清除bit7,bit6
                        LCD_buff[5]  &= ~0xc0;// 清除bit7,bit6
                        LCD_buff[10] &= ~0xc0;// 清除bit7,bit6
                        LCD_buff[15] &= ~0xc0;// 清除bit7,bit6
               
                        LCD_buff[1]  &= ~(1<<0);// 固定操作bit0,bit0        清除
                        LCD_buff[6]  &= ~(1<<0);// 固定操作bit0,bit0        清除
                        LCD_buff[11] &= ~(1<<0);// 固定操作bit0,bit0        清除
                        LCD_buff[16] &= ~(1<<0);// 固定操作bit0,bit0        清除
               
                        if(dat & 0x01)                LCD_buff[15] |= 0xc0;        //T_SEG_ABC[n];                //操作标号S14  1100 0000
                        if(dat & 0x02)                LCD_buff[16] |= 0x01;        //T_SEG_ABC[n];                //操作标号S1   0000 0001
                        if(dat & 0x04)                LCD_buff[6]  |= 0x01;        //T_SEG_ABC[n];                //操作标号S3   0000 0001
                        if(dat & 0x08)                LCD_buff[0]  |= 0xc0;        //T_SEG_DEFG[n];        //操作标号S17  1100 0000
                        if(dat & 0x10)                LCD_buff[5]  |= 0xc0;        //T_SEG_DEFG[n];        //操作标号S16  1100 0000
                        if(dat & 0x20)                LCD_buff[10] |= 0xc0;        //T_SEG_DEFG[n];        //操作标号S15  1100 0000
                        if(dat & 0x40)                LCD_buff[11] |= 0x01;        //T_SEG_DEFG[n];        //操作标号S2         0000 0001               
                        break;
               
                case 4:        
                case 5:
                        LCD_buff[1]  &= ~0x0e;;// 固定操作bit0,bit1,bit2,bit3        清除
                        LCD_buff[6]  &= ~0x0e;// 固定操作bit0,bit0        清除
                        LCD_buff[11] &= ~0x0e;// 固定操作bit0,bit0        清除
                        LCD_buff[16] &= ~0x0e;// 固定操作bit0,bit0        清除
               
                        if(dat & 0x01)                LCD_buff[16] |= (2<<seg_pos[n-1]);        //T_SEG_ABC[n];                //操作标号A
                        if(dat & 0x02)                LCD_buff[16] |= (1<<seg_pos[n-1]);        //T_SEG_ABC[n];                //操作标号B
                        if(dat & 0x04)                LCD_buff[11]  |= (1<<seg_pos[n-1]);        //T_SEG_ABC[n];                //操作标号C
                        if(dat & 0x08)                LCD_buff[6]  |= (2<<seg_pos[n-1]);        //T_SEG_DEFG[n];        //操作标号D
                        if(dat & 0x10)                LCD_buff[6]  |= (4<<seg_pos[n-1]);        //T_SEG_DEFG[n];        //操作标号E
                        if(dat & 0x20)                LCD_buff[11] |= (4<<seg_pos[n-1]);        //T_SEG_DEFG[n];        //操作标号F
                        if(dat & 0x40)                LCD_buff[11] |= (1<<seg_pos[n-1]);        //T_SEG_DEFG[n];        //操作标号G                                
                        break;
               
               
                        
                case 6:                        
                        LCD_buff[1]  &= ~(1<<7);//固定操作bit7,bit7        清除
                        LCD_buff[6]  &= ~(1<<7);//固定操作bit7,bit7
                        LCD_buff[11] &= ~(1<<7);//固定操作bit7,bit7
                        LCD_buff[16] &= ~(1<<7);//固定操作bit7,bit7
               
                  LCD_buff[2]  &= ~(3<<seg_pos[n-1]);//固定操作bit0,bit1        清除
                        LCD_buff[7]  &= ~(3<<seg_pos[n-1]);//固定操作bit0,bit1        清除
                        LCD_buff[12] &= ~(3<<seg_pos[n-1]);//固定操作bit0,bit1        清除
                        LCD_buff[17] &= ~(1<<seg_pos[n-1]);//固定操作bit0,bit1        清除
               
               
                        if(dat & 0x01)                LCD_buff[17] |= (1<<0);        //T_SEG_ABC[n];                //A
                        if(dat & 0x02)                LCD_buff[16] |= (1<<7)         ;        //T_SEG_ABC[n];                //B
                        if(dat & 0x04)                LCD_buff[11] |= (1<<7)          ;        //T_SEG_ABC[n];                //C
                        if(dat & 0x08)                LCD_buff[7]  |= (1<<0);        //T_SEG_DEFG[n];        //D
                        if(dat & 0x10)                LCD_buff[7]  |= (1<<1);        //T_SEG_DEFG[n];        //E
                        if(dat & 0x20)                LCD_buff[12] |= (1<<1);        //T_SEG_DEFG[n];        //F
                        if(dat & 0x40)                LCD_buff[12] |= (1<<0);        //T_SEG_DEFG[n];        //G               
                        break;
               
                case 7:                        
                  LCD_buff[2]  &= ~(7<<seg_pos[n-1]);//固定操作bit0,bit1        清除
                        LCD_buff[4]  &= ~(7<<seg_pos[n-1]);//固定操作bit0,bit1        清除
                        LCD_buff[12] &= ~(7<<seg_pos[n-1]);//固定操作bit0,bit1        清除
                        LCD_buff[17] &= ~(7<<seg_pos[n-1]);//固定操作bit0,bit1        清除
               
                        if(dat & 0x01)                LCD_buff[17]   |= (2<<seg_pos[n-1]);        //T_SEG_ABC[n];                //A
                        if(dat & 0x02)                LCD_buff[17]   |= (1<<seg_pos[n-1]);        //T_SEG_ABC[n];                //B
                        if(dat & 0x04)                LCD_buff[12]   |= (1<<seg_pos[n-1]);        //T_SEG_ABC[n];                //C
                        if(dat & 0x08)                LCD_buff[7]    |= (2<<seg_pos[n-1]);        //T_SEG_DEFG[n];        //D
                        if(dat & 0x10)                LCD_buff[7]    |= (4<<seg_pos[n-1]);        //T_SEG_DEFG[n];        //E
                        if(dat & 0x20)                LCD_buff[12]   |= (4<<seg_pos[n-1]);        //T_SEG_DEFG[n];        //F
                        if(dat & 0x40)                LCD_buff[12]   |= (2<<seg_pos[n-1]);        //T_SEG_DEFG[n];        //G               
                        break;               
               
               
               
                default:
                        break;
               
        }
}

u8 code seg_pos[]={0,3,6,1,4,0,2};
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2026-03-07 11:27:49

12

主题

541

回帖

1260

积分

金牌会员

积分
1260
发表于 3 天前 | 显示全部楼层
看了半天有点晕呀
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:240
  • 最近打卡:2026-03-06 09:09:49
已绑定手机

9

主题

116

回帖

722

积分

高级会员

积分
722
发表于 3 天前 | 显示全部楼层
白水大*** 发表于 2026-3-4 11:35
看了半天有点晕呀

拿例程改的,还有点问题,没全搞对,感觉是没有HT1621的好用,HT1621在编程方便友好些
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2026-03-07 11:27:49

12

主题

541

回帖

1260

积分

金牌会员

积分
1260
发表于 前天 09:08 | 显示全部楼层
toms*** 发表于 2026-3-4 17:35
拿例程改的,还有点问题,没全搞对,感觉是没有HT1621的好用,HT1621在编程方便友好些 ...

同感
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:240
  • 最近打卡:2026-03-06 09:09:49
已绑定手机

9

主题

116

回帖

722

积分

高级会员

积分
722
发表于 前天 17:39 | 显示全部楼层
终于弄好了,借助AI解决了问题。
截图202603051739415530.jpg
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-3-7 20:02 , Processed in 0.140535 second(s), 86 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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