📄 display.c
字号:
#include "includes.h"
#include "display.h"
#include "eeprom.h"
sbit LCD_CS = P2^2;
sbit LCD_WR = P2^1;
sbit LCD_DA = P2^0;
uchar LCD[20] = {
0xd7, 0xc0, 0x9d, 0xdc, 0xca,
0x5e, 0x5f, 0xd0, 0xdf, 0xde,
0x00, 0x08, 0x9b, 0xdb
};
void WriteCmd(uint cmd)
{
uint temp;
uchar i;
temp = cmd << 5;
temp |= 0x8000;
LCD_CS = 1;
LCD_WR = 1;
LCD_DA = 1;
LCD_CS = 0;
for (i = 0; i < 12; i++) {
LCD_WR = 0;
if ((temp & 0x8000) != 0)
LCD_DA = 1;
else
LCD_DA = 0;
LCD_WR = 1;
temp = temp << 1;
}
LCD_WR = 1;
LCD_DA = 1;
LCD_CS = 1;
}
void WriteDat(uchar add, uchar dat)
{
uint temp;
uchar i;
temp = (add << 3) | dat;
temp = temp << 4;
temp |= 0xa000;
LCD_CS = 1;
LCD_WR = 1;
LCD_DA = 1;
LCD_CS = 0;
for (i = 0; i < 13; i++) {
LCD_WR = 0;
if ((temp & 0x8000) != 0)
LCD_DA = 1;
else
LCD_DA = 0;
LCD_WR = 1;
temp = temp << 1;
}
LCD_WR = 1;
LCD_DA = 1;
LCD_CS = 1;
}
void DisSet(char menu, char coun)
{
switch (menu) {
case 1:
DisSon(0, 11, 0);
DisSon(1, 1, 0);
DisSon(2, 11, 0);
switch (coun) {
case 0:
DisSon(4, 0, 0);
break;
case 1:
DisSon(4, 1, 0);
break;
default:
break;
}
break;
case 2:
DisSon(0, 11, 0);
DisSon(1, 1, 0);
DisSon(2, 11, 0);
switch (coun) {
case 0:
DisSon(3, 1, 0);
DisSon(4, 9, 0);
DisSon(5, 2, 0);
DisSon(6, 0, 0);
DisSon(7, 0, 0);
break;
case 1:
DisSon(3, 9, 0);
DisSon(4, 6, 0);
DisSon(5, 0, 0);
DisSon(6, 0, 0);
DisSon(7, 10, 0);
break;
case 2:
DisSon(3, 4, 0);
DisSon(4, 8, 0);
DisSon(5, 0, 0);
DisSon(6, 0, 0);
DisSon(7, 10, 0);
break;
case 3:
DisSon(3, 2, 0);
DisSon(4, 4, 0);
DisSon(5, 0, 0);
DisSon(6, 0, 0);
DisSon(7, 10, 0);
break;
case 4:
DisSon(3, 1, 0);
DisSon(4, 2, 0);
DisSon(5, 0, 0);
DisSon(6, 0, 0);
DisSon(7, 10, 0);
break;
case 5:
DisSon(3, 6, 0);
DisSon(4, 0, 0);
DisSon(5, 0, 0);
DisSon(6, 10, 0);
DisSon(7, 10, 0);
break;
case 6:
DisSon(3, 3, 0);
DisSon(4, 0, 0);
DisSon(5, 0, 0);
DisSon(6, 10, 0);
DisSon(7, 10, 0);
break;
default:
break;
}
break;
default:
break;
}
}
void Clear(void)
{
uchar i;
for (i = 0; i < 8; i++)
DisSon(i, 10, 0);
DisSon1(0, 0);
DisSon1(1, 0);
DisSon1(2, 0);
}
void DisSon(uchar num, uchar dat, bit dp)
{
uchar addr, temp;
switch (num) {
case 0:
addr = 29;
break;
case 1:
addr = 26;
break;
case 2:
addr = 22;
break;
case 3:
addr = 19;
break;
case 4:
addr = 15;
break;
case 5:
addr = 12;
break;
case 6:
addr = 8;
break;
case 7:
addr = 5;
break;
default:
break;
}
temp = LCD[dat];
if (dp == 1)
WriteDat(addr, (temp >> 5) | 0x01);
else
WriteDat(addr, (temp >> 5));
addr += 1;
WriteDat(addr, (temp >> 2) & 0x07);
addr += 1;
WriteDat(addr, ((temp << 1) & 0x06));
}
void DisSon1(uchar num, bit flag)
{
uchar addr;
switch (num) {
case 0:
addr = 25;
break;
case 1:
addr = 18;
break;
case 2:
addr = 11;
break;
default:
break;
}
if (flag)
WriteDat(addr, 0x01);
else
WriteDat(addr, 0x00);
}
void DisplayInit(void)
{
WriteCmd(0x24);
DelayMs(20);
WriteCmd(0x18);
DelayMs(20);
WriteCmd(0x01);
DelayMs(20);
WriteCmd(0x03);
Clear();
}
/*LCD显示子函数*/
void Display(void)
{
switch (MenuCoun) {
case 0:
DisSon(0, Hour / 10, 0);
DisSon(1, Hour % 10, 0);
DisSon(2, Minute / 10, 0);
DisSon(3, Minute % 10, 0);
DisSon(4, Second / 10, 0);
DisSon(5, Second % 10, 0);
DisSon1(0, 1);
DisSon1(1, 1);
if (FlagSYN)
DisSon(7, 10, 0);
else
DisSon(7, 11, 0);
break;
case 1:
DisSon(0, Year / 10, 0);
DisSon(1, Year % 10, 0);
DisSon(2, 11, 0);
DisSon(3, Month / 10, 0);
DisSon(4, Month % 10, 0);
DisSon(5, 11, 0);
DisSon(6, Day / 10, 0);
DisSon(7, Day % 10, 0);
break;
case 2:
DisSon(0, Latitude[0] - '0', 0);
DisSon(1, Latitude[1] - '0', 0);
DisSon(2, Latitude[2] - '0', 0);
DisSon(3, Latitude[3] - '0', 1);
DisSon(4, Latitude[5] - '0', 0);
DisSon(5, Latitude[6] - '0', 0);
DisSon(6, Latitude[7] - '0', 0);
DisSon(7, Latitude[8] - '0', 0);
break;
case 3:
DisSon(0, Longitude[0] - '0', 0);
DisSon(1, Longitude[1] - '0', 0);
DisSon(2, Longitude[2] - '0', 0);
DisSon(3, Longitude[3] - '0', 0);
DisSon(4, Longitude[4] - '0', 1);
DisSon(5, Longitude[6] - '0', 0);
DisSon(6, Longitude[7] - '0', 0);
DisSon(7, Longitude[8] - '0', 0);
break;
case 4:
DisSon(2, Frequency % 100000 / 10000, 0);
DisSon(3, Frequency % 10000 / 1000, 1);
DisSon(4, Frequency % 1000 / 100, 0);
DisSon(5, Frequency % 100 / 10, 0);
DisSon(6, Frequency % 10, 0);
break;
case 5:
DisSon(0, 12, 0);
DisSon(1, 0, 0);
DisSon(2, 0, 0);
DisSon(3, 11, 0);
if (Set[0] > 2)
Set[0] = 0;
if (Flash)
DisSon(4, Set[0], 0);
else
DisSon(4, 10, 0);
break;
case 6:
DisSon(0, 12, 0);
DisSon(1, 1, 0);
DisSon(2, 0, 0);
DisSon(3, 11, 0);
if (Set[1] > 2)
Set[1] = 0;
if (Flash)
DisSon(4, Set[1], 0);
else
DisSon(4, 10, 0);
break;
case 7:
DisSon(0, 12, 0);
DisSon(1, 1, 0);
DisSon(2, 1, 0);
DisSon(3, 11, 0);
if (Set[2] > 2)
Set[2] = 0;
if (Flash) {
switch (Set[2]) {
case 0:
DisSon(4, 2, 0);
DisSon(5, 4, 0);
break;
case 1:
DisSon(4, 4, 0);
DisSon(5, 8, 0);
break;
case 2:
DisSon(4, 9, 0);
DisSon(5, 6, 0);
break;
default:
break;
}
DisSon(6, 0, 0);
DisSon(7, 0, 0);
}
else {
DisSon(4, 10, 0);
DisSon(5, 10, 0);
DisSon(6, 10, 0);
DisSon(7, 10, 0);
}
break;
case 8:
DisSon(0, 12, 0);
DisSon(1, 13, 0);
DisSon(2, 0, 0);
DisSon(3, 11, 0);
if (Set[3] > 1)
Set[3] = 0;
if (Flash)
DisSon(4, Set[3], 0);
else
DisSon(4, 10, 0);
break;
case 9:
DisSon(0, 12, 0);
DisSon(1, 13, 0);
DisSon(2, 1, 0);
DisSon(3, 11, 0);
if (Set[4] > 1)
Set[4] = 0;
if (Flash) {
if (Set[4] == 0)
DisSon(4, 2, 0);
else
DisSon(4, 4, 0);
}
else {
DisSon(4, 10, 0);
}
break;
case 10:
DisSon(0, 12, 0);
DisSon(1, 13, 0);
DisSon(2, 2, 0);
DisSon(3, 11, 0);
if (Set[5] > 1)
Set[5] = 0;
if (Flash)
DisSon(4, Set[5], 0);
else
DisSon(4, 10, 0);
break;
case 11:
DisSon(0, 12, 0);
DisSon(1, 13, 0);
DisSon(2, 3, 0);
DisSon(3, 11, 0);
if (Set[6] > 1)
Set[6] = 0;
if (Flash)
DisSon(4, Set[6], 0);
else
DisSon(4, 10, 0);
break;
default:
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -