在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            LCD1602的C8051驅(qū)動(dòng)

            作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò) 收藏
            //--------------------lcd1602.c------------------------------
            //**********************************************
            // 功能:C8051F(330) LCD1602(4線驅(qū)動(dòng)
            //**********************************************
            #include
            #include "delay.h"
            //
            //12 345678910 11 12 13 1415 16
            // |||||||
            //|---| |||||---------------------| |--|
            //VSS VDD VL RS RW ED0 D1 D2 D3 D4 D5 D6 D7 B+ B-

            //
            //連接:
            //RS->P0.1
            //RW->P0.2
            //E->P0.3
            //D4~D7->P1.4~P1.7
            //VL根據(jù)不同型號(hào),可能要接VSS或VDD
            //B+/B-->+5/GND
            //VSS/VDD->GND/+3.3

            sbit lcd_rs=P0^1;
            sbit lcd_rw=P0^2;
            sbit lcd_e=P0^3;
            #define LCD_DAT P1
            //HD44780指令
            #define LCD_CLEAR 0x01
            //清屏
            #define LCD_HOME 0x02
            //光標(biāo)復(fù)位
            #define LCD_SET_INPUT 0x06
            //輸入模式:AC+1,顯示不移
            #define LCD_DISPLAY_OFF 0x80
            #define LCD_DISPLAY_ON 0x0c
            #define LCD_SHIFT 0x14
            //顯示屏和光標(biāo)移動(dòng):AC+1,光標(biāo)右移1格
            #define LCD_MODE_8 0x38
            #define LCD_MODE_4 0x28
            //unsigned char lcd_add=0x00;
            void lcd_write_cmd(unsigned char dat)
            {
            lcd_rs=0;
            lcd_rw=0;
            lcd_e=1;
            LCD_DAT=dat;
            delay_us(1);
            lcd_e=0;
            //delay_us(50);
            delay_us(1);
            lcd_e=1;
            LCD_DAT=dat<<4;
            delay_us(1);
            lcd_e=0;
            delay_us(50);
            }
            void lcd_sendchar(unsigned char dat)
            {
            lcd_rs=1;
            lcd_rw=0;
            lcd_e=1;
            LCD_DAT=dat;
            delay_us(1);
            lcd_e=0;
            //delay_us(50);
            delay_us(1);
            lcd_e=1;
            LCD_DAT=dat<<4;
            delay_us(1);
            lcd_e=0;
            delay_us(50);
            }
            //
            //void lcd_wait_busy(void)
            //{
            //lcd_rs=0;
            //lcd_rw=1;
            //lcd_e=1;
            //while(LCD_DAT&0x80);
            //lcd_e=0;
            //delay_us(50);
            //}

            void lcd_init(void)
            {
            lcd_e=0;
            delay_ms(15);
            lcd_write_cmd(LCD_MODE_8);
            delay_ms(5);
            lcd_write_cmd(LCD_MODE_8);
            delay_ms(5);
            lcd_write_cmd(LCD_MODE_8);
            lcd_write_cmd(LCD_MODE_4);
            //delay_us(50);
            lcd_write_cmd(LCD_DISPLAY_ON);
            //delay_us(50);
            lcd_write_cmd(LCD_CLEAR);
            delay_ms(2);
            lcd_write_cmd(LCD_SET_INPUT);
            //delay_us(50);
            }
            void lcd_reset(void)
            {
            lcd_write_cmd(LCD_CLEAR);
            delay_ms(2);
            lcd_write_cmd(LCD_HOME);
            delay_ms(2);
            }
            void lcd_setadd(unsigned char add)
            {
            if(add>0x0f)add+=0x30;
            lcd_write_cmd(add|0x80);
            }
            void lcd_sendstr(unsigned char add,unsigned char *dat)
            {
            lcd_setadd(add);
            while(*dat)
            {
            lcd_sendchar(*dat++);
            }
            }
            //-----------------------------------------------------------------
            //----------------------lcd1602.h---------------------------------
            #ifndef _LCD_1602
            #define _LCD_1602
            extern void lcd_write_cmd(unsigned char dat);
            extern void lcd_sendchar(unsigned char dat);
            extern void lcd_wait_busy(void);
            extern void lcd_init(void);
            extern void lcd_sendstr(unsigned char add,unsigned char *dat);
            extern void lcd_setadd(unsigned char add);
            extern void lcd_reset(void);
            #endif
            //-------------------------------------------------------------------
            //----------------delay.c-------------------------------------------
            //**********************************************
            // 功能:C8051F(330)精確延時(shí) 24.5M
            // 作者:July
            // Blog: http://blog.sina.com.cn/mcuworld
            // 最后更新:2008-12-31
            // 尊重勞動(dòng)成果,引用請(qǐng)勿刪除本信息謝謝!
            //**********************************************
            #include
            #include
            //----------------------------------------------
            //----------------------------
            // 微秒級(jí)精確延時(shí)
            // 仿真:(24.5M)
            // delay_us(1); //1.72us
            // delay_us(10);//10.89us
            // delay_us(100); //102.74us
            //----------------------------
            void delay_us(unsigned char k)
            {
            while(k--)
            {
            _nop_();_nop_();_nop_();_nop_();
            _nop_();_nop_();_nop_();_nop_();
            _nop_();_nop_();_nop_();_nop_();
            _nop_();_nop_();_nop_();_nop_();
            }
            }
            //----------------------------------------------
            // 毫秒級(jí)精確延時(shí)
            // 仿真:(24.5M)
            // delay_ms(1); //1001.75us
            // delay_ms(10);//10.008ms
            // delay_ms(100); //老機(jī)太慢出不來(lái)鳥~自己測(cè)吧:)
            //----------------------------------------------
            void delay_1ms()
            {
            unsigned int j ;
            for(j=3060;j>0;j--);
            }
            void delay_ms(unsigned int i)
            {
            for(;i>0;i--)delay_1ms();
            }
            //------------------------------------------
            //----------------delay.h-----------------
            #ifndef _DELAY_H
            #define _DELAY_H
            extern void delay_us(unsigned char k);
            extern void delay_ms(unsigned int i);
            #endif
            //---------------------------------------
            //---------------------main.c--------------
            //**********************************************
            // 功能:C8051F(330)精確延時(shí)+UART0+LCD1602(4線)
            // 作者:July
            // Blog: http://blog.sina.com.cn/mcuworld
            // 最后更新:2009-5-12
            // 尊重勞動(dòng)成果,引用請(qǐng)勿刪除本信息謝謝!
            //**********************************************
            //
            //AVR/AVR32群:78613373
            //C8051F/STC/MPC群:78614293
            //Cortex-M3/M0(STM32)群:78612895
            //PIC/PIC32群:78614030
            //LabWindows/CVI群:20328398
            //WinCE/C#群:74373749
            //
            //使用F330,串口為P0.4(TX0),P0.5(RX0);
            #include
            //#include
            #include "uart0.h"
            #include "delay.h"
            #include "lcd1602.h"
            void SYSCLK_Init(void);
            void PORT_Init(void);

            void main(void)
            {
            unsigned char dat=0x20;
            unsigned char address=0;
            PCA0MD&=~0x40 ;
            // 禁止看門狗
            PORT_Init();
            // 初始化端口I/O
            SYSCLK_Init();
            // 初始化系統(tǒng)時(shí)鐘
            UART0_Init();
            // 串口初始化

            EA=1 ;
            ES0=1 ;
            P0|=0x01;
            lcd_init();
            lcd_reset();
            lcd_sendstr(0,"1234567890abcdef");
            lcd_sendstr(16,"ghijklmnopqrstuv");
            sendstr("Welcome to Julys Hut!");
            while(1)
            {
            delay_ms(200);
            P0^=0x01;
            Uart0_Transmit(dat);
            lcd_setadd(address++);
            if(address>31)address=0;
            lcd_sendchar(dat++);
            if(dat>=0x7f)dat=0x20;
            //Uart0_Transmit(0x00);
            }
            }
            //-----------------------------------------------------------------------------
            // 端口初始化
            //-----------------------------------------------------------------------------
            //
            // 配置交叉開關(guān)和通用IO
            //
            // P0.4 - UART TX0
            // P0.5 - UART RX0
            void PORT_Init(void)
            {
            P0MDOUT|=0x10 ;
            // 使能 UTX 為推挽輸出
            P0MDOUT|=0x01;
            XBR0=0x01 ;
            // 使能 UART0 占用 P0.4(TXD) 和 P0.5(RXD)
            XBR1=0x40 ;
            //使能交叉開關(guān)
            }
            //-----------------------------------------------------------------------------
            // 系統(tǒng)時(shí)鐘初始化
            //-----------------------------------------------------------------------------
            void SYSCLK_Init(void)
            {
            OSCICN|=0x03 ;
            // 配置內(nèi)部振蕩器的的最大頻率
            RSTSRC=0x04 ;
            // 使能始終丟失檢測(cè)寄存器
            }
            //----------------------------------------------------
            //-------------main.h----------------------
            #ifndef _MAIN_H
            #define _MAIN_H
            // 系統(tǒng)工作頻率
            #define SYSCLK 24500000
            // 串口工作波特率
            #define BAUDRATE 9600
            #endif
            //----------------------------------------
            //----------uart0.c-----------------------
            //**********************************************
            // 功能:C8051F(330) UART0
            // 作者:July
            // Blog: http://blog.sina.com.cn/mcuworld
            // 最后更新:2009-5-12
            // 尊重勞動(dòng)成果,引用請(qǐng)勿刪除本信息謝謝!
            //**********************************************
            #include
            #include "main.h"
            unsigned char temp ;
            void UART0_Init(void);
            void Uart0_Transmit(unsigned char tmp);
            void sendstr(unsigned char*tmp);
            //-----------------------------------------------------------------------------
            // 串口UART0初始化
            //-----------------------------------------------------------------------------
            void UART0_Init(void)
            {
            SCON0=0x10 ;
            if(SYSCLK/BAUDRATE/2/256<1)
            {
            TH1=-(SYSCLK/BAUDRATE/2);
            CKCON&=~0x0B ;
            CKCON|=0x08 ;
            }
            else if(SYSCLK/BAUDRATE/2/256<4)
            {
            TH1=-(SYSCLK/BAUDRATE/2/4);
            CKCON&=~0x0B ;
            CKCON|=0x09 ;
            }
            else if(SYSCLK/BAUDRATE/2/256<12)
            {
            TH1=-(SYSCLK/BAUDRATE/2/12);
            CKCON&=~0x0B ;
            }
            else
            {
            TH1=-(SYSCLK/BAUDRATE/2/48);
            CKCON&=~0x0B ;
            CKCON|=0x02 ;
            }

            TL1=TH1 ;
            TMOD&=~0xf0 ;
            TMOD|=0x20 ;
            TR1=1 ;
            // TI0 = 1;
            }
            //-----------------------------------------------------------
            // 串口UART0中斷
            //-----------------------------------------------------------
            //中斷向量0x0023
            void UATR0_ISR(void)interrupt 4
            {
            //Rx、Tx共用中斷
            //接收中斷
            if(!TI0)
            {
            RI0=0 ;
            temp=SBUF0 ;
            Uart0_Transmit(temp);
            }
            //發(fā)送中斷
            else TI0=0 ;
            }
            //-----------------------------------------------------------
            // 串口UART0發(fā)送
            //-----------------------------------------------------------
            void Uart0_Transmit(unsigned char tmp)
            {
            ES0=0 ;
            //關(guān)UART0中斷
            EA=0 ;
            //關(guān)全局中斷
            SBUF0=tmp ;
            while(TI0==0);
            //TI0=0 ;
            ES0=1 ;
            //開UART0中斷
            EA=1 ;
            //開全局中斷

            }
            //-----------------------------------------------------------
            // 發(fā)送字符串
            //-----------------------------------------------------------
            void sendstr(unsigned char*tmp)
            {
            while(*tmp)
            {
            Uart0_Transmit(*tmp++);
            }
            }

            //-----------------------------------
            //-----------------------uart0.h-------------------
            #ifndef _UART0_H
            #define _UART0_H
            extern void UART0_Init(void);
            extern void Uart0_Transmit(unsigned char tmp);
            extern void sendstr(unsigned char*tmp);
            #endif

            //-------------------------------------


            關(guān)鍵詞: LCD1602C8051驅(qū)

            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉