📄 北京青云240128.c
字号:
#include <stdio.h>
#include <absacc.h>
#include <reg52.h>
#include<intrins.h>
sbit LCD_RS=P3^0;
sbit LCD_WR=P3^1;
sbit LCD_RD =P3^3;
sbit LCD_CS1=P3^4;
sbit LCD_CS2=P3^5;
sbit LCD_BUSY=P3^6;
sbit LCD_INT=P3^7;
sbit LCD_RST=P2^7;
sbit led6 = P2^5;
sbit led5 = P2^4;
sbit led4 = P2^3;
sbit led3 = P2^2;
sbit led2 = P2^1;
sbit led1 = P2^0;
#define LCD_cmdReg P1
#define LCD_cmdData P1
#define LCD_DATA P1
#define LCD_READY P3
extern void delay (int i);
extern void LCD_CmdWrite(unsigned char,unsigned char) small;
extern unsigned char LCD_CmdRead(unsigned char) small;
extern void LCD_DataWrite(unsigned char) small;
extern void LCD_ChkBusy(void) small;
extern void LCD_Reset(void) small;
extern void LCD_Initial(void) small;
extern void LCD_Clearzf(void) small;
extern void LCD_clear(void) small;
extern void LCD_all(void) small;
extern void LCD_row(void) small;
extern void LCD_cul(void) small;
extern void LCD_dot(void) small;
extern void LCD_box(void) small;
extern void wrhz() small;
extern void wrhzfd() small;
extern void LCD_Clear(void) small;
extern void GotoXY(unsigned char x1,unsigned char y1) small;
extern void PrintStr(char *ptr,int delay_time) small;
extern void putHEX2(unsigned char var) small;
static const char ASCIITable[] = "0123456789ABCDEF";
//unsigned char dat0[],dat1[],dat2[],dat3[],dat4[],dat5[],dat[2][6];
//unsigned char time0[],time1[],time2[],time3[],time4[],time5[];
//*******************************************************************************//
// *** 缓存器 写入 子程序 *******************************************************//
//*******************************************************************************//
void LCD_CmdWrite(unsigned char cmdReg, unsigned char cmdData) small
{
LCD_BUSY=0;
delay(50);
LCD_cmdReg = cmdReg; // 写入缓存器的地址
LCD_CS1 =0; // 致能 RA8803 读写动作
LCD_RD = 1; // 禁能读取动作
LCD_RS = 0; // 设定为写入资至缓存器模式
LCD_WR = 0; // 开始写入缓存器的地址
LCD_WR = 1;
LCD_RS = 1;
LCD_CS1 =1; // 致能 RA8803 读写动作
//…………………………………………………………….
LCD_cmdReg = cmdData; // 写入缓存器的数据
LCD_CS1 =0; // 致能 RA8803 读写动作
LCD_RD = 1; // 禁能读取动作
LCD_RS = 0; // 设定为写入数据至缓存器模式
LCD_WR = 0; // 开始写入缓存器的数据
LCD_WR = 1;
LCD_RS = 1;
LCD_CS1 =1; // 致能 RA8803 读写动作
}
//*******************************************************************************//
// *** 缓存器 读取 子程序 **************************************************//
//*******************************************************************************//
unsigned char LCD_CmdRead(unsigned char cmdReg) small
{
unsigned char REG_Read;
LCD_ChkBusy(); // 判断 RA8803 是否忙碌中
LCD_cmdReg = cmdReg; // 写入缓存器的地址
LCD_CS1 =0; // 致能 RA8803 读写动作
LCD_RD = 1; // 禁能读取动作
LCD_RS = 0; // 设定为写入数据至缓存器模式
LCD_WR = 0; // 开始写入缓存器的地址
LCD_WR = 1;
LCD_RS = 1;
LCD_CS1 =1; // 致能 RA8803 读写动作
//………………………………………………………………………………………………………………………………?
LCD_DATA = 0xff;
LCD_CS1 =0; // 致能 RA8803 读写动作
LCD_WR = 1; // 禁能写入动作
LCD_RS = 0; // 设定从缓存器读取数据模式
LCD_RD = 0; // 开始读取缓存器的数据
REG_Read = LCD_DATA;
LCD_RD = 1; // 致能读取缓存器
LCD_RS = 1;
LCD_CS1 =1; // 禁能 RA8803 读写动作
return REG_Read; // 回传读取缓存器的数据
}
//*******************************************************************************//
// *** 写入数据至显示内存 子程序 **************************************//
//*******************************************************************************//
void LCD_DataWrite(unsigned char WrData) small
{
LCD_ChkBusy(); // 判断 RA8803 是否忙碌中
LCD_DATA = WrData; // 准备预写入显示内存的数据
LCD_CS1 =0; // 致能 RA8803 读写动作
LCD_RD = 1; // 禁能读取动作
LCD_RS = 1; // 设定为写入数据至显示内存模式
LCD_WR = 0; // 开始写数据至显示内存
LCD_WR = 1;
LCD_RS = 1;
LCD_CS1 =1; // 禁能 RA8803 读写动作
}
//*******************************************************************************//
//*** 检查忙碌旗标 子程序 *************************************************//
//*******************************************************************************//
void LCD_ChkBusy(void) small
{
do
{
}
while(LCD_BUSY == 1);
}
//*******************************************************************************//
// *** 重置 子程序 ***********************************************************//
//*** RA8803/22 重置时间至少需要维持低准位为250 豪杪 ” >= (250ms)” ********//
//*******************************************************************************//
void LCD_Reset(void) small
{
LCD_READY = 0xff;
LCD_CS1 = 0;
delay(1000); // “使用8051 外挂频率为6MHz”
LCD_RST = 0;
delay(11000); // 低准位大于250 毫秒
LCD_RST = 1;
delay(1000);
}
//*******************************************************************************//
// *** 清除显示内存 子程序 **********************************************//
//*******************************************************************************//
//****************************清屏
void LCD_clear(void) small
{
unsigned int i,j;
LCD_CmdWrite(0x00,0xC5);
LCD_CmdWrite(0x60,0x00);
LCD_CmdWrite(0x70,0x00);
for(i=0;i<128;i++)
{
for(j=0;j<120;j++)
{
LCD_DataWrite(0x00);
j++;
}
i++;
}
}
//*******************************************************************************//
// *** 设定 显示坐标 (内存地址) 子程序 *********************************//
//*******************************************************************************//
extern void GotoXY(unsigned char x1,unsigned char y1) small
{
LCD_CmdWrite(0x60,x1); // 设定水平坐标地址
LCD_CmdWrite(0x70,y1); // 设定垂直坐标地址
}
//*******************************************************************************//
// *** 延迟 子程序 ***********************************************************//
//*******************************************************************************//
void delay(int i) // 延迟时间子程序
{
int k ;
for ( k=0 ; k < i ; k++ );
}
//*******************************************************************************//
// *** 定义 所有 缓存器的 初始值 ******************************************//
//*******************************************************************************//
void LCD_Initial(void) small
{
LCD_CmdWrite(0x00,0xC9); // LCD Control Register(LCR)
LCD_CmdWrite(0x01,0xF3); // Misc.Register(MIR)
LCD_CmdWrite(0x02,0x10); // Advance Power Setup Register(APSR)
LCD_CmdWrite(0x03,0x80); // Advance Display Setup Regiser(ADSR)
LCD_CmdWrite(0x10,0x6B); // Cursor Control Register(CCR)
LCD_CmdWrite(0x11,0x22); // Distance of Word or Lines Register(DWLR)
LCD_CmdWrite(0x12,0x91); // Memory Access Mode Register(AWRR)
LCD_CmdWrite(0x20,0x1d); // Active Window Right Register(AWRR)
LCD_CmdWrite(0x30,0x7f); // Active Window Bottom Register(AWBR)
LCD_CmdWrite(0x40,0x00); // Active Window Left Register(AWLR)
LCD_CmdWrite(0x50,0x00); // Active Window Top Register(AWTR)
LCD_CmdWrite(0x21,0x1d); // Display Window Right Register(DWRR)
LCD_CmdWrite(0x31,0x7f); // Display Window Bottom Register(DWBR)
LCD_CmdWrite(0x41,0x00); // Display Window Left Register(DWLR)
LCD_CmdWrite(0x51,0x00); // Display Window Top Register(DWTR)
LCD_CmdWrite(0x60,0x00); // Cursor Position X Register(CPXR)
LCD_CmdWrite(0x61,0x00); // Begin Segment Position Register(BGSG)
LCD_CmdWrite(0x70,0x00); // Cursor Position Y Register(CPYR)
LCD_CmdWrite(0x71,0x00); // Shift action range,Begin Commom Register(BGCM)
LCD_CmdWrite(0x72,0xEF); // Shift action range,End Commom Register(EDCM)
LCD_CmdWrite(0x80,0x33); // Blink Time Register(BTR)
LCD_CmdWrite(0x81,0x0c); // Frame Rate Polarity Change at Common_FA Register(FDCA)
LCD_CmdWrite(0x91,0x00); // Frame Rate Polarity Change at Common_FB Register(FDCB)
LCD_CmdWrite(0x90,0x1E); // Shift Clock Control Register(SCCR)
LCD_CmdWrite(0xA0,0x11); // Interrupt Setup & Status Register(FRCB)
LCD_CmdWrite(0xA1,0x00); // Key Scan Control Register(KSCR)
LCD_CmdWrite(0xA2,0x00); // Key Scan Data Register(KSDR)
LCD_CmdWrite(0xA3,0x00); // Key Scan Data Expand Register(KSER)
LCD_CmdWrite(0xB0,0x27); // Interrupt Column Setup Register(INTX)
LCD_CmdWrite(0xB1,0xEF); // Interrupt Row Setup Register(INTY)
LCD_CmdWrite(0xC0,0xD0); // Touch Panel Control Register(TPCR)
LCD_CmdWrite(0xC1,0x0A); // ADC Status Register(ADCS)
LCD_CmdWrite(0xC8,0x80); // Touch Panel Segment High Byte Data Register(TPXR)
LCD_CmdWrite(0xC9,0x80); // Touch Panel Common High Byte Data Register(TPYR)
LCD_CmdWrite(0xCA,0x00); // Touch Panel Segment/Common Low Byte Data Register(TPZR)
LCD_CmdWrite(0xD0,0x8F); // LCD Contrast Control Register (LCCR)
LCD_CmdWrite(0xE0,0x00); // Pattern Data Register(PDR)
LCD_CmdWrite(0xF0,0xA0); // Font Control Register(FCR)
LCD_CmdWrite(0xF1,0x0F); // Font Size Control Regi
}
//*******************************************************************************//
// *** LCD 显示字符串 子程序 ************************************************//
//*******************************************************************************//
void PrintStr(char *ptr,int delay_time) small
{
while(*ptr != '\0') // 判断是否为空字符,若不是,继续写入与显示下
{ // 一个字
LCD_DataWrite(*ptr); // 写入显示内存
++ptr;
delay(delay_time); // 每个字显示的时间间隔
}
}
//*******************************************************************************//
// *** LCD 显示字符 子程序 ************************************************//
//*******************************************************************************//
void putHEX2(unsigned char var) small
{ // LCD 显示两个16 进制文字
unsigned char div_val,base;
base = 16; // 设定参数”两个字节”
div_val = 0x10;
do
{
LCD_DataWrite(ASCIITable[var / div_val]); // 写入显示内存
var %= div_val;
div_val /= base;
} while (div_val);
}
void delay10ms(n)
{
int m ,i,j,k;
for(m=0;m<n;m++)
for(i=5;i>0;i--)
for(j=4;j>0;j--)
for(k=248;k>0;k--);
}
//**************************写汉字放大
void wrhzfd() small
{
// unsigned int i,j;
LCD_CmdWrite(0x00,0xCD);
LCD_CmdWrite(0x60,0x00);
LCD_CmdWrite(0x70,0x00);
LCD_CmdWrite(0xF1,0x5F);
}
void main (void)
{
int a,b,c,d,e,i,j,m;
char dat0[]="30";
char dat1[]="30";
char dat2[]="30";
char dat3[]="30";
char dat4[]="30";
char dat5[]="30";
char time0[]="03:00";
char time1[]="03:00";
char time2[]="03:00";
char time3[]="03:00";
char time4[]="03:00";
char time5[]="03:00";
a=b=c=d=e=i=j=m=0x00;
LCD_Reset();
LCD_Initial();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -