久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 單片機LCD1602從左到右、從右到左顯示,proteus仿真程序 [打印本頁]

作者: aktuan007    時間: 2021-1-28 14:26
標題: 單片機LCD1602從左到右、從右到左顯示,proteus仿真程序
*  描述:                LCD1602 滾動顯示                                       *
* 顯示方式:                                                                   *
* 1、從左到右逐字顯示,閃動二次,清屏。                                        *
* 2、再從右到左逐字顯示,閃動二次,清屏。                                      *
* 3、周期性地重復上述顯示方式。                                                *                           
同時帶仿真


        #include <reg51.h>        //51寄存器文件
        #include <intrins.h>
        
        typedef unsigned char BYTE;        //用BYTE代替unsigned char
        typedef bit BOOL;  // 用BOOL代替bit
        
        sbit LCD_RS = P2^6;  //寄存器選擇(RS=0,命令寄存器;RS=1,數據寄存器)            
        sbit LCD_RW = P2^5;         //讀寫端(RW=1,讀;RW=0,寫)
        sbit LCD_EP = P2^7;         //使能端
        
        BYTE code dis1[] = {"   WELCOME  TO  "};
        BYTE code dis2[] = {"   MY  ZONE ST  "};
        BYTE code dis3[] = {"   OT  EMOCLEW  "};
        BYTE code dis4[] = {"   TS ENOZ  MY  "};

/****************延時函數************************/        
        void delay(int ms)
        {                    //延時子程序
        int i;
        while(ms--)
        {
          for(i = 0; i< 250; i++)
          {
           _nop_();          //空執行
           _nop_();
           _nop_();
           _nop_();
          }
        }
        }

/****************查忙函數************************/               
        BOOL lcd_bz()
        {                        
        BOOL result;
        LCD_RS = 0;
        LCD_RW = 1;
        LCD_EP = 1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        result = (BOOL)(P0 & 0x80);         //檢測P0最高位是否為1
        LCD_EP = 0;
        return result;//返回查忙結果
        }

/****************寫命令函數************************/        
        void lcd_wcmd(BYTE cmd)
        {                          // 寫入指令數據到LCD
        while(lcd_bz());
        LCD_RS = 0;
        LCD_RW = 0;
        LCD_EP = 0;
        _nop_();
        _nop_();
        P0 = cmd; //將8位指令通過P0口傳給1602
        _nop_();
        _nop_(); //用于產生一個脈沖寬度
        _nop_();
        _nop_();
        LCD_EP = 1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        LCD_EP = 0;  
        }
        
        void lcd_pos(BYTE pos)
        {                          //設定顯示位置
        lcd_wcmd(pos | 0x80);
        }

/****************寫數據函數************************/        
        void lcd_wdat(BYTE dat)
        {                   //寫入字符顯示數據到LCD
        while(lcd_bz());
        LCD_RS = 1;
        LCD_RW = 0;
        LCD_EP = 0;
        P0 = dat;  //將8位數據通過P0口傳給1602
        _nop_();
        _nop_();   //用于產生一個脈沖寬度
        _nop_();
        _nop_();
        LCD_EP = 1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        LCD_EP = 0;
        }
        
        void lcd_init()
        {                   //LCD初始化設定
        lcd_wcmd(0x38);     //16*2顯示,5*7點陣,8位數據
        delay(1);
        lcd_wcmd(0x0c);     //顯示開,關光標
        delay(1);
        lcd_wcmd(0x06);     //移動光標
        delay(1);
        lcd_wcmd(0x01);     //清除LCD的顯示內容
        delay(1);
        }

/****************主函數************************/        
        main()
        {
            BYTE i;
            lcd_init();// 初始化LCD
            delay(10);
        
            while(1)              
           {
              lcd_wcmd(0x06);//向右移動光標
              lcd_pos(0);//設置顯示位置為第一行的第1個字符
              i = 0;
             while(dis1[ i ] != '\0')
             {   //顯示字符"WLCOME  TO"
               lcd_wdat(dis1[ i ]);
               i++;
               delay(30);//控制兩字之間顯示速度
             }
              lcd_pos(0x40);//設置顯示位置為第二行第1個字符
              i = 0;
             while(dis2[ i ] != '\0')
             {
               lcd_wdat(dis2[ i ]);//顯示字符" HUANGHUAI  "
               i++;
               delay(30);//控制兩字之間顯示速度
             }
              delay(800);//控制停留時間
        
              lcd_wcmd(0x01);//清除LCD的顯示內容
              delay(1);
              lcd_wcmd(0x04);//向左移動光標
            
              lcd_pos(15);//設置顯示位置為第一行的第16個字符
              i = 0;
             while(dis3[ i ] != '\0')
             {                 //顯示字符"WLCOME  TO"
               lcd_wdat(dis3[ i ]);
               i++;
               delay(30);          //控制兩字之間顯示速度
             }
              lcd_pos(0x4F);      //設置顯示位置為第二行的第16個字符
              i = 0;
             while(dis4[ i ] != '\0')
             {
               lcd_wdat(dis4[ i ]);  //顯示字符" HUANGHUAI  "
               i++;
               delay(30);       //控制兩字之間顯示速度
             }
              delay(800);       //控制停留時間
        
              lcd_wcmd(0x01);   //清除LCD的顯示內容
              delay(200);       //控制兩屏轉換時間
                  
           }
        }
         
         


51hei截圖20210128142235.png (21.05 KB, 下載次數: 47)

51hei截圖20210128142235.png

lcd1602的應用.zip

85.55 KB, 下載次數: 24, 下載積分: 黑幣 -5


作者: aktuan007    時間: 2021-1-29 11:43
為什么proteus仿真時下面有黃色提示,但是不影響仿真




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产成人精品一区二区三区四区 | 337p日韩 | 日韩中文字幕在线观看视频 | 国产精品视频不卡 | 国产日韩视频 | 国产最新视频在线 | 中文字幕视频在线观看 | 伊人网在线播放 | 午夜一级做a爰片久久毛片 精品综合 | 亚洲图片一区二区三区 | 亚洲精品视频在线观看视频 | 91精品国产一区二区在线观看 | 一区二区三区精品在线视频 | 一区二区三区久久 | 午夜在线电影网 | 欧美精品一区二区三区在线 | 午夜精品| 国产精品无码永久免费888 | 欧美成人在线免费 | 精品国产99 | 91免费看片 | 欧美www在线观看 | 欧美多人在线 | 午夜国产在线 | 久久伊人青青草 | 国产夜恋视频在线观看 | 久久美女网 | 国产精品久久久久久久久久久免费看 | 欧美 日韩 中文 | 国产精品欧美精品日韩精品 | 成人免费网站 | 欧美精品在线视频 | 精品美女视频在免费观看 | 一区二区三区欧美大片 | 成人久久18免费网站 | 日韩av第一页 | 欧美一级二级在线观看 | 精品久久久久香蕉网 | 日韩午夜影院 | 黄色免费观看网站 | 欧美日韩一区不卡 |