?? daxianshi.c
字號:
#include<stdio.h>
#include<reg51.h>
#include<intrins.h>
#include <absacc.h>
#define uchar unsigned char
#define LCD_DATA P0 //數(shù)據(jù)口
#define LCD_GO_HOME 0x02 //AC=0,光標(biāo)、畫面回HOME位
//輸入方式設(shè)置
#define LCD_AC_AUTO_INCREMENT 0x06 //數(shù)據(jù)讀、寫操作后,AC自動增一
#define LCD_AC_AUTO_DECREASE 0x04 //數(shù)據(jù)讀、寫操作后,AC自動減一
#define LCD_MOVE_ENABLE 0x05 //數(shù)據(jù)讀、寫操作,畫面平移
#define LCD_MOVE_DISENABLE 0x04 //數(shù)據(jù)讀、寫操作,畫面不動
//設(shè)置顯示、光標(biāo)及閃爍開、關(guān)
#define LCD_DISPLAY_ON 0x0C //顯示開
#define LCD_DISPLAY_OFF 0x08 //顯示關(guān)
#define LCD_CURSOR_ON 0x0A //光標(biāo)顯示
#define LCD_CURSOR_OFF 0x08 //光標(biāo)不顯示
#define LCD_CURSOR_BLINK_ON 0x09 //光標(biāo)閃爍
#define LCD_CURSOR_BLINK_OFF 0x08 //光標(biāo)不閃爍
//光標(biāo)、畫面移動,不影響DDRAM
#define LCD_LEFT_MOVE 0x18 //LCD顯示左移一位
#define LCD_RIGHT_MOVE 0x1C //LCD顯示右移一位
#define LCD_CURSOR_LEFT_MOVE 0x10 //光標(biāo)左移一位
#define LCD_CURSOR_RIGHT_MOVE 0x14 //光標(biāo)右移一位
//工作方式設(shè)置
#define LCD_DISPLAY_DOUBLE_LINE 0x38 //兩行顯示
#define LCD_DISPLAY_SINGLE_LINE 0x30 //單行顯示
sbit LCD_BUSY=P0^7; //忙標(biāo)志位
sbit LCD_RS=P3^7; //LCD寄存器
sbit LCD_RW=P3^6; //LCD讀寫
sbit LCD_EN=P2^6; //LCD使能
sbit RW=P3^6;
sbit DA=P2^5;
//定義變量
uchar XPOS,YPOS;
uchar Tens[2]={0x01,0x02};
uchar counter;
uchar Later=0;
uchar out;
uchar DAzhi[];
/*********************************************
涵數(shù)名稱: Delay()
涵數(shù)功能: 延時
入口參數(shù): Void
出口參數(shù): Void
*********************************************/
void Delay(int number)
{
for(;number!=0;number--)
{}
}
/*********************************************
涵數(shù)名稱: LcdCheckBusy(void)
涵數(shù)功能: 判斷LCD忙信號
入口參數(shù): Void
出口參數(shù): Void
*********************************************/
void LcdCheckBusy(void) //判斷忙標(biāo)志
{
LCD_DATA=0xff;
LCD_RS=0; //選擇IR
LCD_RW=1; //讀操作
LCD_EN=1;
while(LCD_BUSY); //為1繼續(xù)判斷,為0時往下執(zhí)行
LCD_EN=0;
}
/*********************************************
涵數(shù)名稱: LCD_READ_AC()
涵數(shù)功能: 讀LCD光標(biāo)地址
入口參數(shù): void
出口參數(shù): Void
*********************************************/
/*void Lcd_Read_AC()
{
LCD_DATA=0xff;
LCD_RS=0; //選擇IR
LCD_RW=1; //讀操作
LCD_EN=1;
counter=LCD_DATA; //為1繼續(xù)判斷,為0時往下執(zhí)行
LCD_EN=0;
}
/*********************************************
涵數(shù)名稱: LcdCls(void)
涵數(shù)功能: 向LCD寫指令
入口參數(shù): void
出口參數(shù): Void
*********************************************/
void LcdCls(void) //LCD清屏
{
LcdCheckBusy();
LCD_RS=0;
LCD_RW=0;
LCD_EN=1;
LCD_DATA=1;
LCD_EN=0;
}
/*********************************************
涵數(shù)名稱: void LcdWriteInstruction()
涵數(shù)功能: 向LCD寫指令
入口參數(shù): uchar LcdInstruction
出口參數(shù): Void
*********************************************/
void LcdWriteInstruction(uchar LcdInstruction) //寫指令到LCD
{
LcdCheckBusy();
LCD_RS=0;
LCD_RW=0;
LCD_EN=1;
LCD_DATA=LcdInstruction;
LCD_EN=0;
}
/*********************************************
涵數(shù)名稱: LcdWriteData()
涵數(shù)功能: 輸出一個字節(jié)
入口參數(shù): uchar LcdData
出口參數(shù): Void
*********************************************/
void LcdWriteData(uchar LcdData) //輸出一個字節(jié)數(shù)據(jù)到LCD
{
LcdCheckBusy();
LCD_RS=1;
LCD_RW=0;
LCD_EN=1;
LCD_DATA=LcdData;
LCD_EN=0;
}
/*********************************************
涵數(shù)名稱: void LcdPos(void)
涵數(shù)功能: 地址計算
入口參數(shù): viod
出口參數(shù): Void
*********************************************/
void LcdPos(void) //顯示地址計算
{ XPOS&=0x0f; //定義列向顯示個數(shù)為16
YPOS&=0x03; //定義顯示行數(shù)為2行
if(YPOS==0x00) //當(dāng)在第一行顯示時,橫向顯示地址從0開始,因為寫地址時D7為1,所以要或80H
LcdWriteInstruction(XPOS|0x80);
else if(YPOS==0x01)
LcdWriteInstruction((XPOS+0x40)|0x80); //當(dāng)在第二行顯示時,加40H回到第二行的第一個位置
else if(YPOS==0x02)
LcdWriteInstruction((XPOS+0x01)|0x80); //當(dāng)行數(shù)超過2時,回到起始點(diǎn)
}
/*********************************************
涵數(shù)名稱: void LcdInits(void)
涵數(shù)功能: 初始化LCD
入口參數(shù): void
出口參數(shù): Void
*********************************************/
void LcdInit(void) //初始化LCD
{
LcdWriteInstruction(LCD_DISPLAY_DOUBLE_LINE);
LcdWriteInstruction(LCD_DISPLAY_OFF);
LcdCls();
LcdWriteInstruction(LCD_AC_AUTO_INCREMENT);
LcdWriteInstruction(0x0f);
}
/*********************************************
涵數(shù)名稱: void LcdWDAstr()
涵數(shù)功能: 確定顯示地址并顯示字符串
入口參數(shù): uchar x 確定LCD的X向顯示坐標(biāo)
uchar y 確定LCD的Y向顯示坐標(biāo)
uchar s[]寫入字符串
uchar Len 數(shù)組長度
出口參數(shù): Void
*********************************************/
void LcdWDAstr(uchar x,uchar y,uchar s[],uchar Len) //地址確定
{
YPOS=y; //把要顯示的位置賦值
for(XPOS=x;Later<Len;XPOS++) //指針值必須要有數(shù)據(jù)
{
LcdPos();
LcdWriteData(s[Later]); //指針取內(nèi)容
Later++; //逐個顯示
}
}
/**********************************************
函數(shù)名稱:DA_Star()
函數(shù)功能:啟動DA轉(zhuǎn)換
函數(shù)類型:void
入口參數(shù):無
出口參數(shù):無
***********************************************/
void DA_Star(uchar d)
{
RW=0;
DA=0;
_nop_();
_nop_();
_nop_();
P0=d;
_nop_();
_nop_();
_nop_();
RW=1;
DA=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void main()
{
LcdInit();
while(1)
{
DA_Star(0xff);
Delay(2000);
DA_Star(0x00);
Delay(2000);
Tens[Later]+=0x30;
LcdWDAstr(3,0,Tens,1);
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -