?? 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 + -