📄 venus.c
字号:
{
unsigned char i,j;
unsigned int k;
i=0;
while (lcd_buf[i]!=0xff)
{
if (lcd_buf[i]==0xfe) {lcd_ram_addr++;i++;}
k=32*lcd_buf[i]+(&HZK16); //字模地址
load_data(hzk_page,k,0,&font_data,32); //取字模数据
k=lcd_ram_addr;
lcd_ram_addr=lcd_ram_addr+2; //下一个汉字地址
j=0;
while (j<32)
{
lcd_busy();
Lcd_Data_Port=k%256; //地址低位
lcd_busy();
Lcd_Data_Port=k/256; //地址高位
lcd_busy();
Lcd_Code_Port=0x24; //SET ADDRESS POINTER
lcd_busy();
Lcd_Data_Port=~font_data[j];
lcd_busy();
Lcd_Code_Port=0xc0;
j++;
lcd_busy();
Lcd_Data_Port=~font_data[j];
lcd_busy();
Lcd_Code_Port=0xc0;
j++;
k=k+lcd_graphic_columns;
}
i++;
}
}
print_e(unsigned int lcd_ram_addr) //显示英文字符串
{
unsigned char i;
lcd_ram_addr=lcd_ram_addr+0xf00; //写到文本区
i=0;
lcd_busy();
Lcd_Data_Port=lcd_ram_addr%256; //地址低位
lcd_busy();
Lcd_Data_Port=lcd_ram_addr/256; //地址高位
lcd_busy();
Lcd_Code_Port=0x24; //SET ADDRESS POINTER
while (lcd_buf[i]!=0xff)
{
lcd_busy();
Lcd_Data_Port=lcd_buf[i];
lcd_busy();
Lcd_Code_Port=0xc0;
i++;
}
}
print_fill(unsigned int lcd_ram_addr,unsigned char filldata,width,length)
{
unsigned char j;
while (width>0)
{
lcd_busy();
Lcd_Data_Port=lcd_ram_addr%256; //地址低位
lcd_busy();
Lcd_Data_Port=lcd_ram_addr/256; //地址高位
lcd_busy();
Lcd_Code_Port=0x24; //SET ADDRESS POINTER
j=length;
while (j>0)
{
lcd_busy();
Lcd_Data_Port=filldata;
lcd_busy();
Lcd_Code_Port=0xc0;
j--;
}
lcd_ram_addr=lcd_ram_addr+lcd_graphic_columns;
width--;
}
}
reset_flash()
{
unsigned char xdata *app;
EA=0; //关中断
Flash_Page=0x80;
*app=0xf0; //任意地址写0xf0复位flash
Flash_Page=Flash_Reg;
EA=1; //开中断
}
erase_flash(unsigned char sector)
{
unsigned char xdata *app;
EA=0; //关中断
Flash_Page=0x80;
if (sector==64)
{
app=0x555;
*app=0xaa;
app=0x2aa;
*app=0x55;
app=0x555;
*app=0x80;
*app=0xaa;
app=0x2aa;
*app=0x55;
app=0x555;
*app=0x10;
goto erase_ret;
}
if (sector<64)
{
app=0x555;
*app=0xaa;
app=0x2aa;
*app=0x55;
app=0x555;
*app=0x80;
*app=0xaa;
app=0x2aa;
*app=0x55;
app=sector;
*app=0x30;
}
erase_ret:
Flash_Page=Flash_Reg;
EA=1; //开中断
}
program_flash(unsigned int k,unsigned char x)
{
unsigned char xdata *app;
EA=0; //关中断
Flash_Page=0x80|Flash_Reg;
app=0x555;
*app=0xaa;
app=0x2aa;
*app=0x55;
app=0x555;
*app=0xa0;
app=k;
*app=x;
Flash_Page=Flash_Reg;
EA=1; //开中断
}
com_a_fs(unsigned int k)
//参数k为发送缓冲区首地址,要求缓冲区first字节空着,second和third字节为发送数据长度N
//second字节为长度高字节,third字节为长度低字节,从fouth字节开始存放N字节数据
{
txa_point=k; //设置发送指针
*txa_point=0x55; //验证头
txa_point++;
txa_lenth=(*txa_point)*256; //长度高字节
txa_point++;
txa_lenth=txa_lenth+(*txa_point); //长度低字节
txa_point=k; //设置发送指针
txa_lenth=txa_lenth+3;//发送长度(包括1字节验证头,2字节接收长度"N"和N字节数据)-->N+3
com_reg[2]=0x05; //CRA 打开发送通道A
com_reg[3]=0xaa; //THRA 启动头
txa_en=1; //允许发送
}
com_b_fs(unsigned int k)
//参数k为发送缓冲区首地址,要求缓冲区first字节空着,second和third字节为发送数据长度N
//second字节为长度高字节,third字节为长度低字节,从fouth字节开始存放N字节数据
{
txb_point=k; //设置发送指针
*txb_point=0x55; //验证头
txb_point++;
txb_length=(*txb_point)*256; //长度高字节
txb_point++;
txb_length=txb_length+(*txb_point); //长度低字节
txb_point=k; //设置发送指针
txb_length=txb_length+3;//发送长度(包括1字节验证头,2字节接收长度"N"和N字节数据)-->N+3
com_reg[10]=0x05; //CRB 打开发送通道B
com_reg[11]=0xaa; //THRB 启动头
txb_en=1; //允许发送
}
unsigned char key(unsigned char y)
{
if (P10==0) {;}
else if (P11==0) {y++;}
else if (P12==0) {y++;y++;}
else if (P13==0) {y++;y++;y++;}
else {y=0xFF;}
return(y);
}
unsigned char getchar() //4*4阵列键盘接P1口
{
unsigned char const keyname[16]={1,2,3,CLEAR,
4,5,6,ESC,
7,8,9,ENTER,
0,POINT,LEFT,RIGHT};
unsigned char x,y;
unsigned int k;
NOKEY:
P1=0xF;
x=0x0;
while (x==0x0) //等待按键
{
x=P1;
x=~x;
x=x&0xF;
if (rxa_ok) {goto GETKEY;}
}
for (k=0;k<5000;k++) {;} //延时消抖动
P1=0xEF; //扫描第一行
x=key(0);
if (x==0xFF)
{
P1=0xDF; //扫描第二行
x=key(4);
if (x==0xFF)
{
P1=0xBF; //扫描第三行
x=key(8);
if (x==0xFF)
{
P1=0x7F;//扫描第四行
x=key(12);
if (x==0xFF) {goto NOKEY;}
}
}
}
y=x; //暂存按键扫描码
P1=0xF;
x=0x0;
while (x!=0xF) //等待键释放
{
x=P1;
x=x&0xF;
}
x=keyname[y]; //转换为键值
GETKEY:
return(x);
}
move_data(unsigned char xdata *m,unsigned char xdata *n,unsigned int k)
//当前RAM页内数据搬移 m->n
{
while (k>0)
{
*n=*m;
n++;
m++;
k--;
}
}
bhsy() //保护试验
{
unsigned char code TABLE02[6]={24,14,25,26,27,0xFF};//VENUS
unsigned char code TABLE03[5]={29,30,31,32,0xFF};//保护试验
unsigned char code TABLE04[5]={28,12,33,34,0xFF};//PC主控
unsigned char code TABLE05[5]={35,36,37,38,0xFF};//结果处理
unsigned char code TABLE06[5]={17,18,39,40,0xFF};//系统设置
unsigned int code MENU_ADD[4]={TABLE03,TABLE04,TABLE05,TABLE06};//菜单代码地址数组
unsigned int code MENU_DIS[4]={0x1e0,0x3c0,0x5a0,0x780};//菜单显示位置数组
unsigned char i,counter_old,counter_new;
bit off=1;
counter_new=0x0;
counter_old=0x0;
lcd_cls(lcd_page1);
lcd_cls(lcd_page2);
load_data(0,&TABLE02,0,&lcd_buf,6);
print_c16(0x8);
//
load_data(0,&TABLE03,0,&lcd_buf,5);
print_c16(MENU_DIS[0]);
load_data(0,&TABLE04,0,&lcd_buf,5);
print_c16(MENU_DIS[1]);
load_data(0,&TABLE05,0,&lcd_buf,5);
print_c16(MENU_DIS[2]);
load_data(0,&TABLE06,0,&lcd_buf,5);
print_c16(MENU_DIS[3]);
while (off)
{
load_data(0,MENU_ADD[counter_new],0,&lcd_buf,20);
fprint_c16(MENU_DIS[counter_new]);
counter_old=counter_new;
i=getchar();
switch (i)
{
case UP:{
if (counter_new==0) {counter_new=0x3;}
else {counter_new--;}
}break;
case DOWN:{
if (counter_new<0x3) {counter_new++;}
else {counter_new=0x0;}
}break;
case ESC:{off=0;}break;
case ENTER:{
switch (counter_new)
{
case 0:{;}break;
case 1:{;}break;
case 2:{;}break;
case 3:{;}break;
}
}break;
}
load_data(0,MENU_ADD[counter_old],0,&lcd_buf,20);
print_c16(MENU_DIS[counter_old]);
}
}
xtcssd() //系统参数设定
{
unsigned char code TABLE01[7]={24,14,22,25,26,27,0xFF};//系统参数设定
unsigned char code TABLE02[5]={29,30,31,32,0xFF};//系统电压
unsigned char code TABLE03[5]={28,12,33,34,0xFF};//负荷电流
unsigned char code TABLE04[5]={35,36,37,38,0xFF};//系统频率
unsigned int code MENU_DIS[3]={0x87,0xc3,0xff};//菜单显示位置数组
unsigned char xdata xtcs_x[3][9]; //设置数据存放数组
unsigned int xdata menu_add[3]; //激活块地址数组 menu_add=(MENU_DIS/30)*240+(MENU_DIS%30)
unsigned char i,counter_old,counter_new;
bit off=1;
long y;
load_data(0,&xtcs_c,0,&xtcs_x,27); //装初始设置数据
menu_add[0]=(MENU_DIS[0]/30)*240+(MENU_DIS[0]%30);
menu_add[1]=(MENU_DIS[1]/30)*240+(MENU_DIS[1]%30);
menu_add[2]=(MENU_DIS[2]/30)*240+(MENU_DIS[2]%30);
counter_new=0x0;
counter_old=0x0;
lcd_cls(lcd_page1);
lcd_cls(lcd_page2);
load_data(0,&TABLE01,0,&lcd_buf,7);
print_c16(0x8);
load_data(0,&TABLE02,0,&lcd_buf,5);
print_c16(0x1e0);
load_data(0,&TABLE03,0,&lcd_buf,5);
print_c16(0x3c0);
load_data(0,&TABLE04,0,&lcd_buf,5);
print_c16(0x5a0);
move_data(&xtcs_x[0][0],&lcd_buf,9);
print_e(MENU_DIS[0]);
move_data(&xtcs_x[1][0],&lcd_buf,9);
print_e(MENU_DIS[1]);
move_data(&xtcs_x[2][0],&lcd_buf,9);
print_e(MENU_DIS[2]);
y=d_to_hex(&xtcs_x[0][0]);
while (off)
{
move_data(&xtcs_x[counter_new][0],&lcd_buf,9);
print_fill(menu_add[counter_new],0xff,0x8,0x9);
counter_old=counter_new;
i=getchar();
switch (i)
{
case LEFT:{
if (counter_new==0) {counter_new=0x2;}
else {counter_new--;}
}break;
case ENTER:
case RIGHT:{
if (counter_new<0x2) {counter_new++;}
else {counter_new=0x0;}
}break;
case UP:{
if (counter_new==0) {counter_new=0x2;}
else {counter_new--;}
}break;
case DOWN:{
if (counter_new<0x2) {counter_new++;}
else {counter_new=0x0;}
}break;
case ESC:{off=0;}break;
case START:{
switch (counter_new)
{
case 0:{;}break;
case 1:{;}break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -