⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 display.c

📁 a gps program
💻 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 + -