没写过HT1621的程序,最近看了一些资料,说写命令是101+6位地址+4位数据组成。6位地址是SEG位,4位数据是什么位组成?是不是COM?
还有,数据位是4位,为什么别人写的程序都是8位呢?是什么意思呢?
下面是我看到的一段程序:
/////////////////////////////////////////////////////
void WriteByte_1621(INT8U addr,INT8U data)
{
addr<<=2;
cs=0;
Nop();
Nop();
Nop();
Nop();
SendBit_1621(0xa0,3); //写入标志码"101"
SendBit_1621(addr,6); //写入addr的高6位
SendDataBit_1621(data,8); //写入data的低8位
cs=1;
}
//////////////////////////////////////////////////////////////////////////////
我试过将data写成0x0f(因为数据是低4位)LCD显示不全,而改成0xf0(这不是高4位了么?)就可以全笔段显示了,这是为什么?
哪位大哥帮帮手,感激!
此帖出自
小平头技术问答
我用的HT1621程序示例:
- /*------------------------------------------------
- 函数名: LCD_INIT
- 描述: HT1621芯片初始化
- 输入: 无
- 输出: 无
- ------------------------------------------------*/
- void LCD_INIT(void)
- {
- //uint8_t *point;
- //point= (uint8_t*)LCD_SET;
- CLR_LCD_CK;
- delay_2us;
- CLR_LCD_CS; //CS=0;液晶屏选通;
- delay_2us;
- for(uint8_t i=0;i<6;i++)
- {
- LCD_PIN_OUT(LCD_SET[i]);
- }
- delay_2us;
- SET_LCD_CS; //CS=1;液晶屏关闭;
- }
- /*------------------------------------------------
- 函数名: LCD_OUT
- 描述: 将显示数据发送到TM0310液晶屏上
- 输入: 无
- 输出: 无
- ------------------------------------------------*/
- void LCD_OUT(void)
- {
- CLR_LCD_CK;
- delay_2us;
- CLR_LCD_CS; //CS=0;液晶屏选通;
- delay_2us;
- LCD_PIN_OUT(0xA0);//写显示数据指令:0xA0
- SET_LCD_CK; //第9位数据时钟:
- delay_2us;
- CLR_LCD_CK;
- delay_2us;
- for(uint8_t i=0;i<6;i++)
- {
- LCD_PIN_OUT(LCD_SY[i]);
- }
- delay_2us;
- SET_LCD_CS;
- }
- /*------------------------------------------------
- 函数名: LCD_PIN_OUT
- 描述: IO模拟SPI,输出1字节数据,MSB在前
- 资源: 计数器j=8
- 端口: LCD_DA,LCD_CK
- 输入: LCD_DATA
- 输出: 无
- ------------------------------------------------*/
- void LCD_PIN_OUT(uint8_t LCD_DATA)
- {
- uint8_t data_tmp,j;
- for(j=8;j!=0;j--)
- {
- data_tmp=LCD_DATA;
- if (data_tmp&=0x80)
- SET_LCD_DA;
- else
- CLR_LCD_DA;
-
- delay_2us;
- SET_LCD_CK;
- delay_2us;
- CLR_LCD_CK;
- delay_2us;
- LCD_DATA<<=1;
- }
- }
复制代码一周热门 更多>