段码屏嵌入式的一些理解-包含代码-主芯片STM8
驱动IC:HT1621B
MCU:STM8S003F3
第一:
1.我们首先来看一下,原理图的连接情况:


2.再来看一下,MCU规格书。

选用:
mcu pin17连接LCDPower
pin16连接DATA
pin15连接WR
pin14连接RD
pin13连接CS
//补充:
cs:cs脚用于初始化串行接口电路和结束主控制器与HT1621之间的通讯,cs设置为1 时主控制器和HT1621之间的数据和命令无效并初始化。在产生模式命令或模式转换之前必须用一个高电平脉冲初始化HT1621的串行接口。
SET_CS;//CS端需要有一个高电平来初始化SET_WR; SET_DATA;delay_ms(1); RST_CS; delay_ms(1);
data:data脚是串行输入/输出的管脚,读和写数据和写命令通过DATA脚来进行。
RD:RD脚是读时钟输入管脚,在RD信号的下降沿时数据输出管脚DATA上,在RD信号上升沿与下一个下降沿之间,主控器应读取相应的数据。
WR:WR脚是写时钟输入管脚,在WR信号上升沿时,管脚DATA上的数据、地址、命令被写入HT1621.
HT1621的命令格式:

//modify: 修改; 修饰; 调整; 使更适合; 缓和; 使温和;
HT1621的引脚定义

其他:对于HT1621显示驱动的一些理解
RAM的数据直接映像到LCD驱动器,可以使用读写命令访问。
怎么理解?
观察此图:
从映像图中可以看出,每一个HT1621的地址都会对应LCD,而对HT1621的地址4位操作。
这边不是很理解,我们来一起分析一个HT1621这个IC。
1.HT1621的硬件连线与LCD怎么连接?
LCD和HT1621的SEG(段电极)和COM(公共电极)对应连接。
2.HT1621B,其中的D0~D3,A0~A5各代表什么意思?
1621B带32SEG*4COM,128段(怎么去理解128段,相当于可以显示支持128段的LED)。
显示数据与显示内容是这样对应的-------一个8进制一个字节二进制数对应2根SEG线上的8个段码,1为显示,0为不显示。
例:
SEG0上的LCD连接是ABCD四个段码,SEG1上是内容是EFGH四个段码,公共电极COM,C0连接AE这两个段码,C1连接BF,C2连接CG,C3连接DH,按照此逻辑输入“01100011”,高4位对应SEG1,低电位对应SEG0,将同时显示FGAB四个段码,输入的显示数据不重新输入的话会一直显示,要同时显示2位数字和段码,只要将这些数字和段码在在逻辑表上对应的数据配置1即可同时显示。
待更新~
一些软件的分析
HT1621的命令格式
/** LCD 模式写入* 入口:MODE : 0 :COM(命令模式) / 1:DAT(数据模式)* 出口:void */ void write_mode(unsigned char MODE) //写入模式,数据or命令 { RST_WR; //WR=0delay_us();SET_DATA; //DATA=1delay_us();SET_WR; //WR=1delay_us();RST_WR; //WR = 0;delay_us();RST_DATA; //DATA = 0;delay_us();SET_WR; //WR = 1;delay_us();RST_WR; //WR=0 delay_us();if (MODE){SET_DATA; //DATA = 1; 写数据模式}else{RST_DATA; //DATA = 0; 写命令模式}delay_us();SET_WR; //WR=1 delay_us(); }1.WR上升沿的时候写入。
2.MODE为0,DATA 100.
MCU配置HT1621
us时间相关的函数
/*********************** 函数功能:us延时 输入参数:无 输出参数:无 备 注:粗略延时 ***********************/ void delay_us(void) { asm("nop"); //一个asm("nop")函数经过示波器测试代表100nsasm("nop");asm("nop");asm("nop"); asm("nop");asm("nop"); }待测一下~
HT1621的初始化
void ht1621_init(void) {LCDPort->DDR |= LCDPin;//输出模式LCDPort->CR1 |= LCDPin;//推挽输出SET_CS; //CS拉高SET_WR; //WR拉高SET_DATA; //SET拉高delay_ms(1); RST_CS; //CS拉低delay_ms(1); write_mode(0); //命令模式write_command(0x01); //Enable System//0001write_command(0x03); //Enable Bias//0011write_command(0x04); //Disable Timer//0100write_command(0x05); //Disable WDT//0101write_command(0x08); //Tone OFF//1000write_command(0x18); //on-chip RC震荡//00010101// write_command(0x14); //crystal RC震荡//10100write_command(0x29); //1/4Duty 1/3Bias//00101001write_command(0x80); //Disable IRQ//10000000write_command(0x40); //Tone Frequency 4kHZ//01000000write_command(0xE3); //Normal Mode//11100011SET_CS; //CS拉高 }
其中:
1.端口输入输出的是,推挽信号。
2.
write_command()函数
void write_command(unsigned char Cbyte){unsigned char i = 0;for (i = 0; i < 8; i++){RST_WR; if ((Cbyte >> (7 - i)) & 0x01){SET_DATA; }else{RST_DATA; }delay_us();SET_WR; delay_us();}RST_WR; delay_us();RST_DATA; delay_us();SET_WR; delay_us(); }
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!



