📄 hmi.c
字号:
}
/*********************************************
该函数显示16位的整数的Hex格式
in: x 行
y 列
z 要显示的16位整数
out: 无
**********************************************/
void Disp1Uint16Hex(uint8 x,uint8 y ,uint16 z ){
Disp1Char8X16(x,y,z>>12);
y++;
Disp1Char8X16(x,y,(z&0xf00)>>8);
y++;
Disp1Char8X16(x,y,(z&0x00f0)>>4);
y++;
Disp1Char8X16(x,y,(z&0x0f));
}
/*********************************************
该函数显示8位的整数
in: x 行
y 列
z 要显示的8位整数
out: 无
**********************************************/
void Disp1Uint8(uint8 x,uint8 y ,uint8 z ){
if(z>99){
z=99;
}
Disp1Char8X16(x,y,z/10);
y++;
Disp1Char8X16(x,y,z%10);
}
void RefWinMain(void) {
Sem1=1;
DispTemp5 =DayRun;
DispTemp6=HourRun;
DispTemp7 =MinRun;
DispTemp8 =SecRun;
DispTemp16Bit[0] =PowNow;
DispTemp16Bit[1] =TemNow;
DispTemp16Bit[2] =CurNow;
Sem1=0;
Disp1Uint16(1,11,DispTemp16Bit[0]);
Disp1Uint16(2,11,DispTemp16Bit[1]);
Disp1Uint16(3,11,DispTemp16Bit[2]);
Disp1Uint8(4,1,DispTemp5);
Disp1Uint8(4,5,DispTemp6);
Disp1Uint8(4,9,DispTemp7);
Disp1Uint8(4,13,DispTemp8);
}
/*
该函数显示参数设定界面
*/
void DispWinParaSet(){
Sem2=1;
DispTemp16Bit[0] =PowSeting; //PowNow;
DispTemp16Bit[1] =TemSeting;//TemNow;
Sem2=0;
Disp1Char16X16(1,1,15); //设
Disp1Char16X16(1,2,16); //定
Disp1Char16X16(1,3,4); //功
Disp1Char16X16(1,4,5); //率
Disp1Char8X16(1,9,36); //:
Disp1Char16X16(1,8,14); //瓦
Disp1Char16X16(2,1,15); //设
Disp1Char16X16(2,2,16); //定
Disp1Char16X16(2,3,2); //温
Disp1Char16X16(2,4,3); //度
Disp1Char8X16(2,9,36); //:
Disp1Char16X16(2,8,3); //度
Disp1Uint16(1,11,DispTemp16Bit[0]);
//Disp1Uint16(1,11,9999);
Disp1Uint16(2,11,DispTemp16Bit[1]);
DispCsr(1,14);
}
/*
该函数显示主界面
*/
void DispWinMain(){
//Sem1=1;
DispTemp5 =1;//DayRun;
DispTemp6 =23;//HourRun;
DispTemp7 =34;//MinRun;
DispTemp8 =2;//SecRun;
DispTemp16Bit[0] =1234; //PowNow;
DispTemp16Bit[1] =12;//TemNow;
DispTemp16Bit[2] =134;//CurNow;
//Sem1=0;
Disp1Char16X16(1,1,0); //当
Disp1Char16X16(1,2,1); //前
Disp1Char16X16(1,3,4); //功
Disp1Char16X16(1,4,5); //率
Disp1Char8X16(1,9,36); //:
Disp1Char16X16(1,8,14); //瓦
Disp1Char16X16(2,1,0); //当
Disp1Char16X16(2,2,1); //前
Disp1Char16X16(2,3,2); //温
Disp1Char16X16(2,4,3); //度
Disp1Char8X16(2,9,36); //:
Disp1Char16X16(2,8,3); //度
Disp1Char16X16(3,1,6); //灯
Disp1Char16X16(3,2,7); //丝
Disp1Char16X16(3,3,8); //电
Disp1Char16X16(3,4,9); //流
Disp1Char8X16(3,9,36); //:
Disp1Char8X16(3,16,10); //A
Disp1Char16X16(4,2,10); //天
Disp1Char16X16(4,4,11); //时
Disp1Char16X16(4,6,12); //分
Disp1Char16X16(4,8,13); //秒
Disp1Uint16(1,11,DispTemp16Bit[0]);
Disp1Uint16(2,11,DispTemp16Bit[1]);
Disp1Uint16(3,11,DispTemp16Bit[2]);
Disp1Uint8(4,1,DispTemp5);
Disp1Uint8(4,5,DispTemp6);
Disp1Uint8(4,9,DispTemp7);
Disp1Uint8(4,13,DispTemp8);
}
void RamTest(){
uint8 xdata *PR;
uint8 temp;
uint16 i;
PR=RamBase;
for(i=0;i<0x8000;i++){
if((i%16)==0){
Disp1Uint16Hex(1,1,PR);
}
temp=*PR;
*PR=0xaa;
if(*PR!=0xaa){
while(1);
}
*PR=0x55;
if(*PR!=0x55){
while(1);
}
*PR=temp;
PR++;
}
}
/**
该函数为人机界面进程的执行体。实现对按键信息的接受和处理。并且
实现相应的界面的刷新。该进程一般情况下每100ms执行一次。该进程与键
盘扫描进程之间通过一个消息队列<href>KeyReadBuf</href>进行同步。
当键盘扫描进程发现有按键事件的时候会向该消息对列发送键值。该进程
挂在这个消息对列上,超时设置为100ms。超时到了以后该进程向其它模块
询问相应信息,如果值有变化则更新界面。
*/
void HMI_run(void){
static xdata uint8 Windows_ID;
static uint8 Key ;
static xdata uint8 x,z;//y,z ;
Windows_ID=WinMain;
DispWinMain();
while(TRUE){
ToggleLedBit(4);
//DispCsr(1,z++);
//if(z>16) z=1;
switch(Windows_ID){
case WinMain:
if(OSQPend(&Key,KeyReadBuf,100)==OS_Q_TMO){
RefWinMain();
}
else{
Disp1Char8X16(4,16,Key);
if(Key==13){
Windows_ID=WinParaSet;
LCDClear();
DispWinParaSet();
x=0;
z=0;
// DispCsr(x,y);
}
}
//OSQPend(&Key,KeyReadBuf,0);
//Disp1Char8X16(4,16,Key); //:
//
break;
case WinParaSet:
if(OSQPend(&Key,KeyReadBuf,100)!=OS_Q_TMO){
Disp1Char8X16(4,16,Key);
if(Key==15){
Sem2=1;
PowSeting=DispTemp16Bit[0] ; //PowNow;
TemSeting=DispTemp16Bit[1] ;//TemNow;
Sem2=0;
Windows_ID=WinMain;
LCDClear();
DispWinMain();
}
else if(Key==14){
Windows_ID=WinMain;
LCDClear();
DispWinMain();
}
else if(Key==13){
Windows_ID=WinMain;
LCDClear();
DispWinMain();
}
else if(Key==13){
Windows_ID=WinMain;
LCDClear();
DispWinMain();
}
else if(Key==11){
if(x<1){
x=x+1;
ClrCsr (x,14) ;
DispCsr(x+1,14);
z=0;
}
}
else if(Key==10){
if(x>0){
x=x-1;
ClrCsr (x+2,14);
DispCsr(x+1,14);
z=0;
}
}
else if (Key<10){
if(z==0){
DispTemp16Bit[x]=0;
}
if(z<4){
DispTemp16Bit[x]=DispTemp16Bit[x]*10+Key;
Disp1Uint16(x+1,11,DispTemp16Bit[x]);
DispCsr(x+1,14);
z=z+1;
}
}
}
//OSQPend(&Key,KeyReadBuf,0);
//Disp1Char8X16(4,16,Key); //:
//
break;
}
OSWait(K_TMO,30);
}
} /*/
/****************************************/
/* 全角字符点阵码数据输出 */
/****************************************/
void Disp1Char16X16(uint8 PageRow , uint8 PageCol ,uint8 Order){
static uint8 i;
static uint16 Offset; /*偏移量,字符量少的可以定义为UCHAR */
if(PageCol<5){
Offset=Order * 0x20; /*每个字符32字节 */
SetPageLeft1((PageRow-1)*2);
SetYLeft((PageCol-1)*16);
for(i=0;i<16;i++){ /*上半个字符输出,16列 */
DataLeftOut(Hzk16X16[Offset]); /*写输出一字节 */
Offset++;
} /*上半个字符输出结束 */
Offset=(Order * 0x20)+16; /*每个字符32字节 */
SetPageLeft1((PageRow-1)*2+1);
SetYLeft((PageCol-1)*16);
for(i=0;i<16;i++){ /*下半部分*/
DataLeftOut(Hzk16X16[Offset]); /*写输出一字节 */
Offset++;
} /*下半个字符输出结束 */
}
else{ /*右显示区 */
Offset=Order * 0x20; /*每个字符32字节 */
SetPageRight1((PageRow-1)*2);
SetYRight((PageCol-5)*16);
for(i=0;i<16;i++){ /*上半个字符输出,16列 */
DataRightOut(Hzk16X16[Offset]); /*写输出一字节 */
Offset++;
} /*上半个字符输出结束 */
Offset=(Order * 0x20)+16; /*每个字符32字节 */
SetPageRight1((PageRow-1)*2+1);
SetYRight((PageCol-5)*16);
for(i=0;i<16;i++){ /*下半部分*/
DataRightOut(Hzk16X16[Offset]); /*写输出一字节 */
Offset++;
} /*下半个字符输出结束 */
}
}
/****************************************/
/* 半角字符点阵码数据输出 */
/****************************************/
void Disp1Char8X16(uint8 PageRow , uint8 PageCol ,uint8 Order){
static xdata uint8 i;
static xdata uint16 Offset; /*偏移量,字符量少的可以定义为UCHAR */
if(PageCol<9){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -