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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1489|回復: 1
收起左側

51單片機關于12864液晶按鍵串行顯示字符和清屏的程序幫忙看看有什么錯誤

[復制鏈接]
ID:986164 發表于 2021-11-30 09:18 | 顯示全部樓層 |閱讀模式
#include <reg52.h>                                                 //52系列單片機頭文件
#include <intrins.h>
#include <stdlib.h>
#define uchar unsigned char                                //宏定義
#define uint  unsigned int
#define LCD_data P1                                                //數據口
uchar i;
sbit key1=P3^0;
sbit key2=P3^1;
sbit LCD_PSB=P3^4;                                                //串行,并行選擇接口
sbit LCD_CS=P3^5;                                            //串行片選信號
sbit LCD_SID=P3^6;                                                //串行數據輸入
sbit LCD_SCLK=P3^7;
void lcd_sbyte();                                                //串行時鐘
uchar code dis1[]={"物電創新基地"};
uchar code dis2[]={"姓名;劉冰冰"};
uchar code dis3[]={"202107044138"};
uchar code dis4[]={"xzxdbb"};
void keyscan();                                                        //函數聲明
//void delay_1ms(uint x);
void delayms(uint xms);
void lcd_sbyte();                                                                         
void write_cmd(uchar cmd);
void write_dat(uchar dat);
void lcd_init();                                                //LCD初始化設定
void lcd_pos(uchar x,uchar y);
void main()                                                                //主函數
{
        lcd_init();                                                        //調用清屏函數
        while(1)
        keyscan();
                                                                              //循環執行按鍵掃描函數
}
void keyscan()                                                         //按鍵循環函數
{
        uchar i;                                                               
        if(key1==0)                                                          //按鍵1開始,程序檢測key1==0,執行下面的指令
        {  
                delayms(10);                                          //按鍵去抖延時
                if(key1==0)
                {
                        lcd_pos(0,0);                                  //設置顯示位置為第一行的第一個字符                       
                        i=0;
                        while(dis1[i]!='\0')                  //當查到空字符時退出循環
                        {                                                                                 
                                write_dat(dis1[i]);                  //顯示字符
                                i++;
                        }
                        lcd_pos(1,0);                                       //設置顯示位置為第二行的第一個字符
                        i=0;
                        while(dis2[i]!='\0')                        //當查到空字符時退出循環
                        {
                                write_dat(dis2[i]);                        //顯示字符
                                i++;
                        }
                        lcd_pos(2,0);                                        //設置顯示位置為第三行的第一個字符
                        i=0;
                        while(dis3[i]!='\0')                        //當查到空字符時退出循環
                        {
                                write_dat(dis3[i]);                        //顯示字符
                                i++;
                        }
                        lcd_pos(3,0);                                        //設置顯示位置為第四行的第一個字符
                        i=0;
                        while(dis4[i]!='\0')                        //當查到空字符時退出循環
                        {
                                write_dat(dis4[i]);                        //顯示字符
                                i++;
                        }
                }

        }
        if(key2==0)                                                                //程序檢測key2==0,執行下面的指令
        {  
                delayms(10);                                                //按鍵去抖延時
                if(key2==0)
                {
                        LCD_PSB=0;                                                //串口方式
                        write_cmd(0x01);                                //清除LCD顯示內容

                }
         
         }
}
void delayms(uint xms)                        //延時函數
{
        int i,j;
        for(i=xms;i>0;i--)
                for(j=110;j>0;j--);                                 
}
void lcd_sbyte(uchar by)            //輸出串行數據
{
        uchar s;
        for(s=0;s<8;s++)
        {
                LCD_SID=by&0x80;                //將by的最高位取出來賦給SID
                by=by<<1;                                //依次將by的每一位從高到低在SCLK的作用送給SID
                LCD_SCLK=0;                                //輸入數據
                LCD_SCLK=1;
        }
}       
void write_cmd(uchar cmd)                //寫指令數據到LCD
{       
        LCD_CS=1;
        lcd_sbyte(0Xf8);                        //發送指令
        lcd_sbyte(cmd&0xf0);                //將所發送字節的高四位取出,低四位補0
        lcd_sbyte(cmd<<4);                    //將所發送的字節低四位移到高四位的位置上,原來的低四位自動補0
        LCD_SCLK=0;                                        //輸入數據
        LCD_SCLK=1;
        LCD_CS=1;
        delayms(100);
}
void write_dat(uchar dat)                //寫顯示數據到LCD
{       
        LCD_CS=1;
        lcd_sbyte(0Xfa);                        //發送數據
        lcd_sbyte(dat&0xf0);                //將所發送字節的高四位取出,低四位補0
        lcd_sbyte(dat<<4);                        //將所發送的字節低四位移到高四位的位置上,原來的低四位自動補0
        LCD_SCLK=0;                                        //輸入數據
        LCD_SCLK=1;
        LCD_CS=0;
        delayms(100);

}
void lcd_pos(uchar x,uchar y)        //設定顯示位置
{
        uchar pos;
        switch(x)
        {                                                        //x的范圍為0-3,y的范圍為0-7
                case 0: x=0x80;break;
                case 1: x=0x90;break;
                case 2: x=0x88;break;
                case 3: x=0x98;break;
                default: break;
        }
        pos=x+y;
        write_cmd(pos);                             //顯示地址
}
//void lcd_init()                                //LCD初始化設定
//{
//        LCD_PSB=0;                                        //串口方式
//        write_cmd(0x30);                        //基本指令操作
//        delayms(5);                                                       
//        write_cmd(0x0c);                        //顯示開,關光標
//        delayms(5);
//        write_cmd(0x01);                        //清除LCD顯示內容
//        delayms(5);
//}
void lcd_init()
{
        delayms(5);
        write_cmd(0x30);                        //基本指令操作
        write_cmd(0x02);
        write_cmd(0x06);
        write_cmd(0x0c);
        write_cmd(0x01);
        write_cmd(0x80);
}


回復

使用道具 舉報

ID:262 發表于 2021-11-30 18:23 | 顯示全部樓層
編譯器提示的什么錯誤,貼圖看看
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品欧美一区二区三区不卡 | 亚洲视频在线观看一区二区三区 | 国产精品日韩 | 亚洲国产精品久久久久秋霞不卡 | 99在线国产 | 色综合天天天天做夜夜夜夜做 | 成人精品一区二区三区中文字幕 | 一级黄色片网址 | 日韩一区二区精品 | 国产精品视频在线观看 | 午夜性色a√在线视频观看9 | 欧美xxxx网站 | 在线观看成人小视频 | 国产高清一区二区 | 日本黄色高清视频 | 日韩免费1区二区电影 | 精品av | 国产一区二区三区在线 | 久久51 | 亚洲国产精品va在线看黑人 | 日产精品久久久一区二区福利 | 爱爱视频在线观看 | 精品成人佐山爱一区二区 | 午夜小视频在线播放 | 精品视频久久久 | 一级高清免费毛片 | 成人小视频在线观看 | av网站推荐| 蜜桃视频一区二区三区 | 中文字幕在线视频免费观看 | 成年人黄色免费视频 | 九九热精品在线 | 亚洲精品成人av | 美女在线视频一区二区三区 | 欧美一区二区三区电影 | 一级毛片高清 | 日韩午夜激情 | 国产精品久久福利 | 久久精品久久久久久 | 免费a在线| 亚洲一区免费 |