📄 yejing_view_1.c
字号:
#include <reg51.h>
#include <intrins.h>
#include <absacc.h>
#include <dis.h>
unsigned char xdata uwica_r _at_ 0x8000; //写指令代码地址(左)1000,0000,0000,0000
unsigned char xdata urswa_r _at_ 0x8001; //读状态字地址(左) 1000,0000,0000,0001
unsigned char xdata uwdsda_r _at_ 0x8002; //写显示数据地址(左)1000,0000,0000,0010
unsigned char xdata urdsda_r _at_ 0x8003; //读显示数据地址(左)1000,0000,0000,0011
unsigned char xdata uwica_l _at_ 0xb000; //写指令代码地址(右) 1011,0000,0000,0000
unsigned char xdata urswa_l _at_ 0xb001; //读状态字地址(右) 1011,0000,0000,0001
unsigned char xdata uwdsda_l _at_ 0xb002; //写显示数据地址(右) 1011,0000,0000,0010
unsigned char xdata urdsda_l _at_ 0xb003; //读显示数据地址(右) 1011,0000,0000,0011
/////////
void yj_wil(unsigned char dis_com);
void yj_wdl(unsigned char dis_dat);
void yj_wir(unsigned char dis_com);
void yj_wdr(unsigned char dis_dat);
void yj_opdis();
void yj_clear();
void yj_disp(unsigned char dis_code,unsigned char dis_rpag, /////////////////////////液晶显示
unsigned char dis_rcol,unsigned char dis_flag);
void scr_main();
void scr1();
void scr1_1();
void scr2_1();
void scr3_1();
void ext_time();
void timerint0(void);
data unsigned char ufg;
data unsigned char keydata=0;
data unsigned char menuct=0;
unsigned char recv_ok_flag;
unsigned char trans_ok_flag;
unsigned char clear_flag;
int com_count;
code unsigned char HZBUF[]={
0xF0,0xF8,0x0C,0xC4,0x0C,0xF8,0xF0,0x00,//0
0x03,0x07,0x0C,0x08,0x0C,0x07,0x03,0x00,
0x00,0x10,0x18,0xFC,0xFC,0x00,0x00,0x00,//1
0x00,0x08,0x08,0x0F,0x0F,0x08,0x08,0x00,
0x08,0x0C,0x84,0xC4,0x64,0x3C,0x18,0x00,//2
0x0E,0x0F,0x09,0x08,0x08,0x0C,0x0C,0x00,
0x08,0x0C,0x44,0x44,0x44,0xFC,0xB8,0x00,//3
0x04,0x0C,0x08,0x08,0x08,0x0F,0x07,0x00,
0xC0,0xE0,0xB0,0x98,0xFC,0xFC,0x80,0x00,//4
0x00,0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,
0x7C,0x7C,0x44,0x44,0x44,0xC4,0x84,0x00,//5
0x04,0x0C,0x08,0x08,0x08,0x0F,0x07,0x00,
0xF0,0xF8,0x4C,0x44,0x44,0xC0,0x80,0x00,//6
0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,
0x0C,0x0C,0x04,0x84,0xC4,0x7C,0x3C,0x00,//7
0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x00,
0xB8,0xFC,0x44,0x44,0x44,0xFC,0xB8,0x00,//8
0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,
0x38,0x7C,0x44,0x44,0x44,0xFC,0xF8,0x00,//9
0x00,0x08,0x08,0x08,0x0C,0x07,0x03,0x00,
};
void menu_main()
{ scr_main(); }
void dsp_1()
{ menuct=0;
scr1();
}
void dsp_2()
{ menuct=1;
scr1();
}
void dsp_3()
{ menuct=2;
scr1();
}
void dsp_1_1()
{ scr1_1();
}
void dsp_2_1()
{ scr2_1();
}
void dsp_3_1()
{ scr3_1();
}
unsigned char tab_i;
typedef struct
{
unsigned char keyindex;
unsigned char keydownstate;
unsigned char keyupstate;
unsigned char keyokstate;
unsigned char keyescstate;
void (*currentoperate)();
} keytabstruct;
void (*keyfun_ptr)();
#define size_of_menu 7
keytabstruct code keytab[size_of_menu]=
{
{0,0,0,1,0,(*menu_main)},
{1,2,3,4,0,(*dsp_1)},
{2,3,1,5,0,(*dsp_2)},
{3,1,2,6,0,(*dsp_3)},
{4,4,4,1,1,(*dsp_1_1)},
{5,5,5,2,2,(*dsp_2_1)},
{6,6,6,3,3,(*dsp_3_1)},
};
////////////////////////////////////////////////////////////////////////////////////////////////////
void main()
{ ext_time();
yj_opdis();
yj_clear();
scr_main();
tab_i=1;
while(keydata!=OK_KEY);
keydata=0;
yj_clear();
scr1();
loop:while(keydata==0); //等待按键
switch(keydata) //判断按键
{
case DOWN_KEY: //按下NOWN_KEY的相应动作
tab_i=keytab[tab_i].keydownstate;
keyfun_ptr=keytab[tab_i].currentoperate;
yj_clear();
(*keyfun_ptr)();
break;
case UP_KEY:
tab_i=keytab[tab_i].keyupstate;
keyfun_ptr=keytab[tab_i].currentoperate;
yj_clear;
(*keyfun_ptr)();
break;
case OK_KEY:
tab_i=keytab[tab_i].keyokstate;
keyfun_ptr=keytab[tab_i].currentoperate;
yj_clear();
(*keyfun_ptr)();
break;
case ESC_KEY:
tab_i=keytab[tab_i].keyescstate;
keyfun_ptr=keytab[tab_i].currentoperate;
yj_clear();
(*keyfun_ptr)();
default:
keydata=0;
break;
}
keydata=0;
goto loop;
}
//////////////////////////////////////////////////////////////////////////////////////////////////
void scr_main()
{
yj_disp(0,2,20,0x00);
yj_disp(1,2,28,0x00);
yj_disp(2,2,36,0x00);
yj_disp(3,2,44,0x00);
}
/////////////////
void scr1()
{
unsigned char sflag;
if(menuct==0)
{
sflag=0xaa;
}
else
{
sflag=0x00;
}
yj_disp(1,0,20,sflag);
yj_disp(1,0,28,sflag);
yj_disp(1,0,36,sflag);
yj_disp(1,0,44,sflag);
if(menuct==1)
{
sflag=0xaa;
}
else
{
sflag=0x00;
}
yj_disp(2,2,20,sflag);
yj_disp(2,2,28,sflag);
yj_disp(2,2,36,sflag);
yj_disp(2,2,44,sflag);
if(menuct==2)
{
sflag=0xaa;
}
else
{
sflag=0x00;
}
yj_disp(3,4,20,sflag);
yj_disp(3,4,28,sflag);
yj_disp(3,4,36,sflag);
yj_disp(3,4,44,sflag);
}
///////////////
void scr1_1()
{
yj_disp(1,2,48,0x00);
yj_disp(1,2,56,0x00);
yj_disp(5,2,64,0x00);
yj_disp(5,2,72,0x00);
}
///////////
void scr2_1()
{
yj_disp(2,2,48,0x00);
yj_disp(2,2,56,0x00);
yj_disp(5,2,64,0x00);
yj_disp(5,2,72,0x00);
}
/////////
void scr3_1()
{
yj_disp(3,2,48,0x00);
yj_disp(3,2,56,0x00);
yj_disp(5,2,64,0x00);
yj_disp(5,2,72,0x00);
}
///////////////////////////////////////////////////////////////////////////////////////////
void yj_disp(unsigned char dis_code,unsigned char dis_rpag, //dis_code--在数组HZBUF[]中的行数,
unsigned char dis_rcol,unsigned char dis_flag) //dis_rpag--显示RAM共64行,分8页,每页分8行,此处表示在哪一页
//dis_rcol--在液晶平面上显示的列数,
{ //dis_flag--是要将字作为黑色输出(0x00),还是字的周围作为黑色输出(0xaa)
int i=0;
int j;
int ch;
unsigned char k=0;
unsigned char flag=0x00;
i=dis_code * 16; //确定在HZBUF[]中的坐标。在HZBUF[]中,每两行(16个数)算一行
dis_rpag = dis_rpag & 0x07; // 先将前5位置成00000,后三位不变
dis_rpag = dis_rpag | 0xb8; // 再将前5位置成10111,后三位不变,后三位表示此处显示在RAM中的哪一页
k=dis_rcol; // 将行数赋给K。由K来保持行数,因为下面要对dis_col进行运算
for(ch=1;ch<3;ch++)
{
dis_rcol=k;
if(k>=64) //行数大于64就要在液晶右半平面显示:
{
dis_rcol=dis_rcol-64;
yj_wir(dis_rpag); //在往上数第8行,已经将液晶置于"页设置状态",这里就将第几页送给液晶(液晶内RAM共8页)
yj_wir(dis_rcol | 0x40); //此处进行列设置,将要在哪一列显示的数给液晶进行显示
flag=0xaa; //标志位---区分是在液晶右半面上显示还是在左半面显示
}
else //行数小于64行的时候,在左边显示
{
yj_wil(dis_rpag);
yj_wil(dis_rcol | 0x40);
flag=0x00; //标志位---区分是在液晶右半面上显示还是在左半面显示
}
for(j=0;j<8;j++) // 循环八次,把HZBUF[]中所选那一行的八个数据都输出
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -