📄 main.c
字号:
#include<AT89X51.H>
#include "INTRINS.H"
#define LCD_BUS P0
sbit RS= P2^5;
sbit RW=P2^6;
sbit E =P2^7;
// sbit pcb=P1^3;
// sbit RS= P1^0;
//sbit RW=P1^1;
//sbit E =P1^2;
//extern unsigned char code str[14][3];//={":0",":1",":2",":3",":4",":5",":6",":7",":8",":9"};
////////////////////////////////////
////////////////////////////////////
void delay(unsigned int t) ; //延时t倍///
unsigned char check_bf(unsigned char Address_AC); //LCD标志位查询//
void write_data(unsigned char dispdata); //写数据//
void write_comand(unsigned char cmdcode); //写命令//
void lcd_init(); ///LCD初始化//
void stringdisp (unsigned char code *str,unsigned char adress); //显示字符串//
void data_disp(unsigned int disp_data,unsigned char adress); //数字显示
void disp_graph(); //总界面:教室灯控系统
void disp_graph_password(); //密码输入登录界面
void disp_graph_set(); //系统设置总界面
/////////////////////////////////////////////////////
unsigned char code str[]=" 教室灯控系统 "; //登陆总界面
unsigned char code str1[]=" ●登陆界面 →";
// unsigned char code str2[]=" ●设置界面 →";
unsigned char code str_password1[]="请输入登录密码:"; //输入密码界面
unsigned char code str_password2[]=" ****** ";
unsigned char code str_password3[]=" 1 2 3 4 5 6 ";
unsigned char code str_password4[]=" 6 7 8 9 ";
unsigned char code str_set1[]="设置选项: "; //设置总界面
unsigned char code str_set2[]="●密码设置 →";
unsigned char code str_set3[]="●系统时间设置→";
unsigned char code str_set4[]="●定时时间设置→";
unsigned char code str3[]="1234567891234567";
// unsigned char code str12[14][3]={"1 ","2 ","3 ","4 ","5 ","6 ","7 ","8 ","9 ","10","11","12","13","14",};
//////////////////////////////////////////////////////////////////
void main()
{
unsigned char m;
//init591();
// pcb=1;
lcd_init();
LCD_BUS=0X00;
//disp_graph(); //登陆总界面
disp_graph_password();
// disp_graph_set();
//stringdisp(&str3,0x80); ///////显示开机画面//////
//write_comand(0x85);
// stringdisp("1",0x88);
// data_disp(198,0x98); //数字显示
/* m=check_bf(); //测试LCD屏状态查询中AC的返回值是否正确
delay(10);
if(m=0x87)
{
// write_comand(0x30);
write_comand(0x88);
write_data('1'); }
else
{
//write_comand(0x30);
write_comand(0x88);
write_data('0');
} */
delay(100);
}
/**********************************************************************
函数原型: void delay(unsigned int t)
入口参数:
t : 延时程序t倍的100us
出口参数: 无
返 回 值: 无
说 明: LCD液晶延时子程序t倍100us
**********************************************************************/
///////////////////延时程序/////////////////////////////////////
void delay(unsigned int t) //延时程序t倍100us
{
unsigned char j;
unsigned int i;
for(i=0;i<t;i++)
for(j=0;j<29;j++);
}
/***********************************************************************
函数原型:check_bf(unsigned char Address_AC)
入口参数:无
出口参数:无
返回值:
Address_AC:当前状态的地址(一个无符号字符)
功能说明:LCD液晶的状态BF查询和DDRAM的地址查询
************************************************************************/
////////////////////////////查询BF///////////////////////////////////////
unsigned char check_bf(unsigned char Address_AC)
{
unsigned char BF; ////忙标志位,BF是某字节的一位,是D7位,如果为1,则忙//////
LCD_BUS=0x00 ;
do
{
RS=0;
RW=1;
E=1;
BF=LCD_BUS; /////此处BF定义不是一个位,而是一个字节,不过在处理中代表标志位bf///
_nop_();
E=0;
Address_AC=BF;
BF=BF&0x80; ////取出BF////
}while( BF!=0x00 ) ; //////判断是否忙?///////
Address_AC=Address_AC&0x7f; ///读出DDRAM的地址指针AC的值
delay(5) ;
return(Address_AC);
}
/**********************************************************************
函数原型:write_comand(unsigned char cmdcode)
入口参数:
cmdcode : 命令字 (0x01:清屏)
出口参数: 无
返 回 值: 无
说 明: 对lcd写命令字
**********************************************************************/
/////////////////////////写命令子程序//////////////////////////////////
void write_comand(unsigned char cmdcode)
{
check_bf();
RS=0;
RW=0;
E=1;
LCD_BUS=cmdcode;
_nop_();
E=0;
delay(5) ;
}
/***********************************************************************
函数原型:write_data(unsigned char dispdata)
入口参数:
dispdata:写入lcd要显示内容
出口参数:无
返回值: 无
功能说明:LCD液晶的数据写入指令
************************************************************************/
//////////////////////////写数据子程序///////////////////////////////////
void write_data(unsigned char dispdata)
{
check_bf();
RS=1;
RW=0;
E=1;
LCD_BUS=dispdata;
_nop_();
E=0;
}
/******************************************************************
函数:lcd_init()
入口参数:无
出口参数:无
返回值:无
功能说明:LCD液晶的初始化
********************************************************************/
/////////////////////////液晶初始化////////////////////////////////
void lcd_init()
{
delay(100);
write_comand(0x30); //8并,基本指令
delay(10);
write_comand(0x30); //8并,
delay(5);
// write_comand(0x0c); //整体显示开,游标关不反白
// write_comand(0x0d); //整体显示开,游标关反白
write_comand(0x0f); //整体显示开,游标开反白
delay(10);
write_comand(0x01); //清屏
delay(5);
write_comand(0x06); //游标移动方向及地址AC的增减方式
}
/***********************************************************************
函数原型:stringdisp(unsigned char code *str,unsigned char adress)
入口参数:
str:要写入lcd显示的字符串数组
adress :要设定字符串在液晶显示中地址
出口参数:无
返回值: 无
功能说明:LCD液晶的字符串显示子程序
************************************************************************/
///////////////////////////字符串显示////////////////////////////////////
void stringdisp(unsigned char code *str,unsigned char adress) //字符串显示
{
write_comand(0x30);
write_comand(adress);
while(*str>0)
{
write_data(*str) ;
str++;
delay(1);
}
}
////////////////////////
/*
void data_disp(unsigned int disp_data,unsigned char adress) //数字显示
//此处disp_data类型改变***************************
{
unsigned char data_code[10]={'0','1','2','3','4','5','6','7','8','9'};
unsigned char data_every[3]={0,0,0};
unsigned char disp_data_code[5]={'H',0,'.',0,0,};
unsigned char i;
unsigned int every_data;
for(i=0;i<3;i++)
{
every_data=disp_data%10;
disp_data=disp_data/10;
if(i==0)
{
data_every[i]=every_data;
disp_data_code[i+1]=data_code[every_data];
}
else
{
data_every[i]=every_data;
disp_data_code[i+2]=data_code[every_data];
}
}
i=2;
while(data_every[i]==0)
{
i--;
}
i+=3;
write_comand(0x30);
write_comand(adress);
while(i>=1)
{
i--;
write_data(disp_data_code[i]) ;
delay(1);
}
} */
/////////////clear_string////////////////////////// 此处未用到,可适当增减
/* void string_clear(unsigned char space_data,adress)
{
unsigned char space=' ' ;
write_comand(0x30);
write_comand(adress);
while(space_data>0)
{
write_data(space) ;
space_data--;
delay(1);
}
} */
/***********************************************************************
函数原型:void disp_graph()
入口参数:
无
出口参数:无
返回值: 无
功能说明:教室节能灯控登陆界面显示子程序
************************************************************************/
///////////////////////////系统登陆界面///////////////////////////////////
void disp_graph()
{
lcd_init();
stringdisp(&str,0x80); //////总界面:教室灯控系统////////
delay(100);
stringdisp(&str1,0x88); //////总界面:登陆界面////////////
delay(100);
// stringdisp(&str2,0x88); //////总界面:设置界面////////////
// delay(100);
write_comand(0x8f);
// write_comand(0x34); ////设置为全反白显示
// write_comand(0x05);
}
/***********************************************************************
函数原型:void disp_graph_password()
入口参数:
无
出口参数:无
返回值: 无
功能说明:教室节能灯控密码输入显示子程序
************************************************************************/
///////////////////////////密码输入界面///////////////////////////////////
void disp_graph_password()
{
lcd_init();
stringdisp(&str_password1,0x80); //////密码输入:请输设置密码////////
delay(100);
stringdisp(&str_password2,0x90); //////总界面:登陆系统////////////
delay(100);
stringdisp(&str_password3,0x88);
delay(100);
stringdisp(&str_password4,0x98);
write_comand(0x98);
// write_data('A');
// write_comand(0x9f);
//write_comand(0x34); ////设置为全反白显示
//write_comand(0x05);
}
/// ****************************************////
/***********************************************************************
函数原型:void disp_graph_set()
入口参数:
无
出口参数:无
返回值: 无
功能说明:教室节能灯控设置总界面显示子程序
************************************************************************/
///////////////////////////设置总界面///////////////////////////////////
void disp_graph_set()
{
lcd_init();
stringdisp(&str_set1,0x80); ///////设置总界面////////
delay(100);
stringdisp(&str_set2,0x90); //////设置总界面:密码设置////////////
delay(100);
stringdisp(&str_set3,0x88); //////设置总界面:时钟时间设置///////////
delay(100);
stringdisp(&str_set4,0x98); //////设置总界面:定时时间设置///////////
write_comand(0x9f);
// write_data('A');
// write_comand(0x9f);
//write_comand(0x34); ////设置为全反白显示
//write_comand(0x05);
}
/// ****************************************////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -