|
// 頭文件
#include <reg51.h> //包含單片機寄存器的頭文件
//#include<intrins.h> //包含_nop_()函數(shù)定義的頭文件
#include <stdio.h> //標準輸入輸出函數(shù)庫
//宏定義
typedef unsigned int uint;
typedef unsigned char uchar;
//全局變量
unsigned char temp1=123;
// 位定義
sbit RS = P2^0; //0=輸入指令;1=輸出數(shù)據(jù)
sbit RW = P2^1; //0=向LCD寫入指令或數(shù)據(jù); 1=從LCD讀取信息
sbit EN = P2^2; //使能信號,1時讀取信息,1->0(下降沿)執(zhí)行指令
// 延時函數(shù)
void delay_1ms(uint n)
{
uint a,b;
for(a=n;a>0;a--)
for(b=110;b>0;b--);
}
void delay_10us(uchar n)
{
while(n--);
}
//寫入命令
void LCD_Com (uchar Com)
{
RS=0; //選擇指令寄存器
P0=Com; //把命令字送入P0
RW=0; //選擇寫指令
EN=1;
delay_1ms(5);
EN=0; //使能線電平變化,命令送入1602的8位數(shù)據(jù)口
}
//寫數(shù)據(jù)
void LCD_Data (uchar Data)
{
RS=1;//選擇數(shù)據(jù)寄存器
P0=Data;//把要顯示的數(shù)據(jù)送入P0
RW=0;//選擇寫數(shù)據(jù)
EN=1;
delay_1ms(5);
EN=0;//使能線電平變化,數(shù)據(jù)送入1602的8位數(shù)據(jù)口
}
//初始化
void LCD_Init ()
{
LCD_Com (0x38);
delay_1ms(5);
LCD_Com (0x38);//顯示模式設(shè)置(8位數(shù)據(jù),雙列,5*7字形)
LCD_Com (0x0C);//開顯示,不顯示光標
LCD_Com (0x06);//指針自動加一
LCD_Com (0x01);//清屏
LCD_Com (0x80);//設(shè)置數(shù)據(jù)指針起點
}
//設(shè)置初始地址
void LCD_XY (uchar Row,uchar Location)
{
uchar Result;
if(Row==0)//A=0 顯示第一行,A=1 顯示第二行
{
Result=0x80+Location;
}
else
{
Result=0x80+0x40+Location;
}
LCD_Com (Result);
}
//在第X行Y列開始顯示,指針*S所指向字符串
void LCD_XY_Pointing_String(uchar Row,uchar Location,uchar *S)
{
LCD_XY(Row,Location);//設(shè)置初始字符顯示地址
while(*S)//逐次寫入顯示字符,直到最后一個字符"0"
{
LCD_Data(*S);//寫入當(dāng)前字符并顯示
S++;//地址指針加1,指向下一個待寫字符
}
}
//在第X行Y列開始顯示W(wǎng)data所對應(yīng)的單個字符
void LCD_Single_Character(uchar Row,uchar Location,uchar Wdata)
{
LCD_XY(Row,Location);//寫地址
LCD_Data(Wdata);//寫入當(dāng)前字符并顯示
}
//LCD顯示
void LCD_display(void)
{
//uchar tempL=123;
LCD_XY_Pointing_String(0,0," temp(L)Setting ");
LCD_Single_Character(1,5,0x30+temp1%1000/100);
LCD_Single_Character(1,6,0x30+temp1%100/10);
LCD_Single_Character(1,7,0x30+temp1%10);
}
//主函數(shù)
void main(void)
{
LCD_Init();//LCD初始化
LCD_display();//LCD顯示
while(1);
}
|
|