#include "SegLCD.h"
#include "delay.h"
/************* 本地变量声明 **************/
u8 data LCD_buff[8]={0}; //LCD显存
u8 data LCD_test[8] = {1,2,3,4,5,6,7,8}; //test
u8 code t_display[17] = {
a + b + c + d + e + f, // Displays "0"0
b + c, // Displays "1"1
a + b + g + e + d, // Displays "2"2
a + b + g + c + d, // Displays "3"3
f + g + b + c, // Displays "4"4
a + f + g + c +d, // Displays "5"5
a + f + e + d + c + g , // Displays "6"6
a + b + c, // Displays "7"7
a + b + c + d + e + f + g , // Displays "8"8
a + b + c + d + f + g, // Displays "9"9
a + b + c + e + f + g, // Displays "A"10
b + c + d + e + g, // Displays "d"11
e + g, // Displays "r"12
f + e + g + c + d, // Displays "b"13
f + e + d + c + b, // Displays "u"14
f + g + b + c + d, // Displays "y"15
a + f + e + d, // Displays "c"16
};
/*A10 b11 C12 d13 E14 F15 H16 -17 .19 NL18*/
/******************************************
LCD: ~日 日:日.日.日.~日
硬件连接:
COM0---P5.0 SEG17---P4.6 SEG18--P4.5 SEG19--P2.7
COM1---P5.1 SEG20---P2.6 SEG21--P2.5 SEG22--P2.4
COM2---P3.5 SEG23---P2.3 SEG24--P2.2 SEG25--P2.1
COM3---P3.6 SEG26---P2.0 SEG27--P4.4 SEG28--P4.3
SEG29---P4.2 SEG30--P4.1 SEG31--P3.7
B7 B6 B5 B4 B3 B2 B1 B0
C0SEGV2 23~17 数据寄存器LCD_buff[0]: T15 T16 T6 - T5 SN T11 -
C0SEGV3 31~24 数据寄存器LCD_buff[1]: 1A 1B 2A 2B 3A 3B 4A 4B
C1SEGV2 23~17 数据寄存器LCD_buff[2]: T18 T19 T7 - T4 CO T12 -
C1SEGV3 31~24 数据寄存器LCD_buff[3]: 1F 1G 2F 2G 3F 3G 4F 4G
C2SEGV2 23~17 数据寄存器LCD_buff[4]: T20 T21 T8 - T3 T10 T13 -
C2SEGV3 31~24 数据寄存器LCD_buff[5]: 1E 1C 2E 2C 3E 3C 4E 4C
C3SEGV2 23~17 数据寄存器LCD_buff[6]: T22 T23 T9 - T2 T1 T14 -
C3SEGV3 31~24 数据寄存器LCD_buff[7]: 1D P1 2D P2 3D P3 4D T17
******************************************/
/********************** LCD配置函数 *****************************/
void LCD_config(void)
{
P_SW2 |= 0x80; //SFR enable
HIRCCR = 0x80; //启动内部 32K 振荡器
while (!(HIRCCR & 0x01)); //等待时钟稳定
MainFosc_IRC24M();
LCDCFG = 0x00 + 0; // 0x00:选择CPU时钟为LCD时钟, 0x80: 选择外部32K晶振做时钟. VLCD电压选择0~7对应0.65+VLCD*0.05.
DBLEN = 2; // 设置LCD显示时的死区时间长度, 取值0~7.
COMLENH = 0x00; // COM时间长度设置 高字节COMLEN[19:16], 一共20bit.
COMLENM = 0x00; // COM时间长度设置 中字节COMLEN[15:8] LCD刷新率 = LCD时钟频率 / ((DBLEN[2:0]+COMLEN[19:0]+1) *2 * COM数)
COMLENL = 65; // COM时间长度设置 低字节COMLEN[7:0] LCD刷新率 = 11059200/((2+227+1)*2*4) = 60Hz 32768/((2+65+1)*2*4) = 60Hz
BLINKRATE = 60; // 闪烁率配置寄存器, LCD闪烁率 = LCD刷新率 / BLINKRATE[7:0] Hz
COMON = 0x0f; // COM使能寄存器
SEGON3 = 0xFE; // SEG线使能寄存器3, SEG23~SEG16
SEGON4 = 0xFF; // SEG线使能寄存器4, SEG31~SEG24
LCDCR = (0<<1) + 1; // LCD控制寄存器, 0:普通模式, 1:长暗模式, 2:长亮模式, 3:闪烁模式. +0:禁止LCD模块, +1:允许LCD模块.
}
void LCD_load(u8 n, u8 dat) //n为第几个数字,为1~5,dat为要显示的数字
{
switch (n)
{
/* Position 1 on LCD (Digit1)*/
case 1:
LCD_buff[1]&=(~0x80);
LCD_buff[1]|=((t_display[dat]<<7)&0x80); // 1A
LCD_buff[3]&=(~0x80);
LCD_buff[3]|=((t_display[dat]<<2)&0x80); // 1F
LCD_buff[5]&=(~0x80);
LCD_buff[5]|=((t_display[dat]<<3)&0x80); // 1E
LCD_buff[7]&=(~0x80);
LCD_buff[7]|=((t_display[dat]<<4)&0x80); // 1D
LCD_buff[1]&=(~0x40);
LCD_buff[1]|=((t_display[dat]<<5)&0x40); // 1B
LCD_buff[3]&=(~0x40);
LCD_buff[3]|=((t_display[dat])&0x40); // 1G
LCD_buff[5]&=(~0x40);
LCD_buff[5]|=((t_display[dat]<<4)&0x40); // 1C
// LCD_buff[7]&=(~0x40);
// LCD_buff[7]|=((t_display[dat]<<3)&0x40); // 1H
break;
case 2:
LCD_buff[1]&=(~0x20);
LCD_buff[1]|=((t_display[dat]<<5)&0x20); // 1A
LCD_buff[3]&=(~0x20);
LCD_buff[3]|=(t_display[dat]&0x20); // 1F
LCD_buff[5]&=(~0x20);
LCD_buff[5]|=((t_display[dat]<<1)&0x20); // 1E
LCD_buff[7]&=(~0x20);
LCD_buff[7]|=((t_display[dat]<<2)&0x20); // 1D
LCD_buff[1]&=(~0x10);
LCD_buff[1]|=((t_display[dat]<<3)&0x10); // 1B
LCD_buff[3]&=(~0x10);
LCD_buff[3]|=((t_display[dat]>>2)&0x10); // 1G
LCD_buff[5]&=(~0x10);
LCD_buff[5]|=((t_display[dat]<<2)&0x10); // 1C
// LCD_buff[7]&=(~0x10);
// LCD_buff[7]|=((t_display[dat]<<1)&0x10); // 1H
break;
case 3:
LCD_buff[1]&=(~0x08);
LCD_buff[1]|=((t_display[dat]<<3)&0x08); // 1A
LCD_buff[3]&=(~0x08);
LCD_buff[3]|=((t_display[dat]>>2)&0x08); // 1F
LCD_buff[5]&=(~0x08);
LCD_buff[5]|=((t_display[dat]>>1)&0x08); // 1E
LCD_buff[7]&=(~0x08);
LCD_buff[7]|=((t_display[dat])&0x08); // 1D
LCD_buff[1]&=(~0x04);
LCD_buff[1]|=((t_display[dat]<<1)&0x04); // 1B
LCD_buff[3]&=(~0x04);
LCD_buff[3]|=((t_display[dat]>>4)&0x04); // 1G
LCD_buff[5]&=(~0x04);
LCD_buff[5]|=((t_display[dat])&0x04); // 1C
// LCD_buff[7]&=(~0x04);
// LCD_buff[7]|=((t_display[dat]>>1)&0x04); // 1H
break;
case 4:
LCD_buff[1]&=(~0x02);
LCD_buff[1]|=((t_display[dat]<<1)&0x02); // 1A
LCD_buff[3]&=(~0x02);
LCD_buff[3]|=((t_display[dat]>>4)&0x02); // 1F
LCD_buff[5]&=(~0x02);
LCD_buff[5]|=((t_display[dat]>>3)&0x02); // 1E
LCD_buff[7]&=(~0x02);
LCD_buff[7]|=((t_display[dat]>>2)&0x02); // 1D
LCD_buff[1]&=(~0x01);
LCD_buff[1]|=((t_display[dat]>>1)&0x01); // 1B
LCD_buff[3]&=(~0x01);
LCD_buff[3]|=((t_display[dat]>>6)&0x01); // 1G
LCD_buff[5]&=(~0x01);
LCD_buff[5]|=((t_display[dat]>>2)&0x01); // 1C
// LCD_buff[7]&=(~0x01);
// LCD_buff[7]|=((t_display[dat]>>3)&0x01); // 1H
break;
default:
break;
}
}
/********************** 将显示内容导入显存 *****************************/
void LoadToLcd(void)
{
LCD_buff[2]|=0x20; //温度
C0SEGV2 = LCD_buff[0]; // C0SEGV1 15~8数据寄存器
C0SEGV3 = LCD_buff[1]; // C0SEGV2 23~16数据寄存器
C1SEGV2 = LCD_buff[2]; // C1SEGV1 15~8数据寄存器
C1SEGV3 = LCD_buff[3]; // C1SEGV2 23~16数据寄存器
C2SEGV2 = LCD_buff[4]; // C2SEGV1 15~8数据寄存器
C2SEGV3 = LCD_buff[5]; // C2SEGV2 23~16数据寄存器
C3SEGV2 = LCD_buff[6]; // C3SEGV1 15~8数据寄存器
C3SEGV3 = LCD_buff[7]; // C3SEGV2 23~16数据寄存器
}
STC8H4K64UTLCD驱动断码屏底层驱动
需积分: 5 194 浏览量
2023-10-27
11:56:27
上传
评论
收藏 298KB ZIP 举报
胡三月
- 粉丝: 6
- 资源: 6
最新资源
- 原生微信小程序源码 - -仿豆瓣图书
- 原生微信小程序源码 - -滴滴公交-查公交
- 人工智能实验四 感知器算法的设计实现
- java小项目多线程多线程 复制文件 冒泡排序 群聊
- 四数之和(java代码).docx
- 701837906919458TapScanner v3.0.10 (Pro).apk
- 青岛大学人工智能实验二 利用α-β搜索的博弈树算法编写一字棋游戏
- ### 1、项目介绍 本项目Scrapy进行数据爬取,并使用Django框架+PyEcharts实现可视化大屏 效果如下:
- # 微信小程序-健康菜谱 基于微信小程序的一个查找检索菜谱的应用 ### 效果 !动态图(./res/gif/demo
- zabbix-get命令包资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈