📄 1602.c
字号:
#include<reg51.h>
#include<stdio.h>
#define uchar unsigned char
uchar q;/*判忙*/
uchar data i;
uchar data wbyte;
sbit R_D=P3^7;
sbit E=P1^7;/*读写使能信号,1有效*/
sbit R_W=P1^6;/*读写选择信号;1为读选通,0为写选通*/
sbit D_I=P1^5;/*数据指令选择信号;1为数据操作,0为写指令或读状态*/
/**************************************************/
void WCOM(uchar);/*写指令*/
void Clearlcd();/*清屏*/
void IMIM();/*初始化*/
void DAT(uchar);/*送数据*/
void DELAY(unsigned char t);/*延时*/
void CHK_BUSY();/*测忙*/
void DISP();/*LCD显示初始化*/
void HZXS(unsigned char code *s);/*显示字符串*/
void SZXS(unsigned long e100);
void Disp_Img(unsigned char code *img);
unsigned long fd;
/********************主程序********************/
void MAIN()
{
// PSB=1;//闭幕式串行接口选择:H-并行,L-串行
//RST=0;复位,低电平
//e245=0;
DELAY(3);/*延时*/
IMIM();/*初始化*/
DISP();
WCOM(0x85);
fd=21327;
SZXS(fd);
WCOM(0x95);
SZXS(5451);
//Disp_Img(BMP);
for(;;);
}
/********************LCD显示初始化********************/
void DISP()
{ WCOM(0x80);/*第一行首地址设定*/
HZXS("即时功率:");
WCOM(0X90);
HZXS("用电度数:");
WCOM(0X88);
HZXS("峰电单价:0.23元");
WCOM(0X98);
HZXS("谷电单价:54.2元");
}
/********************写指令子程序********************/
void WCOM(uchar d) /*写指令程序*/
{
DELAY(5);
R_W=0;
D_I=0;/*写数据指令*/
// DIR_RD=1;
P0=d;/*将数据送入p1口*/
//DIR_WR=1;
E=1;/*使能信号开*/
E=0;/*使能信号关*/
}
/********************送数据子程序********************/
void DAT(uchar d)
{
DELAY(5);
D_I=1;/*送数据指令*/
R_W=0;
// DIR_RD=1;
P0=d;
//DIR_WR=1;
E=1;/*使能信号开*/
E=0;/*使能信号关*/
}
/********************初始化子程序********************/
void IMIM()
{//RST=0;
//DELAY(3);
//RST=1;
// PSB=1; //闭幕式串行接口选择:H-并行,L-串行
DELAY(0);
WCOM(0x30);/*功能设定*/
DELAY(0);
WCOM(0x01);/*清屏指令*/
DELAY(3);
WCOM(0x06);/*游标右移*/
DELAY(0);
WCOM(0X0F);/*开显示,关光标,关闪烁*/
DELAY(0);
}
/********************延时子程序********************/
void DELAY(unsigned char t)
{
unsigned char i,j;
for(i=t;i>0;i--)
for(j=255;j>0;j--);
}
/********************基本指令集清屏子程序********************/
void Clearlcd()
{
D_I=0;
R_W=0;
WCOM(0x01);/*清除显示*/
}
/*================================================
===测忙碌子程序
===RS=0,RW=1,E=H,D0-D7=状态字
/*------------------显示字符串--------------------------*/
void HZXS(unsigned char code *s)
{ while(*s>0)
{ DAT(*s);
s++;
DELAY(0);
}
}
/*------------------显示5位数字543.21--------------------------*/
void SZXS(unsigned long e100)
{ unsigned char d,d1;
d=e100/10000;
e100=e100%10000;
d1=d+48;
DAT(d1);
d=e100/1000;
e100=e100%1000;
d1=d+48;
DAT(d1);
d=e100/100;
e100=e100%100;
d1=d+48;
DAT(d1);
DAT(0X2E);
d=e100/10;
e100=e100%10;
d1=d+48;
DAT(d1);
d1=e100+48;
DAT(d1);
}
/*------------------显示图片------------------------2005.11.14.21:20修改---benladn911--- */
void Disp_Img(unsigned char code *img)
{ unsigned int j=0;
unsigned char x,y,i;
for(i=0;i<9;i+=8)
for(y=0;y<32;y++)/*原来 为 y<26 ,上下两个半屏不能正常对接显示,导致显示的图片中间有空隙*/
for(x=0;x<8;x++)
{ WCOM(0x36);//功能设置---8BIT控制界面,扩充指令集
WCOM(y+0x80); //行地址
WCOM(x+0x80+i); //列地址
WCOM(0x30);
DAT(img[j++]);
DAT(img[j++]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -