機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開(kāi)發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開(kāi)發(fā)
培訓(xùn)信息
贊助商
AVR單片機(jī)驅(qū)動(dòng)的LCD2004的源程序
AVR單片機(jī)驅(qū)動(dòng)的LCD2004的源程序
 更新時(shí)間:2009-11-30 16:06:22  點(diǎn)擊數(shù):0
【字體: 字體顏色
/*=======================================================
20x4字符液晶主程序,編譯軟件(ICCAVR_6.31)
CPU內(nèi)部晶振8M
數(shù)據(jù)線(xiàn)B0~B7接PORTB, E=D7 RW=D6 RS=D5
=========================================================
接線(xiàn)圖如下:
_______________           ______________
               |      --1|GND           |
               |      --2|+5V           |
               |      --3|V0            |
               |         |              |
            PD5|--------4|RS            |
            PD6|--------5|RW            |
            PD7|--------6|E             |
 CPU           |         |              |
 ATmmega16L PB0|--------7|D0  LCD20x4   |
            PB1|--------8|D1            |
            PB2|--------9|D2            |
PB3|-------10|D3            |
            PB4|-------11|D4            |
            PB5|-------12|D5            |
            PB6|-------13|D6            |
            PB7|-------14|D7            |
               |         |              |
               |     --15|+LED          |
               |     --16|-LED          |
_______________|         |______________|
========================================================*/
#i nclude<ioM16V.h> //CPU_ATmmega16L
#define RS_H    asm("sbi 0x12,5")  //RS設(shè)為高電平
#define RS_L    asm("cbi 0x12,5")  //RS設(shè)為低電平
#define RW_H    asm("sbi 0x12,6")  //RW設(shè)為高電平
#define RW_L    asm("cbi 0x12,6")  //RW設(shè)為低電平
#define E_H     asm("sbi 0x12,7")  //E設(shè)為高電平
#define E_L     asm("cbi 0x12,7")  //E設(shè)為低電平

//=======================================================
//微秒級(jí)延時(shí)程序
void delay_us(int time)
{
    do
    {
        time--;
    } 
    while (time > 1);
}
//=======================================================
//毫秒級(jí)延時(shí)程序
void delay_ms(unsigned int time)
{
    while(time != 0)
    {  
        delay_us(1000);
        time--;
    }
}

//=======================================================
//讀取lcd是否內(nèi)部操作(忙碌)狀態(tài)
char Lcd_Busy()
{
    char r;
    DDRB = 0x00;       //端口B設(shè)為輸入方式
    E_L;RS_L;RW_H;     //E=0(致能),RS=0(命令),RW=1(讀)
    delay_us(2);       //液晶延時(shí)子程序
    E_H;
    delay_us(2);       //液晶延時(shí)子程序
    r = PINB & 0x80;   //讀取lcd_data第八位
    E_L;
    DDRB=0xff;         //端口B設(shè)為輸出方式
    return r;          //讀取結(jié)果返回
}

//=======================================================
//向Lcd發(fā)送命令程序
void Lcd_Command(unsigned char Command)
{
    while(Lcd_Busy()); //判斷l(xiāng)cd是否內(nèi)部操作狀態(tài)
    E_L;RS_L;RW_L;     //E=0(致能),RS=0(命令),RW=0(寫(xiě))
    delay_us(2);       //液晶延時(shí)子程序
    E_H;
    PORTB = Command;   //向Lcd發(fā)送命令
    delay_us(2);       //液晶延時(shí)子程序
    E_L;
}

//=======================================================
//向lcd寫(xiě)入一個(gè)字符程序
void Lcd_Write(unsigned char Data)
{
    while(Lcd_Busy()); //判斷l(xiāng)cd是否內(nèi)部操作狀態(tài)
    E_L;RS_H;RW_L;     //E=0(致能),RS=1(數(shù)據(jù)),RW=0(寫(xiě))
    delay_us(2);       //液晶延時(shí)子程序
    E_H;
    PORTB = Data;      //向lcd寫(xiě)入一個(gè)字符
    delay_us(2);       //液晶延時(shí)子程序
    E_L;
}


/*=======================================================
LCD第1行顯示地址1~20(0x80~0x93)
LCD第2行顯示地址1~20(0xc0~0xd3)
LCD第3行顯示地址1~20(0x94~0xa7)
LCD第4行顯示地址1~20(0xd4~0xe7)
=======================================================*/
//初始化LCD_8位接口,4行x20字符的工作方式
void Lcd_Init()
{
    DDRB = 0xff;       //端口B設(shè)為輸出方式
    DDRD = 0xff;       //端口D設(shè)為輸出方式
    Lcd_Command(0x38); //
    Lcd_Command(0x38); //
    Lcd_Command(0x38); //
    Lcd_Command(0x38); //
    Lcd_Command(0x08); //令顯示器off
    Lcd_Command(0x01); //清除顯示器
    Lcd_Command(0x06); //令LCD每接收到1Byte數(shù)據(jù)后,AC自動(dòng)加1
    Lcd_Command(0x0C); //令光標(biāo),0x0c=不顯示,0x0d=顯示閃動(dòng).
}

//=======================================================
//寫(xiě)ASCII字符串程序
void asc_tran(unsigned char *asc)
{
    while((*asc) != 0)   //判斷字是否結(jié)束
    {
        Lcd_Write(*asc); //向lcd寫(xiě)入字符串
        asc++;           //移下一個(gè)字符
    }
}

//=======================================================
//測(cè)試主LCD主程序
void main()
{
    Lcd_Init(); //初始化LCD
    while(1)
    {
        Lcd_Command(0x83);               //設(shè)置顯示位址
        asc_tran("-----@_@------");      //顯示字符串
        Lcd_Command(0x97);               //設(shè)置顯示位址
        asc_tran("www.ouravr.com");      //顯示字符串
        delay_ms(1000);                  //延遲1秒
        Lcd_Command(0x01);               //清除顯示器

        Lcd_Command(0x83);               //設(shè)置顯示位址
        asc_tran("-----^_^------");      //顯示字符串
        Lcd_Command(0x94);               //設(shè)置顯示位址
        asc_tran("http://59.36.96.196"); //顯示字符串
        delay_ms(1000);                  //延遲
        Lcd_Command(0x01);               //清除顯示器
    }
}

  • 上一篇: AVR單片機(jī)捕獲中斷實(shí)現(xiàn)紅外線(xiàn)解碼
  • 下一篇: 沒(méi)有了
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話(huà):0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1