📄 tzqno.c
字号:
#include<stdio.h>
#include <reg52.h>
#include <math.h>
#include <absacc.h>
#include <string.h> //头文件
/*lcd函数声明*/
PR1();
PR11();
PR12();
void ST01(void);
void ST2(void);
void ST3(void);
INT_1();
CCW2_PR();
void DRAW();
W_DOT();
NOP();
//中断定义函数声明
//void initial(void);
//显示画面函数定义
display1();
display2();
display4();
display5();
display6();
display7();
void display();
/* lcd 地址定义 */
sbit cd=P1^7; //定义液晶指令数据通道C/D
sbit wr=P3^6; //定义wr
sbit rd=P3^7; //定义rd
sbit yjcs=P2^7; //定义lcd 的cs
/* 常数定义 */
#define para1 0x10; //显示宽度16个
unsigned char bei_data=6;
/*宏定义*/
unsigned char lcd_step=1; //读ram时的读数间隔
/*标志位*/
char flag,flag1;
/*参数声明*/
bit a;
long int ram_wr=0;
unsigned int O_X,O_Y, com,dat1,dat2,adc_sum;//com为液晶屏的指令代码,dat2显示文本垂直位置
unsigned char code_1,attr,wave_count=0,adc_t,lb_date,adc_date,keyvalue;
unsigned char xdata RAM[5120]_at_ 0xc400; //外部存储器,注意必须为0XCxxx,跟P2口有关
unsigned int timecount;
/******************************/
code unsigned char CCTAB[5][32]={
/*-- 文字: 欢 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x80,0x00,0x80,0xFC,0x80,0x05,0xFE,0x85,0x04,0x4A,0x48,0x28,0x40,0x10,0x40,
0x18,0x40,0x18,0x60,0x24,0xA0,0x24,0x90,0x41,0x18,0x86,0x0E,0x38,0x04,0x00,0x00,
/*-- 文字: 迎 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x00,0x21,0x80,0x36,0x7C,0x24,0x44,0x04,0x44,0x04,0x44,0xE4,0x44,0x24,0x44,
0x25,0x44,0x26,0x54,0x24,0x48,0x20,0x40,0x20,0x40,0x50,0x00,0x8F,0xFE,0x00,0x00,
/*-- 文字: 使 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x08,0x40,0x0C,0x40,0x1B,0xFE,0x10,0x40,0x37,0xFC,0x64,0x44,0xA4,0x44,0x27,0xFC,
0x24,0x44,0x22,0x40,0x21,0x80,0x20,0x80,0x21,0x70,0x22,0x1E,0x2C,0x04,0x00,0x00,
/*-- 文字: 用 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x1F,0xFC,0x10,0x84,0x10,0x84,0x10,0x84,0x1F,0xFC,0x10,0x84,0x10,0x84,
0x10,0x84,0x1F,0xFC,0x10,0x84,0x10,0x84,0x20,0x84,0x20,0x84,0x40,0x94,0x80,0x88,
/*-- 文字: ! --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,
0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
};
code unsigned char DTAB[11]={ 0x25,0x2e,0x34,0x25,0x32,0x00,0x00,0x00,0x25,0x33,0x23};
code unsigned char DTAB1[32]={ 0x33,0x25,0x2c,0x25,0x23,0x34,0x00,0x00,0x30,0x29,0x23,0x34,0x35,0x32,0x25,0x00,
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x41,0x42,0x43,0x44,0x45,0x46};
code unsigned char DTAB2[15]={0x33,0x25,0x2c,0x25,0x23,0x34,0x00,0x2f,0x34,0x28,
0x25,0x32,0x33,0x1f};
code unsigned char DTAB3[32]={0x33,0x21,0x36,0x25,0x00,0x27,0x32,0x21,0x30,0x28,0x29,0x23,0x33,0x00,0x00,0x00,
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x41,0x42,0x43,0x44,0x45,0x46};
/*------------------------------------------------
The main C function. Program execution starts
here after stack initialization.
------------------------------------------------*/
main()
{ unsigned int i=0;
yjcs=0;
INT_1(); /* 屏幕初始化函数 */
display1(); //显示开机画面
NOP();
}
/**************************/
/* 屏幕初始化函数 */
/**************************/
INT_1()
{
dat1=0x00; /*设文本显示区域首地址*/
dat2=0x00;
com=0x40;
PR1();
dat1=para1; /*设文本显示区域宽度*/
dat2=0x00;
com=0x41;
PR1();
dat1=0x00; /*设图形显示区域首地址*/
dat2=0x08;
com=0x42;
PR1();
dat1=para1; /*设图形显示区域宽度*/
dat2=0x00;
com=0x43;
PR1();
com=0xa3; /*光标形状设置*/
PR12();
com=0x80; /*显示方式设置逻辑"或"合成*/
PR12();
com=0x9c; /*显示开关设置 开文本和图形显示*/
PR12();
}
/*****************************/
/* 汉字写入(图形方式)函数 */
/********************************/
CCW2_PR()
{
unsigned int i,j,count1;
i=para1;
j=i*O_Y+O_X+0x0800; /* 图形显示区首地址为
0x0800*/
for(count1=0;count1<16;count1++)
{
dat1=j%256; /* 显示地址设置 */
dat2=j/256;
com=0x24;
PR1();
dat2=CCTAB[code_1][count1];
com=0xc0;
PR11();
dat2=CCTAB[code_1][count1+16];
PR11();
j=j+i;
}
}
/********************************/
/* 西文字符写入(文本属性)函数 */
/********************************/
CW2_PR()
{
unsigned int i,j;
i=para1;
j=i*O_Y+O_X;
dat1=j%256;
dat2=j/256;
com=0x24; // 显示地址设置
PR1();
dat2=code_1;
com=0xc4; // 数据写
PR11();
dat2=0x08;
com=0x24;
PR1();
dat2=attr; // 写入属性参数
com=0xc4;
PR11();
NOP();
}
/****************************/
/* 写指令和写数据函数 */
/****************************/
PR1() /* 双字节参数指令写入入口 */
{
ST01();
cd=0; //数据通道
P0=0xff; //清一下电平
P0=dat1; /* 取第一参数单元数据 */
wr=0;
NOP();
wr=1;
PR11();
}
PR11() /* 单字节参数指令写入入口 */
{
ST01();
cd=0;
P0=0xff;
P0=dat2; /* 取第二参数单元数据 */
wr=0;
NOP();
wr=1;
PR12();
}
PR12() /* 无参数指令代码写入入口 */
{
ST01();
cd=1; //指令通道
P0=0xff;
P0=com; /* 写入指令代码 */
wr=0;
NOP();
wr=1;
}
/*******************************************/
/*读取lcd状态字 */
/******************************************/
unsigned char readstate(void)
{
unsigned char lcd_state;
P0=0xff; //p0为输入方式
cd=1; // C/D=1
rd=0; // /RD=0
lcd_state=P0&0xff; // 读取引脚A物理电平
NOP();
NOP();
rd=1; // /RD=1
return lcd_state;
}
/************************************************/
/* 判状态位S1,S0 函数(读写指令和读写数据状态) */
/************************************************/
void ST01(void)
{
while((readstate()&0x03)!=3)
;
}
/************************************/
/* 判状态位S2函数(数据自动读状态) */
/************************************/
void ST2(void)
{
while((readstate()&0x04)!=4);
}
/************************************/
/* 判状态位S3函数(数据自动写状态) */
/************************************/
void ST3(void)
{
while((readstate()&0x08)!=8)
;
}
/****************/
NOP()
{
unsigned int j;
for(j=0;j<2500;j++)
{;}
}
/*****************************/
/* 显示显示波形开机画面 */
/*****************************/
display1()
{
code_1=0x05; /* 汉字写入显示波形回车确认*/
O_X=0x03;
O_Y=0x00;
CCW2_PR();
code_1=0x00;
O_X=0x05;
O_Y=0x00;
CCW2_PR();
code_1=0x01;
O_X=0x07;
O_Y=0x00;
CCW2_PR();
code_1=0x02;
O_X=0x09;
O_Y=0x00;
CCW2_PR();
code_1=0x13;
O_X=0x03;
O_Y=0x10;
CCW2_PR();
code_1=0x14;
O_X=0x05;
O_Y=0x10;
CCW2_PR();
code_1=0x05;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -