📄 gj3.c
字号:
#include<reg51.h>
#include<absacc.h>
#include "b.h"
#include <stdio.h>
#define FOSC 12 //11.0592 MHz
#define BAUD_RATE 9.6 //kpbs
unsigned char zu_temp1;
unsigned char zu_temp2;
unsigned char zu_temp3;
unsigned char zu_temp4,zu_temp5,zu_temp6,zu_temp7,zu_temp8,max_wei;
unsigned char dis_mod1,dis_mod2,dis_mod3,dis_mod4,dis_mod5,dis_mod6;
unsigned char deng_t1;
//
unsigned char key1;
unsigned char key2;
unsigned char key_last2;
unsigned char have_key;
unsigned char menu_page;
//
unsigned char cursor_hang;
//
unsigned char rcvdata[3]; //from chuankou data
unsigned char rcvcount;
bit EvRcv; // tngxn symbol
struct errstore
{
unsigned char err_num;
unsigned char err_wei;
// unsigned char err2;
};
struct errstore err[24]; //yi-wei 8 column datagroup
//unsigned char err_wei[8];
unsigned char datacomm1; //发送数据区
unsigned char datacomm2[3]; //接收数据区
unsigned char *datacomm2_p; //接收数据指针
//
sbit P10=P1^0; //复位
sbit P11=P1^1; //背光
sbit P12=P1^2; //串口指示灯
sbit P13=P1^3; //测试
//
bit P12_save;
bit P13_save;
//
bit need_renew_lcd;
bit need_move_cursor;
bit need_chang_kaiguan;
bit back_lamp;
unsigned char * p_renew;
//
void t_tx(unsigned char send_temp);
void tx_ljcs();
void tx_download();
void initial(void);
read_err_to_struct(unsigned char rx_data);
dis_err1(unsigned char tmp_mod);
dis_err2(unsigned char tmp_mod);
dis_err3(unsigned char tmp_mod);
dis_err4(unsigned char tmp_mod);
dis_err5(unsigned char tmp_mod);
dis_err6(unsigned char tmp_mod);
ansi1();
err_num(unsigned char num_tmp); //write num for hang1
renew_led(unsigned char * p_rom);
move_cursor(unsigned char hang1);
back_lamp_contrl(bit ifon);
renew_hang(unsigned char hang1,unsigned char * p_rom);
show_picture(unsigned char * p_picture);
void key_excu();
set_lcd_page();
/************************************************************* */
void rcv_INT(void)interrupt 4
{ int i,j,lamp_sum=0;
// unsigned char rcv_tmp;
P12=1;
if(RI)
{
rcvdata[rcvcount]=SBUF;
// datacomm2[rcvcount]=rcvdata[rcvcount];
rcvcount++;
EvRcv=1;
if (rcvcount>2) ES=0;
/* for (i=0;i<2500;i++)
{lamp_sum++;
if (lamp_sum>500)
{
lamp_sum=0;
P12_save=~P12_save;
P12=P12_save;
}
} */
RI=0;
}
}
/************************************************************* */
void main()
{ unsigned char i1;
unsigned char i2,i3;
// unsigned char *datacomm2_p;
datacomm2_p=&datacomm2[0];
restar_lcd(); //send write directive to lcd
initial(); //initial AT89C51 Register
init_ram(); // set lcd power_on initial_state
init_lcd(); //set lcd power_on initial_state
while(1)
{
/************************************************************* */
if(need_renew_lcd) //执行显示功能
{
need_renew_lcd=0;
set_lcd_page();
if(menu_page==120)
{
set_lcd_kuocong();
ansi();
PBYTE[0X00]=0x80; //先设绘图垂直地址
ansi();
PBYTE[0X00]=0x80; //设绘图水平地址
zu_temp1=0x80; // zu_temp1作为垂直位址
for(i1=0;i1<32;i1++) //共两行32个垂直位址
{
for(i2=0;i2<16;i2++) //一行8字16字节
{
ansi();
PBYTE[0X01]=0x00; //显示背景
ansi();
PBYTE[0X01]=0x00;
}
zu_temp1=zu_temp1+1;
ansi();
PBYTE[0X00]=zu_temp1; //设绘图垂直地址0x81
ansi();
PBYTE[0X00]=0x80; //设绘图水平地址
}
show_picture(&picuter1[0]); //显示图形
set_lcd_jiben();
p_renew=&welcome[0]; //p_renew is display_pointer
renew_led(p_renew); //显示字体
ansi();
}
if(menu_page==0)
{
PBYTE[0X00]=0x01; //清屏
for(zu_temp1=0;zu_temp1<250;zu_temp1++)//1ms
{
for(zu_temp2=0;zu_temp2<100;zu_temp2++);//400us
}
p_renew=&first_page[0]; //main menu page ( 与ABS联机测试....)
need_chang_kaiguan=1; //enable change_lamp symbol
renew_led(p_renew); //display main menu 1 page
}
if(menu_page==1)
{
p_renew=&second_page[0];
renew_led(p_renew); //display main menu 2 page
}
}//if(need_renew_lcd)
/************************************************************* */
if(need_move_cursor) //开启光标移动功能
{
need_move_cursor=0; //disable change_cursor symbol
move_cursor(cursor_hang); //display tuobiao at cursor_hang
}
/************************************************************* */
if(need_chang_kaiguan) //背光开关转换功能
{
need_chang_kaiguan=0; //disable change_lamp symbol
back_lamp_contrl(back_lamp);
}
/************************************************************* */
// key_excu();
//{
if(key_last2==0x0e) //1=no_key
{
need_chang_kaiguan=0;
key_last2=0;
switch (menu_page)
{
case no_menu1:
{
cursor_hang=0x10;
need_move_cursor=1;
need_renew_lcd=1;
break;
}
case no_menu2:
{
cursor_hang=0x14;
need_move_cursor=1;
need_renew_lcd=1;
break;
}
case no_menu3:
{
cursor_hang=0x20;
need_move_cursor=1;
need_renew_lcd=1;
break;
}
case no_menu4:
{
cursor_hang=0x24;
need_move_cursor=1;
need_renew_lcd=1;
break;
}
/* case no_menu5:
{
cursor_hang=0x10;
need_move_cursor=1;
need_renew_lcd=1;
break;
} */
/* case no_menu6:
{
cursor_hang=0;
need_move_cursor=1;
need_renew_lcd=1;
break;
}
case no_menu7:
{
cursor_hang=0;
need_move_cursor=1;
need_renew_lcd=1;
break;
} */
default:
{
cursor_hang=1;
need_move_cursor=1;
need_renew_lcd=1;
break;
}
}//switch (menu_page)
}
if(key_last2==0x0d) //2=up_key
{
key_last2=0;
cursor_up_proc();
}//if(key_last2==0x0d) //2
if(key_last2==0x0b) //3=down_key
{
key_last2=0;
cursor_down_proc();
}//if(key_last2==0x0b) //3
if(key_last2==0x07) //4=yes_key
{
key_last2=0;
switch(cursor_hang)
{
case 1: //下载故障
cursor_hang= 0x64; //(0x33)正在下载故障 请稍等...
need_renew_lcd=1;
set_lcd_page();
tx_download();
break;
case 3: //背光开关
back_lamp=~back_lamp;
need_chang_kaiguan=1;
break;
case 2: //显示故障
/* datacomm2[0]=0x77;
datacomm2[1]=0xff;
datacomm2[2]=0x03; */
/* t_tx(datacomm2[0]);
t_tx(datacomm2[1]);
t_tx(datacomm2[2]); */
if (datacomm2[0]==0&&datacomm2[1]==0&&datacomm2[2]==0
)
{ cursor_hang= 0x74; //(0x36)无故障显示
menu_page=no_menu4;
need_renew_lcd=1;
}
else
cursor_hang=0x10;
need_move_cursor=1;
need_renew_lcd=1;
break;
}
}//if(key_last2==0x07)
}//while(1)
}//main()
/************************************************************* */
void t() interrupt 1 //1MS中断
{ /* unsigned char datacomm,l;
datacomm=0x11;
l=8 ; */
int n;
TL0=0X17;
TH0=0XFC; //1ms
//
deng_t1++;
if(deng_t1>250)
{
deng_t1=0;
P12_save=~P12_save;
P12=P12_save;
}
//
scan_key(); //1ms scan key
}
/************************************************************* */
void initial(void)
{
IE=0X82; //允许T0中断
//TMOD &= 0XF0; // clear Timer 0
TMOD = 0X21; //T1 is 方式2 ,T0工作于方式1
PCON=0;
SCON=0X50; //串口工作方式1,固定波特率
// TCON=0X02;
TL0 = 0X0; // value set by user
TH0 = 0X0; // value set by user
TL1=0x100-(unsigned long)(FOSC*1000/(12*32*BAUD_RATE/2));
TH1=TL1;
TR0 = 1;
TR1=1;
PCON=0X80;
IP=0X10; //串口中断为高优先级
// ES=1; //允许串口中断
EA=1;
}
/************************************************************* */
restar_lcd() //send write directive to lcd
{
P10=0;
for(zu_temp1=0;zu_temp1<250;zu_temp1++)//1ms
{
for(zu_temp2=0;zu_temp2<100;zu_temp2++);//400us
}
P10=1;
}
/************************************************************* */
init_ram()
{
need_renew_lcd=1;
//p_renew=&welcome[0];
cursor_hang=120; //display huitu page
need_move_cursor=0;
back_lamp=1;
P11=0; //背光灯亮
need_chang_kaiguan=0;
//menu_page=120;
for(zu_temp1=0;zu_temp1<8;zu_temp1++)
datacomm2[0]=0; //清零故障标识变量
datacomm2[1]=0;
datacomm2[2]=0;
zu_temp4=0;
zu_temp5=0;
zu_temp6=0;
zu_temp7=0;
zu_temp8=0;
// zu_temp9=0;
}
/************************************************************* */
init_lcd()
{
ansi();
PBYTE[0X00]=0x30; //8位输入
ansi();
PBYTE[0X00]=0x30; //8位输入
ansi();
PBYTE[0X00]=0x0c; //打开显示
ansi();
PBYTE[0X00]=0x01; //清屏
for(zu_temp1=0;zu_temp1<250;zu_temp1++)//1ms
{
for(zu_temp2=0;zu_temp2<100;zu_temp2++);//400us
}
}
/************************************************************* */
set_lcd_jiben()
{
ansi();
PBYTE[0X00]=0x30; //8位输入
ansi();
PBYTE[0X00]=0x30; //8位输入
}
/************************************************************* */
set_lcd_kuocong()
{
ansi();
PBYTE[0X00]=0x34; //8位输入
ansi();
PBYTE[0X00]=0x36; //8位输入
}
/************************************************************* */
renew_led(unsigned char * p_rom) //write display_code(* p_rom) to lcd
{ //as page write display_code(* p_rom)
ansi();
PBYTE[0X00]=0X80;
for(zu_temp1=0;zu_temp1<16;zu_temp1++)
{
ansi();
PBYTE[0X01]=* p_rom;
p_rom++;
}
//
ansi();
PBYTE[0X00]=0X90;
for(zu_temp1=0;zu_temp1<16;zu_temp1++)
{
ansi();
PBYTE[0X01]=* p_rom;
p_rom++;
}
//
ansi();
PBYTE[0X00]=0X88;
for(zu_temp1=0;zu_temp1<16;zu_temp1++)
{
ansi();
PBYTE[0X01]=* p_rom;
p_rom++;
}
//
ansi();
PBYTE[0X00]=0X98;
for(zu_temp1=0;zu_temp1<16;zu_temp1++)
{
ansi();
PBYTE[0X01]=* p_rom;
p_rom++;
}
}
/************************************************************* */
ansi()
{
unsigned char yan1;
for(yan1=0;yan1<200;yan1++);
}
ansi1()
{
unsigned char yan1;
for(yan1=0;yan1<70;yan1++);
}
/************************************************************* */
scan_key() //采样键盘口数据识别并判别按键号
{
unsigned char aaa;
aaa=P2; //read P2 port
aaa=aaa& 0x0f; //clear p24--p27
if(aaa<0x0f)
{
key1=aaa; //第一次采样P2数据
if(key1==key2)
{
//key_last=key1;
if(have_key == 0) //确定是否曾识别出按键
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -