打印

[技术问答] 关于SC92F446B LCD代码怎么理解

[复制链接]
162|4
跳转到指定楼层
楼主
第一次使用赛元的mcu,段式LCD液晶驱动如下代码不是很懂,SEGA-DP,又是左移 又是右移的啥子意思。
/**************************************************
*函数名称:void LcdSegData(uint8_t LcData,LcdSelCOM COMx)
*函数功能:LCD显示数据转换
*入口参数:LcdData               LCD显示数据
                   COMx                             COM口选择(取值范围:LCDCOM0~7)
*出口参数:void
*功能说明:LcdDisplay[]数组下标值必须根据所选择的SEG口对应
**************************************************/
void LcdSegData(uint8_t LcdData,LcdSelCOM COMx)
{

        SEGA  = ((LcdData >> 0) & 0X01) << 0;
        SEGB  = ((LcdData >> 1) & 0X01) << 0;
        SEGC  = ((LcdData >> 2) & 0X01) << 2;
        SEGD  = ((LcdData >> 3) & 0X01) << 3;
        SEGE  = ((LcdData >> 4) & 0X01) << 2;
        SEGF  = ((LcdData >> 5) & 0X01) << 1;
        SEGG  = ((LcdData >> 6) & 0X01) << 1;
        SEGDP = ((LcdData >> 7) & 0X01) << 3;
另外我实际屏幕中有很多段是汉字的,又该如何写呢,请各位高手以及原厂大神指点下,谢谢

使用特权

评论回复

相关资料

沙发
| 2019-7-20 16:22 | 只看该作者
本帖最后由 lu50211 于 2019-7-20 16:29 编辑

假如当前液晶的直值图是如下的

MCU对应的接法如下图

把引脚和显存地址对应起来。

为了方便程序,需要做一些处理。
定一6个数据Buff[6],因为LCD只用了4COM(C4 - C7)此处要注意接法,必须是C0-C4、C4-C7、C0-C7这三种用法,不然不能显示不要怪没提醒你哦,那么相当于只用到显示地址的高位。而液晶的段不是8位的,所以需要强制做一下下面的变换。


相当于Buff[0]:b7-b0对就   4A 4F 4E 4D 4B 4G 4C T11
如是想显示数字0,那么要给Buff[0]填充   4A=1  4F=1 4E=1 4D=1 4B=1 4G=0 4C=1 T11=0
如是想显示数字1,那么要给Buff[0]填充   4A=0  4F=0 4E=0 4D=0 4B=1 4G=0 4C=1 T11=0

现在只在暂存里有显示数据了,还需要把这个值拆分写入LCD显存里面

MCU中液晶的显存地址定义如下:
unsigned char xdata LCDRAM[30] _at_ 0x700;//指向LCD显存地址

LCDRAM[0] = (Buff[0] & 0xf0); //Buff[0] 的高4位赋值在显存700H的高4位
LCDRAM[1] = (Buff[0] & 0x0F) << 4; //Buff[0] 的低4位赋值在显存701H的高4位

这样LCD就显示了你Buff[0] 想显示的数字了

还有一个前提是你需要把LCD驱动器初始化才能正常工作。

void LCD_Init(void)
{
        unsigned char i;
        
        P0VO   = _B00000000;//显示驱动输出寄存器 0->关闭 1->打开
        P1VO   = _B11111111;//显示驱动输出寄存器 0->关闭 1->打开
        P2VO   = _B00000000;//显示驱动输出寄存器 0->关闭 1->打开
        P3VO   = _B11111111;//显示驱动输出寄存器 0->关闭 1->打开
        
        DDRCON = _B10111111;//显示驱动控制寄存器
        OTCON  = _B00000101;//输出控制寄存器 C4-C7  1/3Bias
        
        //由于LCD/LED的显示RAM区只可写不可读,所以需要用到一个缓存数组LCDTemp
        for(i = 0; i < 30; i++)   LCDRAM = 0x00;
}





482015d32d09c41e42.png (24.36 KB, 下载次数: 12)

482015d32d09c41e42.png

使用特权

评论回复
板凳
 楼主 | 2019-7-22 15:59 | 只看该作者
lu50211 发表于 2019-7-20 16:22
假如当前液晶的直值图是如下的

MCU对应的接法如下图

TKS 万分感谢

使用特权

评论回复
地板
| 2019-7-26 14:47 | 只看该作者
不错,很巴适

使用特权

评论回复
5
| 2019-7-26 15:07 | 只看该作者
lu50211 发表于 2019-7-20 16:22
假如当前液晶的直值图是如下的

MCU对应的接法如下图


使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表