📄 lcddrv.c
字号:
void LCD_state_init(unsigned char C1);
void Process_Ram_Data(unsigned char *DE1);
void Process_Send_Addr(unsigned char B1);
void Write_Tuner_LCD(void);
void Write_VCD_LCD(void);
#if LCD1621
void LCD_objectSendByte(unsigned int BC1);
void process_send_addr(unsigned char B1);
void process_iddata(unsigned char B1);
void LCD1621init(void);
#endif
#if PT6523
void Pt6523_Control_Data(unsigned char B1);
#endif
#if PT6524
void Send_COM_Data(unsigned char B);
void SendRamData(void);
void Pt6524_Control_Data(unsigned int BC);
#endif
#define COM1 0x00
#define COM2 0x02
#define COM3 0x01
#define COM4 0x03
#define LCD_Delay() { NOP();}
#if LCD1621
#define LCD_SYSCLK 0x0002
#define LCD_OFF 0x0004
#define LCD_ON 0x0006
#define LCD_DITIMER 0x0008
#define LCD_DIWDT 0x000a
#define LCD_DITONE 0x0010
#define LCD_CLRTIMER 0x001a
#define LCD_RCCLK 0x0030
#define LCD_DIRQ 0x0100
#define LCD_NORMAL 0x01c6
const unsigned int lcd_init_tbl[]={
/*0x030,0x002,0x008,0x00a,0x100,0x010,0x01a,0x006,0x1c6,*/
0x030,0x002,0x052,0x008,0x00a,0x100,0x010,0x012,0x006,0x1c6,
};
#endif
/* ********************************************** */
void LCD_state_init(unsigned char C1)
{
#if LCD1621
LCD_CE =0;
Delay1ms(30);
LCD_CE =1;
Delay1ms(30);
/* init HT1621 */
LCD_CE =0;
process_iddata(0x04);
for(i=0;i<10;++i) {
LCD_objectSendByte(lcd_init_tbl[i]);/* on-chip RC oscillator */
}
LCD_CE =1;
#endif
#if PT6523
if (C1 == 0) {
control_data = 0x01; /* normal */
} else {
control_data = 0x03; /* power save mode */
}
LCD_CE = 0;
LCD_CLK = 1;
LCD_DO = 1;
#endif
#if PT6524
if (C1 == 0) {
control_data = 0x0000; /* normal */
} else {
control_data = 0x0200; /* power save mode */
}
LCD_CE = 0;
LCD_CLK = 1;
LCD_DO = 1;
#endif
return;
}
#if LCD1621
void LCD1621init(void)
{
LCD_CE =0;
NOP();
process_iddata(0x04);
for(i=0;i<10;++i) {
LCD_objectSendByte(lcd_init_tbl[i]);/* on-chip RC oscillator */
}
LCD_CE =1;
return;
}
void LCD_objectSendByte(unsigned int BC1)
{
unsigned char E1;
for (E1 = 0;E1 <9;++E1) {
LCD_CLK =0;
if(BC1 & 0x100) {
LCD_DO=1;
} else {
LCD_DO=0;
}
LCD_CLK =1;
BC1 <<= 1;
}
return;
}
void process_send_addr(unsigned char B1)
{
unsigned char E1;
for (E1 = 0;E1 < 6;++E1) { /* addr*/
/* Transmit most significant bit first */
LCD_CLK =0;
if(B1 & 0x20) { /* 5 4 3 2 1 0*/
LCD_DO =1;
} else {
LCD_DO =0;
}
LCD_Delay();
LCD_CLK =1;
LCD_Delay();
B1 <<= 1;
}
return;
}
void process_iddata(unsigned char B1)
{
unsigned char E1;
for(E1=0;E1<3;++E1){
LCD_CLK = 0; /* WRITE DATA */
if( B1 & 0x04)
LCD_DO = 1;
else
LCD_DO = 0;
LCD_Delay();
LCD_CLK = 1; /* WRITE DATA */
LCD_Delay();
B1 <<= 1;
}
return;
}
#endif
#if (PT6523 | PT6524)
void Process_Send_Addr(unsigned char B1)
{
unsigned char i;
LCD_CE = 0;
LCD_CLK = 1;
for(i=0;i<8;++i){
LCD_CLK = 0;
if(B1 & 0x01) LCD_DO = 1;
else LCD_DO = 0;
LCD_CLK = 1;
B1 >>=1;
}
LCD_CE = 1;
return;
}
#endif
#if PT6523
void Pt6523_Control_Data(unsigned char B1)
{
unsigned char i;
for(i=0; i<4;++i) {
LCD_CLK = 0;
if(B1 & 0x01) LCD_DO = 1;
else LCD_DO = 0;
LCD_CLK = 1;
B1 >>=1;
}
return;
}
#endif
void Process_Ram_Data(unsigned char *DE1)
{
unsigned char B1 = 0;
unsigned char i;
unsigned char j;
temp_ptr = DE1;
#if LCD1621
for(j=0;j<LCD_MAX_BUF;++j) {
B1 = *temp_ptr;
for(i=0; i<8;++i) {
LCD_CLK = 0;
if(B1 & 0x01) LCD_DO = 1;
else LCD_DO = 0;
LCD_CLK = 1;
B1 >>=1;
}
++temp_ptr;
}
#endif
#if PT6523
for(j=0;j<19;++j) {
B1 = *temp_ptr;
for(i=0; i<8;++i) {
LCD_CLK = 0;
if(B1 & 0x01) LCD_DO = 1;
else LCD_DO = 0;
LCD_CLK = 1;
B1 >>=1;
}
++temp_ptr;
}
/* ************************************** */
B1 = *temp_ptr;
for(i=0;i<4;++i) {
LCD_CLK = 0;
if(B1 & 0x01) LCD_DO = 1;
else LCD_DO = 0;
LCD_CLK = 1;
B1 >>=1;
}
/* ************************************** */
#endif
#if PT6524
lcd_data = *temp_ptr;
lcdpos = 0;
Process_Send_Addr(0x41);
SendRamData();
Pt6524_Control_Data(control_data);
Send_COM_Data(COM1);
LCD_CLK = 1;
LCD_CE = 0;
Process_Send_Addr(0x41);
SendRamData();
Pt6524_Control_Data(0x0000);
Send_COM_Data(COM2);
LCD_CLK = 1;
LCD_CE = 0;
Process_Send_Addr(0x41);
SendRamData();
Pt6524_Control_Data(0x0000);
Send_COM_Data(COM3);
LCD_CLK = 1;
LCD_CE = 0;
Process_Send_Addr(0x41);
SendRamData();
Pt6524_Control_Data(0x0000);
Send_COM_Data(COM4);
LCD_CLK = 1;
LCD_CE = 0;
#endif
return;
}
#if PT6524
void Send_COM_Data(unsigned char B)
{
for(i=0;i<2;++i) {
LCD_CLK = 0;
if (B & 0x01) LCD_DO = 1;
else LCD_DO = 0;
LCD_CLK = 1;
B >>= 1;
}
return;
}
void SendRamData(void)
{
for(i=0;i<52;++i) {
LCD_CLK = 0;
if (lcd_data & 0x01) LCD_DO = 1;
else LCD_DO = 0;
LCD_CLK = 1;
++lcdpos;
lcd_data >>= 1;
if (lcdpos == 8) {
++temp_ptr;
lcd_data = *temp_ptr;
lcdpos = 0;
}
}
return;
}
void Pt6524_Control_Data(unsigned int BC)
{
for(i=0; i<10;++i) {
LCD_CLK = 0;
if(BC & 0x0001) LCD_DO = 1;
else LCD_DO = 0;
LCD_CLK = 1;
BC >>=1;
}
return;
}
#endif
void Write_Tuner_LCD(void)
{
#if LCD1621
if (Ht1621FlashTimer == 0) {
Ht1621FlashTimer = 10;/*1s*/
LCD1621init();
}
LCD_CE =0;
LCD_Delay();
process_iddata(0x05);
process_send_addr(0x00);
Process_Ram_Data(ShadowRam);
LCD_CE =1;
#endif
#if PT6523
Process_Send_Addr(0x41);
Process_Ram_Data(ShadowRam);
Pt6523_Control_Data(control_data);
LCD_CE = 0;
LCD_CLK = 1;
#endif
#if PT6524
Process_Ram_Data(ShadowRam);
#endif
Refresh_Lcd = 0;
return;
}
void Write_VCD_LCD(void)
{
#if LCD1621
if (Ht1621FlashTimer == 0) {
Ht1621FlashTimer = 10;/*1s*/
LCD1621init();
}
LCD_CE =0;
LCD_Delay();
process_iddata(0x05);
process_send_addr(0x00);
Process_Ram_Data(vcd_lcdbuff);
LCD_CE =1;
#endif
#if PT6523
Process_Send_Addr(0x41);
Process_Ram_Data(vcd_lcdbuff);
Pt6523_Control_Data(control_data);
LCD_CE = 0;
LCD_CLK = 1;
#endif
#if PT6524
Process_Ram_Data(vcd_lcdbuff);
#endif
Refresh_Lcd = 0;
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -