📄 zk.c
字号:
#include<REG51.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;
*/
////////////////////////////////////
////////////////////////////////////
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 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()
{
LCD_BUS=0XFF;
LCD_BUS=LCD_BUS
lcd_init();
stringdisp("1",0x8b);
//disp_graph(); //登陆总界面
//disp_graph_password();
// disp_graph_set();
//stringdisp(&str3,0x80); ///////显示开机画面//////
//write_comand(0x85);
// stringdisp("1",0x88);
// data_disp(198,0x98); //数字显示
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_();
_nop_();
_nop_();
_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_();
_nop_();
_nop_();
_nop_();
_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 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);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -