📄 cm160128.c
字号:
#include <reg52.h>
#include <intrins.h>
#include <absacc.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include "character.h"
/* 地址定义 */
#define d_add XBYTE[0x8000]
#define c_add XBYTE[0x8100]
/* 常数定义 */
//#define para1 0x20;
unsigned char code para1 = 0x20;
#define uchar unsigned char
#define uint unsigned int
unsigned char data dat1 = 0x30; //LCD显示用变量
unsigned char data dat2 = 0x31;
unsigned char data com = 0x32;
unsigned char data code_1 = 0x33;
unsigned char data attr = 0x34;
unsigned char data O_Y = 0x35;
unsigned char data O_X = 0x36;
//-------------register------------------------
sbit P1_0 = P1^0;
sbit P1_1 = P1^1;
sbit ACC0 = ACC^0;
sbit ACC1 = ACC^1;
/* 定义标志位 */
sbit Acc_0=ACC^0;
sbit Acc_1=ACC^1;
sbit Acc_2=ACC^2;
sbit Acc_3=ACC^3;
uchar num=0;
bit s=0;
bit bStart = 0;//开机测试位
uchar x=0;
uchar y=0;
char code RATE = -123;
unsigned char data STR6[6]={0,0,0,0,0,0};
unsigned int unVolt;
int intTestVolt[2] = {0,100};
unsigned char countVolt = 0;
unsigned char countSuccess = 0;
//parameters, used in SCOM
int intSmpVal = 0x0800; //模数转换值
unsigned char ucMW2 = 1; //放大倍数
unsigned char ucSmpT = 1;//采样时间
unsigned char ucVolt = 0;//负高压
int intTmpSmpVal = 0x0800;//临时存储模数转换值
unsigned char ucTmpVolt = 0;//临时保存负高压
unsigned int unLCDRefresh = 0;//液晶屏刷新
bit bUpdateSV1 = 0;//接收采样值低4位成功标记位
bit bUpdateSV2 = 0;//接收采样值中间4位成功标记位
bit bUpdateSV = 0; //接收采样值成功标记位
bit bUpdateMW = 0; //接收量程成功标记位
bit bUpdateSmpT = 0;//接收采样时间成功标记位
bit bUpdateVolt1 = 0;//接收负高压低4位成功标记位
bit bUpdateVolt = 0; //接收负高压成功标记位
//-------------------------------------------------------------------
//void delay_ms();
void INIT_1();//液晶初始化函数
void CLEAR();//LCD清屏函数
void CGRAM();//在LCD中建立字符库函数
void CCW2_PR();//写16*16字符函数
void CCW3_PR();//写24*48字符函数
void CW2_PR();
void PR1();
void PR11();
void PR12();
void ST01();
void ST3();
void DISHAZIT(uchar x,uchar y,uchar d);
void DISHAZIT2(uchar x,uchar y,uchar d);
void DISDASC(uchar x,uchar y,uchar d);
void delay_ms(int ms);
//--------------------------------------------
/**************************/
/* 初始化函数 */
/**************************/
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=0xa0; /*光标形状设置*/
PR12();
com=0x80; /*显示方式设置逻辑"或"合成*/
PR12();
com=0x9c; /*显示开关设置 开文本和图形显示*/
PR12();
}
/***************************/
/* 清显示子程序 */
/***************************/
void CLEAR()
{
unsigned char i,j;
dat1=0x00;
dat2=0x00;
com=0x24;
PR1();
com=0xb0;
PR12();
for(i=0;i<205;i++)
{
for(j=0;j<=40;j++)
{
ST3();
d_add=0x00;
}
}
com=0xb2;
PR12();
}/**************************/
/* CGRAM函数 */
/**************************/
void CGRAM()
{
unsigned int i;
dat1=0x03;
dat2=0x00;
com=0x22; /* 设置CGRAM偏置地址 */
PR1();
dat1=0x00;
dat2=0x1c;
com=0x24; /* 设置存储器地址指针 */
PR1();
com=0xb0; /* 设置自动写方式 */
PR12();
for(i=0;i<320;i++)
{
ST3();
d_add=CGTAB[i];
}
com=0xb2; /* 设置自动写结束方式 */
PR12();
}
/********************************/
/* 汉字写入(文本方式)函数 */
/********************************/
CCWD_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=0xc0;
PR11();
j=j+i;
dat1=j%256; /* 显示RAM地址修正 */
dat2=j/256;
com=0x24;
PR1();
dat2=code_1+0x01; /* 写入左下半部汉字代码 */
com=0xc0;
PR11();
}
void CCW2_PR()
{
unsigned int i,j,count1;
i=para1;
j=i*O_Y+O_X+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;
}
}
void CCW3_PR()//写24*48字符函数(显示采样值)
{
unsigned int i,j,count1;
i=para1;
j=i*O_Y+O_X+0x0800;
for(count1=0;count1<48;count1++)
{
dat1=j%256;
dat2=j/256;
com=0x24;
PR1();
dat2=CCTAB2[code_1][count1]; /* 写入汉字左侧代码 */
com=0xc0;
PR11();
dat2=CCTAB2[code_1][count1+48]; /* 写入汉字中间代码 */
PR11();
dat2=CCTAB2[code_1][count1+96]; /* 写入汉字右侧代码 */
PR11();
j=j+i;
}
}
void CCW4_PR()//写160*128字符函数
{
unsigned int i,j,count1;
unsigned char h = 0;
i=para1;
j=i*O_Y+O_X+0x0800;
for(count1=0;count1<128;count1++)
{
dat1=j%256;
dat2=j/256;
com=0x24;
PR1();
dat2=welcome[code_1][count1];
com=0xc0;
PR11();
for(h = 1; h < 20; h++)
{
dat2=welcome[code_1][count1+128*h];
PR11();
}
j=j+i;
}
}
/****************************/
/* 写指令和写数据函数 */
/****************************/
void PR1() /* 双字节参数指令写入入口 */
{
ST01();
d_add=dat1; /* 取第一参数单元数据 */
PR11();
}
void PR11() /* 单字节参数指令写入入口 */
{
ST01();
d_add=dat2; /* 取第二参数单元数据 */
PR12();
}
void PR12() /* 无参数指令写入入口 */
{
ST01();
c_add=com; /* 写入指令代码 */
}
/************************************************/
/* 判状态位S1,S0 函数(读写指令和读写数据状态) */
/************************************************/
void ST01()
{
do
{
ACC=c_add;
}
while(Acc_0==0,Acc_1==0);
}
/************************************/
/* 判状态位S3函数(数据自动写状态) */
/************************************/
void ST3()
{
do
{
ACC=c_add;
}
while(Acc_3==0);
}
void DISHAZIT(uchar x,uchar y,uchar d) /*汉字写入(图文方式)*/
{
code_1=d;
O_X=x;
O_Y=y;
CCW2_PR();
}
void DISHAZIT2(uchar x,uchar y,uchar d) /*汉字写入(图文方式)*/
{
code_1=d;
O_X=x;
O_Y=y;
CCW3_PR();
}
void DISDASC(uchar x,uchar y,uchar d) //汉字写入(文本方式)
{
code_1=d;
O_X=x;
O_Y=y;
CCWD_PR();
}
//显示欢迎界面
void ShowWelcome(void) /*汉字写入(图文方式)*/
{
code_1=0;
O_X=0;
O_Y=0;
CCW4_PR();
}
//显示"仪器正在预热"
void ShowHeat(void)
{
DISHAZIT(2,8*7,0x0e);
DISHAZIT(4,8*7,0x0f);
DISHAZIT(6,8*7,0x10);
DISHAZIT(8,8*7,0x11);
DISHAZIT(10,8*7,0x12);
DISHAZIT(12,8*7,0x13);
}
//显示"采样时间"
void ShowSample(void)
{
DISHAZIT(1,8*9,0x00);
DISHAZIT(3,8*9,0x01);
DISHAZIT(5,8*9,0x02);
DISHAZIT(7,8*9,0x03);
DISHAZIT(9,8*9,0x04);
}
//显示"放大倍数"
void ShowEXG(void)
{
DISHAZIT(1,8*11,0x07);
DISHAZIT(3,8*11,0x08);
DISHAZIT(5,8*11,0x09);
DISHAZIT(7,8*11,0x0a);
DISHAZIT(9,8*11,0x04);
}
//显示"负高压"
void ShowMIN(void)
{
DISHAZIT(1,8*13,0x0b);
DISHAZIT(4,8*13,0x0c);
DISHAZIT(7,8*13,0x0d);
DISHAZIT(9,8*13,0x04);
}
//显示采样数据
void DispSampleVoltage(int unintData)
{
unintData = (0x0800 - unintData)*1.2207;//
switch(ucMW2)
{
case 1://放大倍数为1
case 0x09:
STR6[0] = 0x0a;
if(unintData > 0)
{
STR6[1] = 0x0a;
}
else if(unintData < 0)
{
STR6[1] = 0x0c;
}
else
{
STR6[1] = 0x0a;
}
unintData = abs(unintData);
STR6[5] = unintData%10;
unintData /= 10;
STR6[4] = unintData%10;
unintData /= 10;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -