📄 setter.c
字号:
#include <REG51F020.H>
#include "absacc.h"
#include "lcddata.h"
#define uint unsigned int
#define uchar unsigned char
#define x1 0x80
#define x2 0x88
#define y 0x80
#define comm 0
#define dat 1
#define up 1
#define down 0
//液晶控制
sbit cs = P1^4;
/*---------------------------------------------*/
void init_lcd(void)
{
uchar data i,j;
for(j=0;j<32;j++)
{
for(i=0;i<16;i++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,0x80+j);
wr_lcd (comm,0x80+i);
wr_lcd (comm,0x30);
wr_lcd (dat,0);
wr_lcd (dat,0);
}
}
wr_lcd (comm,0x36);
wr_lcd (comm,0x30); /*30---基本指令动作*/
tdelay1ms ();
wr_lcd (comm,0x01); /*清屏,地址指针指向00H*/
tdelaynms (10);
wr_lcd (comm,0x06); /*光标的移动方向*/
tdelay1ms ();
wr_lcd (comm,0x0c); /*开显示,关游标*/
tdelay1ms ();
}
/*------------在某一行显示汉字或字符**********************/
void chn_disp (uchar row, uchar code *chn)//row 行号,chn 要显示的字符串首址
{
uchar i;
uchar j;
switch(row)
{
case 1: i=0x80;break;
case 2: i=0x90;break;
case 3: i=0x88;break;
case 4: i=0x98;break;
default: i=0x80;
}
wr_lcd (comm,0x30);
wr_lcd (comm,i);
for (j=0;j<16;j++) // To clear a whole line first
wr_lcd (dat,0x20);
wr_lcd (comm,i);
}
/*----------------------反白显示程序--------------------------*/
//当data1=0xff,data2=0xff时,在x0,y0处反白显示16xl*yl.
//当data1=0xff,data2=0x00时,在x0,y0处前半反白显示8xl*yl.
//当data1=0x00,data2=0xff时,在x0,y0处后半反白显示8xl*yl.
void con_disp (uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl)
{
uchar i,j;
for(j=0;j<yl;j++)
{
for(i=0;i<xl;i++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,y0+j);
wr_lcd (comm,x0+i);
wr_lcd (comm,0x30);
wr_lcd (dat,data1);
wr_lcd (dat,data2);
}
}
wr_lcd (comm,0x36);
}
//clr gd ram
/*------------------清掉绘图ram中的所有内容------------------*/
void clr_gdram(void)
{
uchar i,j;
for(j=0;j<32;j++)
{
for(i=0;i<16;i++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,0x80+j);
wr_lcd (comm,0x80+i);
wr_lcd (comm,0x30);
wr_lcd (dat,0);
wr_lcd (dat,0);
}
}
wr_lcd (comm,0x36);
}
/*---------------------------清DDRAM---------------------------*/
void clrram (void)
{
wr_lcd (comm,0x30);
tdelay1ms ();
wr_lcd (comm,0x01);
tdelaynms (10);
//return;
}
/*-----------------------反白显示子函数------------------------*/
/***************************************************************
注:
此函数中使用到的全局变量:
fan_bai_line_bak;
*****************************************************************/
void fan_bai_sub(uchar row)
{ uchar i,j;
fan_bai_line_bak=row;
switch(row)
{
case 1: i=0x80,j=0x80;break;
case 2: i=0x90,j=0x90;break;
case 3: i=0x88,j=0x80;break;
case 4: i=0x98,j=0x90;break;
default: i=0x80,j=0x80;
}
con_disp (0xff,0xff,i,j,8,16);
}
/*-------------向液晶控制器中写指令/数据子函数------------*/
void wr_lcd (uchar dat_comm,uchar content)
{
uchar k;
cs=1;
k=0xf8; //11111000
if(dat_comm)
k|=0x2; //data,rs=1 111110(1/0)0
//command,rs=0
SPI0DAT=k;
while(!SPIF){;}
SPIF=0;
k=content;
k&=0xf0;
SPI0DAT=k;
while(!SPIF){;}
SPIF=0;
k=content;
k<<=4;
k&=0xf0;
SPI0DAT=k;
while(!SPIF){;}
SPIF=0;
cs=0;
}
/*-----------------将数据转换为相应的asc码子函数--------------*/
/***************************************************************
注:
1.初始化显示当前页的前4条菜单,并且第1条菜单反白显示
如果相关的菜单项有参数,则程序自动搜寻' ',为参数显示做准备
2.此函数中使用到的全局变量:
num_asc[];
3.本函数中使用到的子函数
***************************************************************/
void num2ascii(float num)
{ uchar i;
char j;
unsigned long m;
if(num<0) {bit3=1;num*=-1;}
else bit3=0;
if(num<1) {i=0;m=num*100000+5;} //.00000
else if(num<10) {i=1;m=num*10000+5;} //0.0000
else if(num<100) {i=2;m=num*1000+5;} //00.000
else if(num<1000) {i=3;m=num*100+5;} //000.00
else if(num<10000) {i=4;m=num*10+5;} //0000.0
else {i=5;m=num+5;} //00000.
for(j=4;j>=0;j--)
{
num_asc[j]=(uchar)(m%10);
m/=10;
}
for(j=5;j>=i+1;j--)
{
num_asc[j]=num_asc[j-1];
}
for(j=0;j<=5;j++)
{
if(j==i) continue;
num_asc[j]+=0x30;
}
num_asc[i]='.';
num_asc[6]='\0';
}
/*------------------显示开机欢迎界面子函数-------------------*/
//欢迎界面:init_text
void first_page_disp(void)
{
uchar i,j;
clrram();
clr_gdram();
wr_lcd (comm,0x30);
wr_lcd (comm,0x80);
for (j=0;j<4;j++)
{
for (i=0;i<16;i++)
wr_lcd (dat,init_text[j*16+i]);
}
}
/*------------------------延时子函数-------------------------*/
void tdelay1ms(void)
{
uchar i;
bit j;
j=EA; //保存EA状态
EA=0;
EA=0;
TMR3CN = 6;
do
{i = TMR3CN;
}
while((i&0x80)==0);
TMR3CN = 6;
EA=j; //恢复EA状态
EA=j;
}
/*--------------------------------主程序--------------------------------*/
void main()
{
uchar j,k1=0;
SP=0x50;//0x5f; //初始化堆栈指针
config(); //单片机各寄存器设置
self_flash_test(); //系统flash自检
init_lcd(); //初始化液晶控制器
for(;;)//主循环
{ }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -