📄 c_code.c
字号:
if(ACC == 0x08) //ALARM键按下
{
}
}
}while(iflag[0] != 0);
}
// hex to bcd 转换程序
void hextobcd(unsigned int hexs,unsigned char j)
{
unsigned int va;
unsigned char i;
va = 10000; //最大数级万位
for (i=j-1;i;i--) {
disp_buffer[i] = 0; //目标数组清零
while ((hexs>=va)&&(va>9)) {
hexs -= va; //减除数
disp_buffer[i]++; //商位加1
}
va /= 10; //除数除10,指向低一位
}
disp_buffer[0]=hexs; //最后个位数
}
//数据处理程序
void deoutlier(unsigned int x[4], unsigned int x0[4][2], char Bound) //野点剔除
{
for(i=0;i<4;i++)
value[i][0] = value[i][1];
for(i=0;i<4;i++)
{
if(x[i]-x0[i][0]> Bound||x0[i][0]-x[i]>Bound)
value[i][1] = 2*x0[i][0] - x0[i][1];
else
value[i][1] = x[i];
}
}
void calibration(unsigned int x[4])//温度校正公式见说明文档
{
for(i=0;i<4;i++)
new_value[i] = x[i]; //
}
//指令&数据读写状态
void CheckRWCD(void){
while((LcmCmdPort & 0x03) != 0x03); //低电平忙
}
//数据自动写状态
void CheckAutoWrite(void){
while((LcmCmdPort & 0x08) == 0); //低电平忙
}
//屏读/屏考贝出错状态
//void CheckScreen(void){
// while(LcmCmdPort & 0x40); //1出错,0正确
//}
//一个数据子写入函数
void LcmWriteData(unsigned char uData) {
LcmDataPort = uData;
}
//一个数据读出函数
//unsigned char LcmReadData( void ){
// unsigned char uData;
// uData = LcmDataPort;
// return uData;
//}
//无参数指令写入函数
void LcmWriteCommand(unsigned char Command) {
CheckRWCD(); //检测指令读写状态
LcmCmdPort = Command;
}
//单参数指令写入函数
void LcmWriteCommandWith1Par(unsigned char Parameter,unsigned char Command){
CheckRWCD(); //检测指令读写状态
LcmDataPort = Parameter;
CheckRWCD();
LcmCmdPort = Command;
}
//双参数指令写入函数
void LcmWriteCommandWith2Par(unsigned char Parameter1,unsigned char Parameter2,unsigned char Command){
CheckRWCD(); //检测指令读写状态
LcmDataPort = Parameter1;
CheckRWCD();
LcmDataPort = Parameter2;
CheckRWCD();
LcmCmdPort = Command;
}
//LCM初始化函数
void LcmInit( void ){
LcmWriteCommandWith2Par(0x00,0x00,0x40); //设置文本显示区首地址
LcmWriteCommandWith2Par(LcmLengthDots/8,0x00,0x41); //设置文本显示区宽度
LcmWriteCommandWith2Par(0x00,0x08,0x42); //设置图形显示区首地址0x0800
LcmWriteCommandWith2Par(LcmLengthDots/8,0x00,0x43); //设置图形显示区宽度
LcmWriteCommand(0xA7); //设置光标形状 8x8方块
LcmWriteCommand(0x81); //显示方式设置 文本xor图形(异或)
LcmWriteCommand(0x9C); //显示开关设置 文本开,图形开,光标闪烁关
}
//延时函数
void Delay(unsigned int MS){
unsigned char us,usn;
while(MS!=0) { //12M Crystal
usn = 2;
while(usn!=0) {
us=0xf2;
while (us!=0){us--;};
usn--;
}
MS--;
}
}
//通过按键设定延时函数
void DelayKey(unsigned char HalfSecond){ //Delay_key加入时间参数0.5秒一级
unsigned int i;
for(i=0;i<50*HalfSecond;i++){ //12M Crystal
if(Key==0) {
Delay(20);
while(Key==0) {Delay(20);}
break;
}
Delay(10);
}
}
//清显示存储器函数
void LcmClear( unsigned char FillByte ){
unsigned int i = 8192; //此处仅清8K RAM,如果您32K RAM都使用,请修改i=32768(后面也要改)
if(FillByte) //注意如果填充ff时,如果RAM仅使用了8K,那么8192次会写入到文本区
{ //会形成乱码.(24064出厂时候默认将R7断开,即默认使用8KRAM)
i -= 2*1024;//所以如果填入ff时候要扣除2K的文本区
LcmWriteCommandWith2Par(0x00,0x08,0x24); //填充0xff时候要在图形区
}
else
LcmWriteCommandWith2Par(0x00,0x00,0x24);
LcmWriteCommand(0xB0); //进入自动写
while(i--) {
CheckAutoWrite();
LcmWriteData( FillByte );
}
LcmWriteCommand(0xB2); //退出自动写
}
//动态显示数据
void LcmDynWriteData(unsigned char x, unsigned char y, unsigned char CH_No,unsigned int ihex){
LocateXY(x,y,TXT);
LcmWriteCommand(0xB0); //进入自动写
CheckAutoWrite();
LcmWriteData(0x23);// C
CheckAutoWrite();
LcmWriteData(0x28);// H
CheckAutoWrite();
LcmWriteData(CH_No);// 通道号
CheckAutoWrite();
LcmWriteData(0x1A);// :
i = 5;// x x x x x 测量值
while(i--) {
CheckAutoWrite();
LcmWriteData( ihex );
}
CheckAutoWrite();
LcmWriteData(0x30);// 显示P
CheckAutoWrite();
LcmWriteData(0x54);// 显示t
LcmWriteCommand(0xB2); //退出自动写
}
//设定显示地址函数
void LocateXY(unsigned char x,unsigned char y,unsigned char mode){
unsigned int temp;
temp= LcmLengthDots/8*y + x;
if(mode) { //mode=1为Graphic
temp+=0x0800; //如果图形模式要加上图形区首地址0x0800
}
LcmWriteCommandWith2Par(temp&0xff,temp/256,0x24);
}
//显示一个ASCII码函数
void PutChar(unsigned char x,unsigned char y,unsigned char CharByte){
LocateXY(x,y,TXT);
LcmWriteCommandWith1Par(CharByte,0xC4);
}
//显示一个字符串函数
void PutString(unsigned char x,unsigned char y,unsigned char *str){
while(*str != 0) {
if(x> 29) { //自动换行
x=0;
y++;
}
PutChar(x,y,*str);
++x;
++str;
}
}
//显示一副图片函数
//void DisplayOneBmp(unsigned char *puts){
// unsigned char i,j;
// unsigned int X=0;
// LocateXY(0,0,Graphic);
// LcmWriteCommand(0xB0); //进入自动写
// for(i=0;i<LcmWidthDots;i++) {
// for(j=0;j<LcmLengthDots/8;j++) {
// CheckAutoWrite();
// LcmWriteData(puts[X]);
// X++;
// }
// }
// LcmWriteCommand(0xB2); //退出自动写
//}
//反显一副图片函数
//void ReverseOneBmp( void ){ //利用数据一次读写操作
// unsigned char i,j,X; //只能对一段RAM取反
// LocateXY(0,0,Graphic);
// for(i=0;i<LcmWidthDots;i++) {
// for(j=0;j<LcmLengthDots/8;j++) {
// LcmWriteCommand(0xC5); //读数据,地址不变
// CheckRWCD();
// X = LcmReadData();
// X = ~X;
// LcmWriteCommandWith1Par(X,0xC0);
// }
// }
//}
//屏读功能演示
//void ScreenReadDemo( void ){ //利用屏读
// //能对当前屏幕反显,包括合成内容(本函数仅读文本到图形)
// //但是写入后的内容都在图形区
// //可以将文本区内容读出以图形方式写到图形区
// unsigned char i,j,X;
// //使用屏读屏考时候必须设置宽度为40(硬件已决定)
// //所以如确定要用到屏读屏考的话最后初始化时就设40
// LcmWriteCommandWith2Par(0x28,0x00,0x41); //设置文本显示区宽度=40
// LcmWriteCommandWith2Par(0x28,0x00,0x43); //设置图形显示区宽度=40
// PutString(0,0,str1); //0,0不会受到宽度改变的影响
// for(i=0;i<8;i++) { //屏幕较慢,就以一行文本做演示
// LcmWriteCommandWith2Par((0x28*i+0x800)&0xff,(0x28*i+0x800)/256,0x24);
// for(j=0;j<LcmLengthDots/8;j++) {
// LcmWriteCommand(0xE0);
// CheckScreen();
// CheckRWCD();
// X = LcmReadData();
// X = ~X;
// LcmWriteCommandWith1Par(X,0xC0);
// }
// }
// //屏读需要一点时间,运行速度比较慢,运行过程中由于文本图形互补的关系,屏幕全黑
// LcmWriteCommand(0x98); //关闭文本区看显示效果
// DelayKey(3);
// LcmWriteCommand(0x9C); //恢复文本区显示
// LcmWriteCommandWith2Par(LcmLengthDots/8,0x00,0x41); //宽度改回原值
// LcmWriteCommandWith2Par(LcmLengthDots/8,0x00,0x43);
// LcmClear(0); //清屏
//}
//显示点阵子函数
//void DisplayDots(unsigned char DotByte,unsigned char n){
// unsigned char i,j;
// LocateXY(0,0,Graphic);
// LcmWriteCommand(0xB0); //进入自动写
// for(i=0;i<LcmWidthDots/n;i++) {
// for(j=0;j<LcmLengthDots/8*n;j++) {
// CheckAutoWrite();
// LcmWriteData(DotByte);
// }
// DotByte=~DotByte;
// }
// LcmWriteCommand(0xB2); //退出自动写
//}
//代码区
unsigned char code str_Welcome[] = {0x37, 0x45, 0x4C, 0x43, 0x4F, 0x4D, 0x45,0x01};
unsigned char code str_Hibernate[] = {0x28, 0x49, 0x42, 0x45, 0x52, 0x4E, 0x41, 0x54, 0x45};
unsigned char code str_Charge[] = {0x23, 0x28, 0x21, 0x32, 0x27, 0x25};
unsigned char code str_USB[] = {0x35, 0x33, 0x22};
unsigned char code str2[] = {0x37, 0x41, 0x52, 0x4D, 0x49, 0x4E, 0x47, 0x00, 0x35, 0x50};
unsigned char code str3[] = {0x37, 0x41, 0x52, 0x4D, 0x49, 0x4E, 0x47, 0x00, 0x35, 0x50, 0x0E};
unsigned char code str4[] = {0x37, 0x41, 0x52, 0x4D, 0x49, 0x4E, 0x47, 0x00, 0x35, 0x50, 0x0E, 0x0E};
unsigned char code str5[] = {0x37, 0x41, 0x52, 0x4D, 0x49, 0x4E, 0x47, 0x00, 0x35, 0x50, 0x0E, 0x0E, 0x0E};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -