📄 yejing_view_1.c
字号:
{
if(flag == 0xaa) //液晶右半面上显示
{
if(dis_flag == 0xaa)
{
yj_wdr(~HZBUF[i+j]); //在输出的那一行中,每一个数逐个输出
} //此处取反,是将的周围作为黑点输出,而字本身变成了无色??
else
{
yj_wdr(HZBUF[i+j]); //在输出的那一行中,每一个数逐个输出
}
}
else //液晶左半面显示
{
if(dis_flag == 0xaa)
{
yj_wdl(~HZBUF[i+j]); //在输出的那一行中,每一个数逐个输出
} //此处取反,是将的周围作为黑点输出,而字本身变成了无色?
else
{
yj_wdl(HZBUF[i+j]); //在输出的那一行中,每一个数逐个输出
}
}
dis_rcol++; //输出下一列
if(dis_rcol>=64)
{
dis_rcol=dis_rcol-64;
yj_wir(dis_rpag);
yj_wir(dis_rcol|0x40);
flag=0xaa;
dis_rcol=0;
}
}
i=i+8; // 下一行
dis_rpag++; //翻页
}
return;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////液晶清屏///////////////////////////////////////////////////////////////////
void yj_clear()
{
unsigned char i;
unsigned char j;
unsigned rol=0x40;
unsigned pag=0xb8;
for(i=0;i<8;i++) // (左边)
{
yj_wil(pag); //页设置指令
yj_wil(rol); //列地址设置指令
for(j=0;j<64;j++)
{
yj_wdl(0x00); //向液晶中写数据
}
pag++; //翻页,把RAM中8页全部清理
}
rol=0x40;
pag=0xb8;
for(i=0;i<8;i++) //右边
{
yj_wir(pag);
yj_wir(rol);
for(j=0;j<64;j++)
{
yj_wdr(0x00);
}
pag++;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////启动显示////////////////////////////////////////////////////
void yj_opdis() //启动显示(左边和右边)
{
yj_wil(0x3f);
yj_wir(0x3f);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////液晶显示模块指令系统/////////////////////////////////////////////
void yj_wil(unsigned char dis_com) //液晶写指令(左边)
{
unsigned char i=0;
do{
i = urswa_l; //本来urswa_r = 0x8001;
i = i & 0x80; //将除低八位的低7位置0
}while(i!=0); //当I!=0时,do。但此处i = 0;如果I不等于0。说明液晶内部在工作,则等待
uwica_l = dis_com; // 此处开始往液晶里写命令
return;
}
void yj_wdl(unsigned char dis_dat) //液晶写数据(左边)
{
unsigned char i=0;
do{
i = urswa_l;
i = i & 0x80;
}while(i!=0);
uwdsda_l = dis_dat;
return;
}
void yj_wir(unsigned char dis_com) //液晶写指令(右边)
{
unsigned char i=0;
do{
i = urswa_r; //urswa_r = 0x8001;
i = i & 0x80; //将除低八位的第一位的其他位置0
}while(i!=0); // 当I!=0时,do。但此处i = 0;如果I不等于0。说明液晶内部在工作
uwica_r = dis_com; //此处开始往液晶里写命令
return;
}
void yj_wdr(unsigned char dis_dat) //液晶写数据(右边)
{
unsigned char i=0;
do{
i = urswa_r;
i = i & 0x80;
}while(i!=0);
uwdsda_r = dis_dat;
return;
}
/////////////////////////////////////////////中断初始化程序/////////////////////////////////////////
void ext_time()
{
P1=0xff; //指令符-----p1的8个管脚:P1.0~~P1.7
ufg = 0x00;
menuct = 0;
keydata = 0;
com_count = 0;
clear_flag = COMF_OFF; // #define COMF_OFF 0x00(在头文件中)
recv_ok_flag = REV_FALSE; // #define REV_FALSE 0x00
trans_ok_flag = TRANS_FALSE; // #define TRANS_FALSE 0x00
EA = 0; //禁止所以中断,EA=1---开放中断,各个中断由它的中断屏蔽所决定
TMOD = 0x21; /* TMOD--定时器方式寄存器---定时器1是自动从装载的8位计数器,定时器0的方式是16位 计数器*/
TH0 = 0xd8; //定时器0的高8位字节,
TL0 = 0xf0; //定时器0的低八位
TH1 = 0xfd; // 定时器1 波特率9600BPS @ 11.0592MHz??
TL1 = 0xfd;
PCON = PCON & 0x7f; // SMOD0 位清零,使能UART0 的波特率/2 功能。PCON--电源控制寄存器
SCON = 0x50; // 串行口工作方式设置,8 位UART,可变波特率--并允许接收
IP = 0x10; //;置RS232为高优先级中断,T0为低优先级中断
IE = 0x82; //允许定时器0中断
TR0 = 1; //定时器0允许
TR1 = 1; //定时器1允许
}
/////////////////////////////////////////定时器中断,键盘扫描程序//////////////////////////////////
void timerint0(void) interrupt 1 using 2
{
static unsigned char keydatabk = 0;
static unsigned char count = 0;
static unsigned char uflag1 =0x00;
unsigned char bak;
if(ufg == 0x00) //前面的初定义 : data unsigned char ufg; ufg = 0x00;----此处意思是先扫描key1,key3,key5
{
P10 = 0; //头文件中sbit P10 = 0x90;------将P10管脚设置低电平,低电平就是接地,可以把高电平拉低
bak = P1; // 将P1管脚的寄存器的值给bak----读取P1的状态
bak = P1 & 0x38; //取P3,4,6的值
if(bak != 0x38) //如果P1.3,P1.4,P1.5不都是1的话,(说明key1,3,5中有键被按下)
{
if((keydatabk ^ bak)!=0) //如果bak与0x00不同的话,
{
keydatabk = bak ; //把从端口扫描的值给keydatabk;
uflag1 = 0xbb;
count = 0;
}
else
{
if(uflag1 == 0xbb) //下一次扫描的时候,如果扫描到相同的值,说明按键还没有被放开
{
count++;
}
}
}
else //如果P1.2,P1.3,P1.4都是1的话,(说明key1,3,5三个键没有按下)
{
uflag1 = 0x00;
keydatabk = 0;
count = 0;
}
if(keydatabk == 0x00)
{
ufg = 0xaa; //如果没有健按下,就将ufg赋值成0xaa,然后进行下次扫描,即key2,4,6扫描,如果有键按下,P11扫描就不进行
}
P10 = 1; //将P1.0设置成高电平
}
else if(ufg == 0xaa) //扫描KEY2,4,6
{
P11 = 0; //将P11管脚设置成低电平
bak = P1;
bak = P1 & 0x38; //取P13,14,15值
if(bak != 0x38) //如果按键被按下
{
if((keydatabk ^ bak)!=0)
{
keydatabk = bak; //把从端口扫描的值给keydatabk;
uflag1 = 0xaa;
count = 0;
}
else
{
if(uflag1 == 0xaa) //下一次扫描的时候,如果扫描到相同的值,说明按键还没有被放开
{
count++;
}
}
}
else
{
uflag1 = 0x00; //如果P1.2,P1.3,P1.4都是1的话,(说明key2,4,6三个键没有按下)
keydatabk = 0;
count = 0;
}
if(keydatabk == 0x00) //如果没有健按下,就将ufg赋值成0x00,然后进行下次扫描,即key1,3,5扫描,如果有键按下,P11扫描就不进行
{
ufg = 0x00;
}
P11 = 1; //将P1.0设置成高电平
}
if(count == 2) //确定是某一键按下
{
if(uflag1 == 0xaa) //如果是对KEY2,4,6扫描
{
keydata = keydatabk; //将按键值保存,以便接下来对其进行判断
}
else if(uflag1 == 0xbb) //如果是对KEY1,3,5扫描
{
keydata = keydatabk | 0x40; //变换后保存
}
uflag1 = 0x00;
count = 0;
}
if(clear_flag == COMF_SET) //循环
{
com_count++;
if(com_count == COMF_CT) //
{
com_count = 0;
clear_flag = COMF_CLEAR;
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -