欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1578|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)關(guān)于12864液晶按鍵串行顯示字符和清屏的程序幫忙看看有什么錯(cuò)誤

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:986164 發(fā)表于 2021-11-30 09:18 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include <reg52.h>                                                 //52系列單片機(jī)頭文件
#include <intrins.h>
#include <stdlib.h>
#define uchar unsigned char                                //宏定義
#define uint  unsigned int
#define LCD_data P1                                                //數(shù)據(jù)口
uchar i;
sbit key1=P3^0;
sbit key2=P3^1;
sbit LCD_PSB=P3^4;                                                //串行,并行選擇接口
sbit LCD_CS=P3^5;                                            //串行片選信號(hào)
sbit LCD_SID=P3^6;                                                //串行數(shù)據(jù)輸入
sbit LCD_SCLK=P3^7;
void lcd_sbyte();                                                //串行時(shí)鐘
uchar code dis1[]={"物電創(chuàng)新基地"};
uchar code dis2[]={"姓名;劉冰冰"};
uchar code dis3[]={"202107044138"};
uchar code dis4[]={"xzxdbb"};
void keyscan();                                                        //函數(shù)聲明
//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初始化設(shè)定
void lcd_pos(uchar x,uchar y);
void main()                                                                //主函數(shù)
{
        lcd_init();                                                        //調(diào)用清屏函數(shù)
        while(1)
        keyscan();
                                                                              //循環(huán)執(zhí)行按鍵掃描函數(shù)
}
void keyscan()                                                         //按鍵循環(huán)函數(shù)
{
        uchar i;                                                               
        if(key1==0)                                                          //按鍵1開始,程序檢測(cè)key1==0,執(zhí)行下面的指令
        {  
                delayms(10);                                          //按鍵去抖延時(shí)
                if(key1==0)
                {
                        lcd_pos(0,0);                                  //設(shè)置顯示位置為第一行的第一個(gè)字符                       
                        i=0;
                        while(dis1[i]!='\0')                  //當(dāng)查到空字符時(shí)退出循環(huán)
                        {                                                                                 
                                write_dat(dis1[i]);                  //顯示字符
                                i++;
                        }
                        lcd_pos(1,0);                                       //設(shè)置顯示位置為第二行的第一個(gè)字符
                        i=0;
                        while(dis2[i]!='\0')                        //當(dāng)查到空字符時(shí)退出循環(huán)
                        {
                                write_dat(dis2[i]);                        //顯示字符
                                i++;
                        }
                        lcd_pos(2,0);                                        //設(shè)置顯示位置為第三行的第一個(gè)字符
                        i=0;
                        while(dis3[i]!='\0')                        //當(dāng)查到空字符時(shí)退出循環(huán)
                        {
                                write_dat(dis3[i]);                        //顯示字符
                                i++;
                        }
                        lcd_pos(3,0);                                        //設(shè)置顯示位置為第四行的第一個(gè)字符
                        i=0;
                        while(dis4[i]!='\0')                        //當(dāng)查到空字符時(shí)退出循環(huán)
                        {
                                write_dat(dis4[i]);                        //顯示字符
                                i++;
                        }
                }

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

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

}
void lcd_pos(uchar x,uchar y)        //設(shè)定顯示位置
{
        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初始化設(shè)定
//{
//        LCD_PSB=0;                                        //串口方式
//        write_cmd(0x30);                        //基本指令操作
//        delayms(5);                                                       
//        write_cmd(0x0c);                        //顯示開,關(guān)光標(biāo)
//        delayms(5);
//        write_cmd(0x01);                        //清除LCD顯示內(nèi)容
//        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);
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:262 發(fā)表于 2021-11-30 18:23 | 只看該作者
編譯器提示的什么錯(cuò)誤,貼圖看看
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表