stm32驱动微控网的MC128DM段式液晶

楼主
stm32驱动微控网的MC128DM段式液晶
[FACE=宋体][SIZE=9pt]数字能正确控制 ,但是小的字符不能如 V等,不在地址如何对应,希望大家多多指教,驱动代码在附件中[/SIZE][/FACE][P][FACE=宋体][SIZE=9pt][CODE][/CODE][/SIZE][SIZE=12px]// 驱动代码由 taishaner 根据微控网提供的驱动修改[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]#ifndef __STM32_HT1621_H[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]#define __STM32_HT1621_H      [/SIZE] [/FACE][/P][P][FACE=宋体][SIZE=12px]#include "sys.h"[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]extern const unsigned char HT1621_TABLE[10];      [/SIZE]  //0--9[/FACE][/P][P][FACE=宋体][SIZE=12px]#define BIAS 0x29[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]#define SYSEN 0x01      //系统使能[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]#define LCDOFF 0x02     //LCD关[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]#define LCDON  0x03      //LCD开[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]
[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]#define CS PCout(7)            [/SIZE]  //宏定义引脚,在初始化函数中需要交引脚设置为输出[/FACE][/P][P][FACE=宋体][SIZE=12px]#define  WR PCout(8)[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]#define DAT PCout(9)[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]
[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]void SendBit_1621(unsigned char data,unsigned char cnt) ;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]void SendDataBit_1621(unsigned char data,unsigned char cnt) ;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]void SendCmd(unsigned char command);[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]void WriteByte(unsigned char addr,unsigned char data);[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]void WriteString(unsigned char addr,unsigned char *p,unsigned char cnt);[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]void LcdInit(void);[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]void test();[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]#endif[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=9pt]//头文件 [/SIZE][/FACE][/P][P][FACE=宋体][SIZE=9pt]
[/SIZE][/FACE][/P][P][P][FACE=宋体][SIZE=12px]// 驱动代码由 taishaner 根据微控网提供的驱动修改[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]#include"STM32_HT1621.h"[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]#include "delay.h"[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]const unsigned char HT1621_TABLE[10]={0xD7,0x50,0xE3,0xA7,0x36,0xB5,0xF5,0x07,0xF7,0xB7};      [/SIZE]  //0--9S[/FACE][/P][P][FACE=宋体][SIZE=12px]
[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]// HT1621-LCD初始化[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]void LcdInit(void)[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]{[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]      [/SIZE]RCC->APB2ENR|=1<<4;    //使能PORTC时钟               [/FACE][/P][P][FACE=宋体][SIZE=12px]      [/SIZE]GPIOC->CRL&=0X0FFFFFFF; [/FACE][/P][P][FACE=宋体][SIZE=12px]      [/SIZE]GPIOC->CRL|=0X30000000;//PC7,PC8,PC9 推挽输出          [/FACE][/P][P][FACE=宋体][SIZE=12px]      [/SIZE]GPIOC->CRH&=0XFFFFFF00; [/FACE][/P][P][FACE=宋体][SIZE=12px]      [/SIZE]GPIOC->CRH|=0X00000033; [/FACE][/P][P][SIZE=12px][FACE=宋体]      [/FACE][/SIZE][/P][P][FACE=宋体][SIZE=12px]      [/SIZE] SendCmd(BIAS); //设置偏压和占空比[/FACE][/P][P][FACE=宋体][SIZE=12px]      [/SIZE] SendCmd(SYSEN); //打开系统振荡器[/FACE][/P][P][FACE=宋体][SIZE=12px]      [/SIZE] SendCmd(LCDON); //打开LCD 偏压发生器[/FACE][/P][P][FACE=宋体][SIZE=12px]}[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]
[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]
[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]//******************************************************************************OK[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]//data的高cnt位写入HT1621,高位在前.[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]
[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]void SendBit_1621(unsigned char data,unsigned char cnt) [/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]{unsigned char i;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] for(i =0; i <cnt; i ++)[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] {if((data&0x80)==0)[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]  DAT=0;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]  else [/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]  DAT=1;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]  WR=0;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] delay_us(5);[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]  WR=1;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]  data<<=1;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] }[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]}[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]//******************************************************************************[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]//data的低cnt位写入HT1621,低位在前[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]void SendDataBit_1621(unsigned char data,unsigned char cnt) [/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]{unsigned char i;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] for(i =0; i <cnt; i ++)[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] { if((data&0x01)==0) [/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]       DAT=0;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]  else [/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]      DAT=1;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]  WR=0;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]   delay_us(5);[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]  WR=1;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]  data>>=1;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] }[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]}[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]//******************************************************************************OK[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]//写命令到HT1621[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]void SendCmd(unsigned char command)[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]{CS=0;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] SendBit_1621(0x80,3); //写入标志码"100"[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] SendBit_1621(command,9); //写入9 位数据,其中前8 位为command 命令,最后1 位任意[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] CS=1;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]}[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]
[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]//******************************************************************************OK[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]//写一个数据到HT1621[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]void WriteByte(unsigned char addr,unsigned char data)[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]{CS=0;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] SendBit_1621(0xa0,3);      //写入标志码"101"[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] SendBit_1621(addr<<3,6);   //写入6 位addr[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] SendBit_1621(data,8);      //[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] //SendByte(data);            [/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] CS=1;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]}[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]//******************************************************************************OK[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]//连续写一个数据到HT1621,addr:内部RAM首址,*p:提供显示缓冲区, cnt:显示数量[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]void WriteString(unsigned char addr,unsigned char *p,unsigned char cnt)[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]{unsigned char i;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] CS=0;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] SendBit_1621(0xa0,3);        //写入标志码"101"[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] SendBit_1621(addr<<2,6);     //写入6 位addr[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] for(i =0; i <cnt; i ++,p++)  //连续写入数据[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]  { SendDataBit_1621(*p,8);   //写入data 的低4 位[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]  }[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] CS=1;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]}[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]//******************************************************************************OK[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]
[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]//******************************************************************************OK[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]//延时[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]
[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]//******************************************************************************OK[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]//测试程序[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]void test()[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]{unsigned char m,k;//[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] unsigned char temp,n;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] /* //-----------------------[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] for(k=0;k<16;k++)[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] {n=0x01;temp=n;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]  for(m=0;m<8;m++)[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]   { WriteByte(k,temp);[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]     n=n<<1; [/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]     temp=n;  [/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]     delay();[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]   }[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]  WriteByte(k,0x00);[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] } */[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] //-----------------------清屏[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]  //for(k=0;k<16;k++)[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]  //  WriteByte(k,0x00);[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] //-----------------------[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] for(k=0;k<16;k++)[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] {n=0x01;temp=n;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]  for(m=0;m<8;m++)[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]   { WriteByte(k,temp);[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]     n=n<<1;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]     temp = n|temp;[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]     delay_ms(1);[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]   }[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] }[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] //-----------------------清屏[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]// for(k=0;k<16;k++)                                                                  [/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px] //{ WriteByte(k,0x00);}[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=12px]}[/SIZE][/FACE][/P][P][FACE=宋体][SIZE=9pt]
[/SIZE][/FACE][/P][/P]
1楼
每4段,对应一个地址试试看。好久没用了,多测试一下。[P][CODE]
//连续写一个数据到HT1621,addr:内部RAM首址,*p:提供显示缓冲区, cnt:显示数量
void WriteString(unsigned char addr,unsigned char *p,unsigned char cnt)
{unsigned char i;
CS=0;
SendBit_1621(0xa0,3);        //写入标志码"101"
SendBit_1621(addr<<2,6);     //写入6 位addr
for(i =0; i <cnt; i ++,p++)  //连续写入数据
 { SendDataBit_1621(*p,8);   //写入data 的低4 位
 }
CS=1;
}[/CODE][/P]
2楼
版主32也这么牛啊  前几天才进这个论坛的  发现真的不错 看版主的帖子从07年到现在  哈哈以后多多关照啊

电脑版 Page created in 1.4058 seconds width 3 queries.