// 頭文件
#include <reg51.h> //包含單片機寄存器的頭文件
//#include<intrins.h> //包含_nop_()函數定義的頭文件
#include <stdio.h> //標準輸入輸出函數庫
//宏定義
typedef unsigned int uint;
typedef unsigned char uchar;
//全局變量
unsigned char temp1=123;
// 位定義
sbit RS = P2^0; //0=輸入指令;1=輸出數據
sbit RW = P2^1; //0=向LCD寫入指令或數據; 1=從LCD讀取信息
sbit EN = P2^2; //使能信號,1時讀取信息,1->0(下降沿)執行指令
// 延時函數
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位數據口
}
//寫數據
void LCD_Data (uchar Data)
{
RS=1;//選擇數據寄存器
P0=Data;//把要顯示的數據送入P0
RW=0;//選擇寫數據
EN=1;
delay_1ms(5);
EN=0;//使能線電平變化,數據送入1602的8位數據口
}
//初始化
void LCD_Init ()
{
LCD_Com (0x38);
delay_1ms(5);
LCD_Com (0x38);//顯示模式設置(8位數據,雙列,5*7字形)
LCD_Com (0x0C);//開顯示,不顯示光標
LCD_Com (0x06);//指針自動加一
LCD_Com (0x01);//清屏
LCD_Com (0x80);//設置數據指針起點
}
//設置初始地址
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);//設置初始字符顯示地址
while(*S)//逐次寫入顯示字符,直到最后一個字符"0"
{
LCD_Data(*S);//寫入當前字符并顯示
S++;//地址指針加1,指向下一個待寫字符
}
}
//在第X行Y列開始顯示Wdata所對應的單個字符
void LCD_Single_Character(uchar Row,uchar Location,uchar Wdata)
{
LCD_XY(Row,Location);//寫地址
LCD_Data(Wdata);//寫入當前字符并顯示
}
//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);
}
//主函數
void main(void)
{
LCD_Init();//LCD初始化
LCD_display();//LCD顯示
while(1);
}
|