📄 lcd.c
字号:
/******** LCD driver controller: LC75853N(SANYO)*********/
#include "global.h"
#include "util.h"
#include "lcd.h"
#define SET_LCD_DOUT LCD_DOUT = 1;
#define CLEAR_LCD_DOUT LCD_DOUT = 0;
#define SET_LCD_CLK LCD_CLK = 1;
#define CLEAR_LCD_CLK LCD_CLK = 0;
#define SET_LCD_DATA LCD_DATA = 1;
#define CLEAR_LCD_DATA LCD_DATA = 0;
#define SET_LCD_STROBE LCD_STROBE = 1;
#define CLEAR_LCD_STROBE LCD_STROBE = 0;
unsigned char idata KeyData = 0;
unsigned char idata LCD_min_H;
unsigned char idata LCD_min_L;
unsigned char idata LCD_sec_H;
unsigned char idata LCD_sec_L;
unsigned char idata LCD_seg_8;
unsigned char Old_key = 0;
extern bit bdata memory_flash;
extern bit bdata STEREO_FLAG;
extern unsigned char idata volume_level;
extern unsigned char idata _timer0;
extern unsigned char timer2;
extern unsigned char Chanel;
extern unsigned long Display_Char;
/* 7 */ /* c1 c2 c3 c4 */
unsigned int code turn_char[] ={0x1A00,0x3800,0x3200,0x2A00};
unsigned int code Band_cha_H[] ={0x1F40,0x1A40}; /* NO.1 */
unsigned int code Band_cha_L[] ={0x0018,0x0018}; /* NO.2 */
unsigned int code Col2_char[] ={0,0x0020}; /* NO.5 */
/* NO.2 */ /*10 M N E V*/
unsigned int code seg4_char[] ={0x0FC0,0x0C00,0x2B40,0x2F00,0x2C80,0x2780,0x27C0,0x0D00,0x2FC0,0x2F80,0x0000,0x8DC0,0x5CC0,0x23C0,0x5C00};
/* NO.5 */ /*10 D Y P T */
unsigned int code seg8_char[] ={0x0FC0,0x0C00,0x2B40,0x2F00,0x2C80,0x2780,0x27C0,0x0D00,0x2FC0,0x2F80,0x0000,0x5F00,0x2E80,0x29C0,0x5100};
/* NO.3 */ /*10 L P E J U */
unsigned int code seg5_char[] ={0x03F0,0x0300,0x0AD0,0x0BC0,0x0B20,0x09E0,0x09F0,0x0340,0x0BF0,0x0BE0,0x0000,0x00B0,0x0A70,0x08F0,0x03D0,0x03B0};
/* NO.3 */ /*10 L M D E T */
unsigned int code seg6_char_H[] ={0xE000,0x0000,0xA000,0x8000,0x4000,0xC000,0xE000,0x8000,0xE000,0xC000,0x0000,0x6000,0xE000,0x8000,0xE000,0x8000};
/* NO.4 */ /*10 L M D E T */
unsigned int code seg6_char_L[] ={0x001C,0x0018,0x0054,0x005C,0x0058,0x004C,0x004C,0x0018,0x005C,0x005C,0x0000,0x0004,0x00B8,0x00BC,0x0044,0x00A0};
/* NO.4*/ /*10 A C E*/
unsigned int code seg7_char[] ={0x3F00,0x3000,0xAD00,0xBC00,0xB200,0x9E00,0x9F00,0x3400,0xBF00,0xBE00,0x0000,0xB700,0x0F00,0x8F00};
/* NO.6 */
unsigned int code seg9_char[] ={0x03F0,0x0300,0x0AD0,0x0BC0,0x0BA0,0x09E0,0x09F0,0x0340,0x0BF0,0x0BE0,0x0000};
/* NO.6 */
unsigned int code seg10_char_H[] ={0xE000,0x0000,0xA000,0x8000,0x4000,0xC000,0xE000,0x8000,0xE000,0xC000,0x0000};
/* NO.7 */
unsigned int code seg10_char_L[] ={0x001C,0x0018,0x0054,0x005C,0x0058,0x004C,0x004C,0x0018,0x005C,0x005C,0x0000};
/* NO.8 */
unsigned int code vol_disp_char_H[] ={0x0004,0x0024,0x0124,0x0924,0x4924};
/* NO.9 */
unsigned int code vol_disp_char_L[] ={0x0008,0x0048,0x0248};
/* NO.7 */
unsigned int code vol_L_indicator_H[] ={0x4000};
/* NO.8 */
unsigned int code vol_L_indicator_M[] ={0x0008,0x0048,0x0248,0x1248,0x9248};
/* NO.9 */
unsigned int code vol_L_indicator_L[] ={0x0010,0x0090};
/* NO.7 */
unsigned int code vol_R_indicator_H[] ={0x8000};
/* NO.8 */
unsigned int code vol_R_indicator_M[] ={0x0010,0x0090,0x0490,0x2490};
/* NO.9 */
unsigned int code vol_R_indicator_L[] ={0x0020,0x0120};
#define ICON_in 0x0400 /* seven */
#define ICON_clsc 0x0004 /* one */
#define ICON_pop 0x0008 /* one */
#define ICON_rock 0x0010 /* one */
#define ICON_double_loop 0x0004 /* three */
#define ICON_st 0x0004 /* two */
#define ICON_loc 0x0020 /* two */
#define ICON_disc_UP 0x0008 /* six */
#define ICON_lou 0x0008 /* three */
#define ICON_scn 0x1000 /* six */
#define ICON_disc_DN 0x0004 /* six */
#define ICON_rpt 0x0100 /* seven */
#define ICON_rdm 0x0400 /* six */
#define ICON_swf 0x0008 /* five */
#define ICON_track 0x0020 /* seven */
#define ICON_CH 0x0080 /* seven */
void updateLCDtime(void)
{
unsigned int temp;
unsigned char LCD_temp;
LCD_temp = 0;
if(Band==FM_IN){
LCD_min_H = 0;
LCD_min_L = 0;
LCD_sec_H = 0;
LCD_sec_L = 0;
if(Divisor > 99999){
LCD_min_H = Divisor/100000;
temp = Divisor%100000;
LCD_min_L = temp/10000;
temp = temp%10000;
LCD_sec_H = temp/1000;
temp = temp%1000;
LCD_sec_L = temp/100;
if(temp%100 == 50){
LCD_seg_8 = 5;
} else {
LCD_seg_8 = 10; /*0x0000*/
}
} else {
LCD_min_H = 10;
LCD_min_L = Divisor/10000;
temp = Divisor%10000;
LCD_sec_H = temp/1000;
temp = temp%1000;
LCD_sec_L = temp/100;
if(temp%100 == 50){
LCD_seg_8 = 5;
} else {
LCD_seg_8 = 10; /*0x0000*/
}
}
}else{
LCD_min_H = 0;
LCD_min_L = 0;
LCD_sec_H = 0;
LCD_sec_L = 0;
LCD_seg_8 = 10;
if(Divisor > 999){
LCD_min_H = Divisor/1000;
temp = Divisor%1000;
LCD_min_L = temp/100;
temp = temp%100;
LCD_sec_H = temp/10;
temp = temp%10;
LCD_sec_L = temp;
} else {
LCD_min_H = 10;
LCD_min_L = Divisor/100;
temp = Divisor%100;
LCD_sec_H = temp/10;
temp = temp%10;
LCD_sec_L = temp;
}
}
CLEAR_LCD_STROBE; /* CE */
LCD_objectSendByte1(0x42); /* Address */
SET_LCD_STROBE; /* CE */
LCD_objectSendByte4(Band_cha_H[Band]);
LCD_objectSendByte4(Band_cha_L[Band] | seg4_char[LCD_min_H]); /*7seg4_char[Min_H]*/
LCD_objectSendByte4(seg5_char[LCD_min_L] | seg6_char_H[LCD_sec_H]); /*LCD_sec_H*/
LCD_objectSendByte4(0);
CLEAR_LCD_STROBE;
LCD_objectSendByte1(0x42); /* Address */
SET_LCD_STROBE; /* CE */
LCD_objectSendByte4(seg6_char_L[LCD_sec_H] | seg7_char[LCD_sec_L]); /*Sec_H_L | Sec_L*/
LCD_objectSendByte4(Col2_char[Band] | seg8_char[LCD_seg_8]);
LCD_objectSendByte4(0);
LCD_objectSendByte4(0x8000);
CLEAR_LCD_STROBE;
LCD_objectSendByte1(0x42); /* Address */
SET_LCD_STROBE; /* CE */
LCD_objectSendByte4(0);
LCD_objectSendByte4(0);
LCD_objectSendByte4(0);
LCD_objectSendByte4(0x4000);
CLEAR_LCD_STROBE;
CLEAR_LCD_DATA;
}
void LCD_state_init(void)
{
SET_LCD_DOUT; /* DO */
CLEAR_LCD_STROBE; /* CE */
CLEAR_LCD_DATA; /* DI */
SET_LCD_CLK; /* CLK */
CLEAR_LCD_STROBE; /* CE */
LCD_objectSendByte1(0x42); /* Address */
SET_LCD_STROBE; /* CE */
LCD_objectSendByte4(0);
LCD_objectSendByte4(0x2CC0);
LCD_objectSendByte4(0x68F0);
LCD_objectSendByte4(0);
CLEAR_LCD_STROBE;
LCD_objectSendByte1(0x42); /* Address */
SET_LCD_STROBE; /* CE */
LCD_objectSendByte4(0x0B04);
LCD_objectSendByte4(0x0FC0);
LCD_objectSendByte4(0);
LCD_objectSendByte4(0x8000);
CLEAR_LCD_STROBE;
LCD_objectSendByte1(0x42); /* Address */
SET_LCD_STROBE; /* CE */
LCD_objectSendByte4(0xFA00);
LCD_objectSendByte4(0x04DC);
LCD_objectSendByte4(0);
LCD_objectSendByte4(0x4000);
CLEAR_LCD_STROBE;
CLEAR_LCD_DATA;
}
void updateDisplay_Char(void)
{
unsigned char Char_4 = 0;
unsigned char Char_5 = 0;
unsigned char Char_6 = 0;
unsigned char Char_7 = 0;
unsigned char Char_8 = 0;
unsigned char Char_9 = 0;
unsigned char Char_10 = 0;
if(Display_Char == 0xBDCAA){ /*MEMORY*/
Char_9 = Chanel/10;
Char_10 = Chanel%10;
} else {
Char_9 = 10;
Char_10 = 10;
}
if(Display_Char == 0xE0BAA){ /*VOLUME*/
Char_9 = volume_level/10;
Char_10 = volume_level%10;
} else {
Char_9 = 10;
Char_10 = 10;
}
Char_8 = Display_Char & 0x0F;
Display_Char >>=4;
Char_7 = Display_Char & 0x0F;
Display_Char >>=4;
Char_6 = Display_Char & 0x0F;
Display_Char >>=4;
Char_5 = Display_Char & 0x0F;
Display_Char >>=4;
Char_4 = Display_Char & 0x0F;
Display_Char >>=4;
SET_LCD_DOUT;
CLEAR_LCD_STROBE;
CLEAR_LCD_DATA;
SET_LCD_CLK;
CLEAR_LCD_STROBE;
LCD_objectSendByte1(0x42);
SET_LCD_STROBE;
LCD_objectSendByte4(0);
LCD_objectSendByte4(seg4_char[Char_4]);
LCD_objectSendByte4(seg5_char[Char_5] | seg6_char_H[Char_6]);
LCD_objectSendByte4(0);
CLEAR_LCD_STROBE;
LCD_objectSendByte1(0x42);
SET_LCD_STROBE;
LCD_objectSendByte4(seg6_char_L[Char_6] | seg7_char[Char_7]);
LCD_objectSendByte4(seg8_char[Char_8]);
LCD_objectSendByte4(seg9_char[Char_9] | seg10_char_H[Char_10]);
LCD_objectSendByte4(0x8000);
CLEAR_LCD_STROBE;
LCD_objectSendByte1(0x42);
SET_LCD_STROBE;
LCD_objectSendByte4(seg10_char_L[Char_10]);
LCD_objectSendByte4(0);
LCD_objectSendByte4(0);
LCD_objectSendByte4(0x4000);
CLEAR_LCD_STROBE;
CLEAR_LCD_DATA;
}
void LCD_objectSendByte1(unsigned char SendByte)
{
unsigned char i;
for (i = 0; i < 8; i++) {
if (SendByte & 0x01) {
SET_LCD_DATA;
} else {
CLEAR_LCD_DATA;
}
CLEAR_LCD_CLK;
CLEAR_LCD_CLK;
SendByte >>= 1;
SET_LCD_CLK;
}
}
void LCD_objectSendByte4(unsigned int dispdata)
{
unsigned int i;
dispdata >>= 2;
for (i = 0; i < 14; i++){
if (dispdata & 0x01) {
SET_LCD_DATA;
} else {
CLEAR_LCD_DATA;
}
CLEAR_LCD_CLK;
dispdata >>= 1;
SET_LCD_CLK;
}
}
unsigned char Read_key(void)
{
unsigned char i;
unsigned long key_value = 0;
if(LCD_DOUT) return 0;
CLEAR_LCD_STROBE;
LCD_objectSendByte1(0x43); /* Address */
SET_LCD_STROBE;
CLEAR_LCD_CLK;
for (i = 0; i < 32; i++)
{
key_value >>=1;
SET_LCD_CLK;
if(LCD_DOUT){
key_value |= 0x80000000;
}
CLEAR_LCD_CLK;
}
CLEAR_LCD_STROBE;
SET_LCD_DOUT;
key_value |= 0x302013;
if((key_value & 0x0000FF) != 0x000013){
KeyData = key_value & 0xFF;
} else if((key_value & 0x00FF00) != 0x002000){
key_value >>= 8;
KeyData = key_value & 0xFF;
} else if((key_value & 0xFF0000) != 0x300000){
key_value >>= 16;
KeyData = key_value & 0xFF; /* jy add & chang */
}
if(timer2 == 0) Old_key = 0;
if(KeyData == Old_key){
return 0;
} else {
Old_key = KeyData;
return KeyData;
}
}
#if 0
void LCD_Turn_char(void)
{
CLEAR_LCD_STROBE; /* CE */
LCD_objectSendByte1(0x42); /* Address */
SET_LCD_STROBE; /* CE */
LCD_objectSendByte4(0);
LCD_objectSendByte4(0);
LCD_objectSendByte4(0);
LCD_objectSendByte4(0);
CLEAR_LCD_STROBE;
LCD_objectSendByte1(0x42); /* Address */
SET_LCD_STROBE; /* CE */
LCD_objectSendByte4(0);
LCD_objectSendByte4(0);
LCD_objectSendByte4(0);
LCD_objectSendByte4(0x8000);
CLEAR_LCD_STROBE;
LCD_objectSendByte1(0x42); /* Address */
SET_LCD_STROBE; /* CE */
LCD_objectSendByte4(turn_char[_timer0]);
LCD_objectSendByte4(0);
LCD_objectSendByte4(0);
LCD_objectSendByte4(0x4000);
CLEAR_LCD_STROBE;
//CLEAR_LCD_DOUT;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -