?? ylf12232f.c
字號:
/*
pin: 1--GND 2--+5V 3--NC (對比度 背光) 4--RS 5--R/W 6--E
7~14==D0~D7
15--PSB 16--NC 17--/rst 18--NC
19--A 20--K (19,20可能是背光)
1、 initial()在運行前對液晶顯示屏初始化
2、 instruct(uchar x) 將x作為命令送給液晶顯示屏
x==0x01 清屏幕 約1.6ms
x==0x02 地址和光標歸零 HOME
0x06 光標右移、地址增加方式
0x09 閃爍
0x0a 顯示光標
0x0c 顯示內(nèi)容
0x0f 內(nèi)容、光標、閃爍全顯示
3、 write_abyte(uchar x)
3.1 顯示字母數(shù)字1--9 a--z
地址自動增1
可顯示四行,分別為1 3 2 4行
3.2 顯示漢字
調(diào)用兩次,如下:
p=&"漢";
hanzi=*p; //兩個字節(jié)
ch=hanzi>>8; cl=hanzi; ch為高字節(jié) cl為低字節(jié)
write_abyte(ch);
write_abyte(cl);
/*
*/
#pragma LARGE// 外部存儲器
#include <absacc.h>
#include <reg52.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
#define command P1
#define data1 P1
#define clear 0x01 //清屏幕,約1.6ms
#define home 0x02 //光標回零(左上角)/
#define f_set 0x30 //并行、基本指令 ?????
#define dis_on 0x0f //打開顯示,光標,閃爍功能
#define in_mode 0x06 //輸入方式,地址增1,光標右移
#define C_ad 5
sbit P_RS=P0^7;
sbit P_RW=P0^6;
sbit P_E= P0^5;
//sbit P_PSB=P0^1;
bdata uchar ab,bc;
sbit abit0=ab^0;sbit abit1=ab^1;sbit abit2=ab^2;sbit abit3=ab^3;
sbit abit4=ab^4;sbit abit5=ab^5;sbit abit6=ab^6;sbit abit7=ab^7;
//idata uchar string[50];
data uchar str2[6];
/*---------------------------------------------------------*/
void bit8_serial_input(uchar ix)
{
data uchar i,j,nc;
P_E=0; //clk=0; P_E為sclk P_RW為 sid
ab=ix;
for(i=0;i<8;i++){
P_RW=abit7; //din=abit7;
ab<<=1;
P_E=1;
for(j=0;j<10;j++)nc=0; //延時
P_E=0;
}
}
/*---------------------------------------------------------*/
void instruct(uchar dat)
{
data uchar ch;
P_RS=1; //選通
ch=0xf8; ///1111 1110 按照時序前五位必須為1 六七位任意 八位為0
bit8_serial_input(ch); //sid前八位
ch=dat&0xf0; //連接dat與0xf0 取higher data
bit8_serial_input(ch);
ch=dat<<4; //左移動4位 取lower data
bit8_serial_input(ch); //80送到液晶里表示什么意義 instruct中無此命令
P_RS=0; //結(jié)束作業(yè) 1 byte發(fā)完
}
void write_abyte(uchar dat)
{
data uchar ch;
P_RS=1; //讀數(shù)據(jù)--選通 選通
ch=0xfa; //RS=1 RW=0;
bit8_serial_input(ch);
ch=dat&0xf0; //RS=1 RW=0;
bit8_serial_input(ch);
ch=dat<<4;
bit8_serial_input(ch);
P_RS=0; //結(jié)束作業(yè)
}
/*
寫一個漢字到x,Y坐標處其中X為8列y為4行
*/
void write_word(uint w) //w為雙字節(jié)變量
{
data uchar ch,cl;
ch=w>>8;
cl=w; //w右移8位給ch 那cl直接取 w 低8位
write_abyte(ch);
write_abyte(cl);
}
dis_hz(uchar x, uchar y, uint *p_hz) //單個漢字、字符顯示、兩個字母
{
data uchar loc;
data uint hz;
code uchar xline[5]={0,1,3,2,4};
x=xline[x];
instruct(home); //光標home
loc=((x<<3)+y-9)|0x80; //??"|"
instruct(loc); hz=*p_hz; //loc 不同導致開始顯示層數(shù)不同?????
write_word(hz);
}
dis_hz_str(uchar x, uchar y, uint *p_hz) //功能 漢字字符串顯示
{
data uchar loc;
data uint *p;
code uchar xline[5]={0,1,3,2,4};
x=xline[x];
instruct(home);
loc=((x<<3)+y-9)|0x80;
instruct(loc);
p=p_hz;
while(*p){
write_word(*p++);
}
}
/*
顯示字母數(shù)字在x,y處
*/
void dis_str(uchar x, uchar y, uchar *str) // 多個數(shù)字字母 顯示
{
data uchar loc,*p;
code uchar xline[5]={0,1,3,2,4};
p=str;
x=xline[x];
instruct(home);
loc=(16*(x-1)+y-1); //loc=16*(1-1)+10-1=9 如何
if(loc&0x01){
loc/=2;
instruct(loc|0x80);
//ch=' '; //字符串前加空格(0x20 )
write_abyte(' ');
}else{
loc/=2;
instruct(loc|0x80);
}
while(*p){
write_abyte(*p++); //str為字符串 p為字符串寫的時候一個一個字寫
}
}
void initial(void) //光標置左上角
{
data uchar i,j;
P0=0xff;
P_RS=0; //串行--不選通
//P_PSB=0;
P_E=0; //串行方式
instruct(f_set); //0x30; //8位并行接口 基本指令 用串行方式 這句是不是沒用
for(i=0;i<30;i++){}
for(i=0;i<250;i++){} //等待液晶屏反應
for(i=0;i<250;i++){}
instruct(f_set); //0x30; //8位并行接口 基本指令
for(i=0;i<30;i++){}
for(i=0;i<250;i++){}
for(i=0;i<250;i++){}
instruct(dis_on); //0x0f); //開啟屏幕 光標 閃爍
for(i=0;i<30;i++){} //維持高電平 等待液晶反應
instruct(clear); //0x01); //清屏幕 clear
for(j=0;j<10;j++){
for(i=0;i<250;i++){} //1.6ms
}
instruct(in_mode); //0x06); //光標右移、地址增1 方式 液晶屏接受信息的形式
for(i=0;i<30;i++){}
instruct(home); //光標復位(行首)
}
/*---------------------------------------------------------*/
//void itoa(int x,unsigned char *str2)
void itoa(int x)
{ //功能 二進制轉(zhuǎn)為ascii碼
data unsigned int n;
data unsigned char chn,*p,*p2,str1[5];
data unsigned char i,j;
p2=str2;
if(x<0){
*p2++='-';
x=-x;
}
n=x;
p=&str1;
j=0;
while(n!=0){
chn=n%10;
n=n/10;
*p++=chn+'0';
j++;
}
if(j!=0){
p--;
for(i=0;i<j;i++)*p2++=*p--;
}
else *p2++='0';
*p2=0;
return;
}
/*---------------------------------------------------------*/
/*----------------------------------------------------*/
void main(void)
{
data uchar ch,i,j,count,min;
data uint str1[10];
//code uint alpha[6]={0xc5b7,0xd1f4,0}; //ghijklmnopqrstuvwxyz"}; //uint hz_tbl[12]={"一","二","三","四","五","六","七","八","九","十"} ;
code uint *Va={"交流電壓"};
code uint *Ia={"直流電流"};
code uint *Ta={"電解液溫度"};
code uint *mk={"i love this exci"};
code uint *hmk={"ting game very m"};
code uint *fhmk={"uch"};
code uint *Ha={"時間"};
code uint *me={"東北農(nóng)業(yè)大學"} ;
code uint *lme={"落善良勇敢的人們"} ;
//uint name=&"一";
P_RS=0;
initial();
/*
instruct(0x34); 做反顯示
instruct(0x04);
write_abyte('1');
write_abyte('2');
instruct(0x30);
instruct(0x0c);
ch=0;
*/
for(i=0;i<10;i++)str1[i]=0;
strcpy(str1,Va);
dis_hz_str(1,1,str1); dis_str(1,10,"380.0"); dis_str(1,16,"V");
for(i=0;i<10;i++)str1[i]=0;
strcpy(str1,Ia);
dis_hz_str(2,1,str1); dis_str(2,10,"100.0"); dis_str(2,16,"A");
for(i=0;i<10;i++)str1[i]=0;
strcpy(str1,Ta);
dis_hz_str(3,1,str1); dis_str(3,11,"20.0"); dis_hz(3,8,"℃");
for(i=0;i<10;i++)str1[i]=0;
strcpy(str1,Ha);
dis_hz_str(4,1,str1); dis_str(4,10,"00:00"); dis_str(4,16,"S");
for(i=0;i<10;i++)str1[i]=0;
strcpy(str1,me);
dis_hz_str(1,1,str1);
for(i=0;i<10;i++)str1[i]=0;
strcpy(str1,lme);
dis_hz_str(2,1,str1);
/*for(i=0;i<10;i++)str1[i]=0;
strcpy(str1,mk);
dis_str(1,1,str1);
for(i=0;i<10;i++)str1[i]=0;
strcpy(str1,hmk);
dis_str(2,1,str1);
for(i=0;i<10;i++)str1[i]=0;
strcpy(str1,fhmk);
dis_str(3,1,str1); */
ch=0;count=0; min=0; instruct(0x0c);
while(1){
for(i=0;i<200;i++){
for(j=0;j<250;j++){}
for(j=0;j<250;j++){}
for(j=0;j<250;j++){}
for(j=0;j<250;j++){}
for(j=0;j<250;j++){}
for(j=0;j<250;j++){}
for(j=0;j<250;j++){}
for(j=0;j<250;j++){}
for(j=0;j<250;j++){}
for(j=0;j<250;j++){}
for(j=0;j<250;j++){}
}
count++;
if(count>=60){
count=0; min++;
if(min>=60)min=0;
}
itoa(min); //itoa函數(shù)
dis_str(4,10," ");
if(min<10)dis_str(4,11,str2); else dis_str(4,10,str2);
itoa(count); // //itoa函數(shù)
dis_str(4,13," ");
if(count<10) dis_str(4,14,str2); else dis_str(4,13,str2);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -