📄 gaoding.c
字号:
#include <C8051F020.h> // Register definition file.
#include <stdio.h>
#define SYSCLK 22118400 //定义系统时钟22.1184MHz
typedef unsigned int uint;
typedef unsigned char uchar;
typedef unsigned long ulong;
/*=======基本指令集=========*/
#define Base_Module 0x30 /*基本指令集*/
#define Clear_Display 0x01 /*清除显示器,清除DDRAM*/
#define Go_Origin 0x02 /*光标返回到原点,AC=0,DDRAM不变*/
#define Right_ACAdd 0x06 //设定光标移动方向,光标右移 AC+1
#define Left_ACDec 0x04 //设定光标移动方向,光标左移,AC-1
#define Clear_Screen 0x08 /*显示器关闭*/
#define On_Screen 0x0c /*显示器打开*/
#define Off_Cursor 0x0d /*光标显示关*/
#define On_Cursor 0x0e /*光标显示开*/
#define Reverse_Current 0x0f /*光标位置显示取反*/
#define LeftShift_Cursor 0x10 /*光标左移,AC-1*/
#define RightShift_All 0x18 /*画面整体左移*/
#define RightShift_Cursor 0x14 /*光标右移,AC+1*/
#define LeftShift_All 0x1c /*画面整体右移*/
/*=======扩充指令集=========*/
#define Expand_Module 0x34 /*扩充指令集*/
//#define Wait_Module 0x01 //进入待命模式,执行任何其他指令都可
//终止待命模式,只保留COM33显示
#define Enable_ICGRAMBitAddr 0x02 /*允许输入IRAM,CGRAM位址*/
#define Enable_UprightnessBitAddr 0x03 /*允许输入垂直滚动位址*/
#define Reverse_WhiteOne 0x04 /*选择4行中的一行反白*/
#define Reverse_WhiteSecond 0x05 /*选择4行中的二行反白*/
#define On_ Sleep 0x08 /*进入睡眠模式*/
#define Off_Sleep 0x0c /*脱离睡眠模式*/
#define On_Plot 0x36 /*绘图显示开*/
#define Off_Plot 0x34 /*绘图显示关*/
//接口定义////////////////////////////////////
sbit LCDRS = P3^0; // H---DATA, L---INSTRUCT
sbit LCDRW = P3^1; // H---READ, L---WRITE
sbit LCDE = P3^2; // 下降沿---写数据, 高---读数据, 低或上升沿无动作
sbit LCDPSB = P3^3; // 1--并行,0--串行
#define LCDDB = P7; // DATA
//LCD寄存器定义//////////////////////////////
data LCD_DAT;
data LCD_COM;
//外部晶振初始化/////////////////////////////
void SYSCLK_Init ()
{
int i; // 延时计数器
OSCXCN = 0x67; // 开启外部振荡器22.1184MHz晶体
for (i=0; i < 256; i++) ; // 等待振荡器启振
while (!(OSCXCN & 0x80)); // 等待晶体振荡器稳定
OSCICN = 0x88; // 选择外部振荡器为系统时钟源并允许丢失时钟检测器
}
// 交叉开关配置,管脚输入输出配置
void XBR_Init()
{
XBR0 = 0x00; //不配置特殊功能
XBR1 = 0x00;
XBR2 = 0x40; //使能交叉开关,并且总体弱上拉
}
//发送控制命令到LCD
void LCDWRT_COM(unsigned char COM)
{
unsigned char temp;
unsigned int i;
LCDPSB=1;
//读取并判断busy
LCDRS=0;
for (i=0;i<255;i++);
for (i=0;i<255;i++);
LCDRW=1;
for (i=0;i<255;i++);
for (i=0;i<255;i++);
P7=0xff;
for (i=0;i<255;i++);
for (i=0;i<255;i++);
LCDE=1;
for (i=0;i<255;i++);
for (i=0;i<255;i++);
temp=P7;
for (i=0;i<255;i++);
LCDE=0;
while(temp>=0x80);
for (i=0;i<255;i++);
for (i=0;i<255;i++);
LCDRW=0;
for (i=0;i<255;i++);
for (i=0;i<255;i++);
P7=COM;
for (i=0;i<255;i++);
for (i=0;i<255;i++);
LCDE=1;
for (i=0;i<255;i++);
for (i=0;i<255;i++);
LCDE=0;
for (i=0;i<255;i++);
for (i=0;i<255;i++);
}
//发送数据到LCD
void LCDWRT_DAT(unsigned char DAT)
{
unsigned int i;
unsigned char temp;
LCDPSB=1;
//读取并判断busy
LCDRS=0;
// for (i=0;i<255;i++);
for (i=0;i<255;i++);
LCDRW=1;
// for (i=0;i<255;i++);
for (i=0;i<255;i++);
P7=0xff;
// for (i=0;i<255;i++);
for (i=0;i<255;i++);
LCDE=1;
// for (i=0;i<255;i++);
for (i=0;i<255;i++);
temp=P7;
for (i=0;i<255;i++);
for (i=0;i<255;i++);
LCDE=0;
while(temp>=0x80);
for (i=0;i<255;i++);
LCDRS=1;
// for (i=0;i<255;i++);
for (i=0;i<255;i++);
LCDRW=0;
// for (i=0;i<255;i++);
for (i=0;i<255;i++);
P7=DAT;
// for (i=0;i<255;i++);
for (i=0;i<255;i++);
LCDE=1;
// for (i=0;i<255;i++);
for (i=0;i<255;i++);
LCDE=0;
// for (i=0;i<255;i++);
for (i=0;i<255;i++);
}
void main()
{
unsigned int i,j;
/*-- 文字: 0 --*/
/*-- Verdana22; 此字体下对应的点阵为:宽x高=21x35 --*/
/*-- 宽度不是8的倍数,现调整为:宽度x高度=24x35 --
xdata unsigned char PNumber0[64]={
/*-- 文字: 0 --*/
/*-- Impact18; 此字体下对应的点阵为:宽x高=16x37
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,
0x0F,0xF0,0x1F,0xF8,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,
0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,
0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x1E,0x7C,0x1F,0xF8,0x0F,0xF0,0x07,0xE0,0x00,0x00,
0x00,0x00,0x00,0x00};--*/
xdata unsigned int date[64][16]={0x55,0x55,0x4A,0xA5,0x52,0x55,0x4A,0x94,0xA5,0x49,0x4A,0xAA,0x95,0x55,0x55,0x52,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -