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

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

QQ登錄

只需一步,快速開(kāi)始

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

LCD12864仿真顯示正常 但下載到板子上就只顯示左半邊了 確定屏幕好的 片選管腳接對(duì)了

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:603592 發(fā)表于 2021-5-18 20:25 來(lái)自觸屏版 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
程序如下
#include<reg52.h>

#define uchar unsigned char
#define uint unsigned int

sbit rs = P3^5; //RS為0--命令,1--數(shù)據(jù)
sbit rw = P3^6; //RW為1--讀,0--寫(xiě)
sbit en = P3^4; //使能端
sbit cs1 = P2^4; //片選1低電平有效,控制左半屏
sbit cs2 = P2^0; //片選1低電平有效,控制右半屏

void read_busy() //讀“忙”函數(shù)--數(shù)據(jù)線(xiàn)的最高位的DB71則busy
{
        P0 = 0x00;
        rs = 0;
        rw = 1;
        en = 1;
        while(P0 & 0x00);
        en = 0;
}

void write_LCD_command(uchar value) //寫(xiě)命令函數(shù)
{
        read_busy(); //對(duì)LCD的每次讀寫(xiě)都要讀忙
        rs = 0; //選擇命令
        rw = 0; //寫(xiě)操作        
        en = 1; //EN由1--0鎖存有效數(shù)據(jù)
        P0 = value;
        en = 0;
        rw = 1;        
}

void write_LCD_data(uchar value) //寫(xiě)數(shù)據(jù)函數(shù)
{
        read_busy();
        rs = 1; //選擇數(shù)據(jù)
        rw = 0;
        en = 1;
        P0 = value;
        en = 0;
        rw = 1;        
}

void set_page(uchar page) //設(shè)置“頁(yè)”LCD23875共8頁(yè)
{
        page |= 0xb8; //頁(yè)的首地址0xB8
        write_LCD_command(page);
}

void set_column(uchar column) //設(shè)置顯示的列
{
        column &= 0x3f; //列的最大值為64
        column += 0x40; //列的首地址為0x40
        write_LCD_command(column); //規(guī)定顯示的列的位置
}

void selectScreen(uchar screen) //選擇屏幕
{
        switch(screen)
        {
                case 0:
                        cs1 = 0;
                        cs2 = 0;
                        break; //全屏
                case 1:
                        cs1 = 0;
                        cs2 = 1;
                        break; //左半屏
                case 2:
                        cs1 = 1;
                        cs2 = 0;
                        break; //右半屏
                default:
                        break;
        }
}

void clearScreen(uchar screen) //清屏函數(shù)
{
        uchar i,j;
        selectScreen(screen); //0--全屏,1--左半屏,2--右半屏
        for(i = 0;i < 8;i ++) //控制頁(yè)數(shù)0-7,共8頁(yè)
        {
                set_page(i);
                set_column(0);
                for(j = 0;j < 64;j ++) //控制列數(shù)0-63,共64列
                {
                        write_LCD_data(0x00); //寫(xiě)入0,地址指針自加1
                }
        }
}

void initLCD() //LCD的初始化
{
        read_busy();
        write_LCD_command(0x3f); //開(kāi)顯示,0x3e是關(guān)顯示,0x3f是開(kāi)顯示
        selectScreen(0); //選全屏
        clearScreen(0); //清屏
}

void display(uchar ss,uchar page,uchar column,uchar p[]) //顯示漢字
{
        uchar i;
        selectScreen(ss);
        set_page(page); //寫(xiě)上半頁(yè)
        set_column(column); //控制列
        for(i = 0;i < 16;i ++)
        {
                write_LCD_data(p); //漢字的上半部分
        }
        set_page(page + 1); //寫(xiě)下半頁(yè)
        set_column(column); //控制列
        for(i = 0;i < 16;i ++) //控制16列的數(shù)據(jù)輸出
        {
                write_LCD_data(p[i + 16]); //漢字的下半部分
        }
}

void display_char(uchar ss,uchar page,uchar column,uchar asc,uchar p1[][16]) //顯示字符
{
        uchar i;
        selectScreen(ss);
        set_page(page); //寫(xiě)上半頁(yè)
        set_column(column); //控制列
        asc -= 0x20; //ASC2碼與字符表相差20個(gè)模擬值
        for(i = 0;i < 8;i ++)
        {
                write_LCD_data(p1[asc]); //字符的上半部分
        }
        set_page(page + 1); //寫(xiě)下半頁(yè)
        set_column(column); //控制列
        for(i = 0;i < 8;i ++) //控制8列的數(shù)據(jù)輸出
        {
                write_LCD_data(p1[asc][i + 8]); //字符的下半部分
        }
}

void display_BMP(uchar img[][64]) //顯示圖形
{
        uchar i,j;
        for(j = 0;j < 4;j ++)
        {
                selectScreen(1);
                set_page(j + 4);
                set_column(0);
                for(i = 0;i < 64;i ++) //顯示左屏
                {
                        write_LCD_data(img[2 * j]); //每隔一行取一次數(shù)組中的數(shù)據(jù)(0頁(yè)為左半屏,1頁(yè)為右半屏,依此類(lèi)推)
                }
                selectScreen(2);
                set_page(j + 4);
                set_column(0);
                for(i = 0;i < 64;i ++) //顯示右屏
                {
                        write_LCD_data(img[2 * j + 1]); //每隔一行取一次數(shù)組中的數(shù)據(jù)
                }
        }
}

//void main()
//{        
//        initLCD(); //初始化12864
//        clearScreen(0); //清屏
//        display_BMP(img);
//
//        while(1);
//}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:603592 發(fā)表于 2021-5-18 20:30 | 只看該作者
這個(gè)是主程序 上面是顯示部分#include<reg52.h>
#include"ZK.h"

#define uchar unsigned char
#define uint unsigned int

sbit db5 = P1^4;

bit flag;

uchar ii,f1,i,j,k; //在函數(shù)內(nèi)部定義時(shí),該變量會(huì)一直保持函數(shù)執(zhí)行后的值

extern void initLCD();
extern void clearScreen(uchar screen);
extern void display(uchar ss,uchar page,uchar column,uchar p[]);
extern void display_BMP(uchar img[][64]);
extern void display_char(uchar ss,uchar page,uchar column,uchar asc,uchar p1[][16]);

void delay(uint i,uint j) //delay(1,82)為1.01779ms
{
        uint x,y; //delay(x,0):15.19,39.07,62.94,86.9,110.68,134.55,158.42,182.29,206.17,230.04,253.91(x取0 ~ 10)us
        for(x = i;x > 0;x --)
                for(y = j;y > 0;y --); //執(zhí)行此句約需24us,24x + 14 = delay(x,0)的延時(shí)時(shí)間
}

void read_data()
{
        clearScreen(0);
        while(i < 8)
        {
                if(f1 >= ii)
                        break;
                while(k ++ < 8) //先比較,再++,例如k = 0,小于8,成立,然后k就變成1并在下程序中進(jìn)行運(yùn)算
                {
                        display_char(1,i * 2, j * 8,receive[k + i * 16 - 1],table); //當(dāng)k在while中是7時(shí),到這里運(yùn)算已經(jīng)是8了
                        j ++;
                        f1 ++;
                        if(f1 >= ii)
                                break;
                }
                if(f1 >= ii)
                        break;
                while(k ++ < 17) //每比較一次,無(wú)論以下運(yùn)算進(jìn)行與否,k都會(huì)加一
                {
                        display_char(2,i * 2,j * 8,receive[k + i * 16 - 2],table); //當(dāng)k = 8時(shí),返回第一個(gè)while比較時(shí)變成了9,到第二個(gè)就變成了10
                        j ++;
                        f1 ++;
                        if(f1 >= ii)
                                break;
                }
                i ++;
                k = 0;
        }
        ii = 0;
        f1 = 0;
        i = 0;
        j = 0; //在本函數(shù)定義時(shí),函數(shù)執(zhí)行后也要清0,同上同下
        k = 0;
}

void main()
{
        TMOD = 0x20; //設(shè)置定時(shí)器1為工作方式2,低8位計(jì)數(shù)溢出后將高8位的值賦值給低8位,繼續(xù)進(jìn)行定時(shí)計(jì)數(shù)
        TH1 = 0xfd;
        TL1 = 0xfd; //方式1的波特率 =(2SMOD/32)·{fosc /{12×[256 -(TH1)]}}
        TR1 = 1;
        SM0 = 0;
        SM1 = 1;
        REN = 1;
        EA = 1;
        ES = 1;
        initLCD(); //初始化12864
        clearScreen(0); //清屏

        while(1)
        {
                if(db5 == 0 && flag == 0)
                {
                        delay(2,82);
                        if(db5 == 0)
                        {
                                flag = 1;
                                while(!db5);

                                clearScreen(0); //清屏                       
                                display(1,0,2 * 16,huan); //歡
                                display(1,0,3 * 16,ying); //迎
                                display(2,0,0 * 16,liu); //瀏
                                display(2,0,1 * 16,lan); //覽
                                display(1,2 + 0,0 * 16,tu); //圖
                                display(1,2 + 0,1 * 16,wen); //文
                                display(1,2 + 0,2 * 16,shu); //輸
                                display(1,2 + 0,3 * 16,ru); //入
                                display(2,2 + 0,0 * 16,yan); //演
                                display(2,2 + 0,1 * 16,shi); //示
                                display(2,2 + 0,2 * 16,cheng); //程
                                display(2,2 + 0,3 * 16,xu); //序
                       
                                display_BMP(img);

                        }
                }
                else if(db5 == 0 && flag == 1)
                {
                        delay(2,82);
                        if(db5 == 0)
                        {
                                flag = 0;
                                while(!db5);
                                clearScreen(0);
                                delay(5,82);
                        }
                }
                if(flag == 0 && ii != 0)
                {
                        read_data();
                }       
        }
}

void received() interrupt 4
{
        RI = 0;       
        receive[ii ++] = SBUF;
}
回復(fù)

使用道具 舉報(bào)

板凳
ID:748788 發(fā)表于 2021-5-19 08:38 | 只看該作者
先確認(rèn)其它程序能否在板子上正常顯示
回復(fù)

使用道具 舉報(bào)

地板
ID:603592 發(fā)表于 2021-5-19 14:30 | 只看該作者
wwh2382 發(fā)表于 2021-5-19 08:38
先確認(rèn)其它程序能否在板子上正常顯示

確認(rèn)過(guò) 正常顯示
回復(fù)

使用道具 舉報(bào)

5#
ID:603592 發(fā)表于 2021-5-30 19:00 來(lái)自觸屏版 | 只看該作者
已經(jīng)找到問(wèn)題
回復(fù)

使用道具 舉報(bào)

6#
ID:390416 發(fā)表于 2021-6-19 08:48 | 只看該作者
LCD12864中文資料包 容易看明白 http://www.zg4o1577.cn/bbs/dpj-200462-1.html
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久99深爱久久99精品 | 久久精品欧美电影 | 日韩在线 | 欧美三级三级三级爽爽爽 | 日本超碰| 性色的免费视频 | 久草资源网站 | 欧美亚洲成人网 | 久久精品色欧美aⅴ一区二区 | 色久伊人 | 欧美一区二区三区 | 亚洲视频区 | 久久在线| 精品久久99 | 成年人国产在线观看 | 一区二区三区久久久 | 黄片毛片 | 91视频在线看 | 婷婷去俺也去 | 成人国内精品久久久久一区 | 久久精品国产亚洲 | 九九九视频在线观看 | 91精品国产一区二区三区蜜臀 | 国产精品美女久久久久久免费 | 国产精品久久777777 | 国产一区二区三区精品久久久 | 爱爱视频日本 | 欧美一级在线观看 | 日操操| 欧美成人第一页 | 在线观看av网站永久 | 天天曰夜夜操 | 中文二区 | 91在线免费视频 | 久久久91精品国产一区二区三区 | 欧美久久久久久久久中文字幕 | 日韩二区 | 久久亚洲天堂 | 91精品国产综合久久久久久丝袜 | 欧美精品一区二区三区在线 | 中文字幕 亚洲一区 |