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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3752|回復: 7
打印 上一主題 下一主題
收起左側

關于12864顯示點,有兩句單片機代碼不是很理解

[復制鏈接]
跳轉到指定樓層
樓主
寫入一個點的單片機子程序。具體步驟是:計算出X軸、Y軸的地址、X軸中的第幾位,然后讀出該地址現在的值,因為一般寫入新的點的時候,會覆蓋掉16個點中其他點,當你要同時顯示16個點中的兩個點的時候就會沖突,所以先將顯示中的點讀出來,然后在或上要點亮的點,這樣就可以同時點亮。注意讀取數據的時候讀取的第一個數據不要,從第二數據開始取,也就是說要讀取三次,只取后面兩次的值。還有就是讀取數據之前要先寫入你要讀取數據的地址,讀取數據之后的寫入數據還要從新寫入地址。最后就是輸入數據地址,先輸入Y軸,再輸入X軸,輸入數據。
*/
voidput_point(uchar x,uchar y)
{
       uint bt=0,read=0;
       uchar x_adr,y_adr,h_bit,l_bit;
       y_adr=0x80+y%32;                    //計算Y軸的地址,應為縱坐標有64個,所有對32求余,當Y大于31時,Y的坐標是下半屏的。
       if(y>31)             //計算X軸的地址當Y大于31時X的地址在下半屏,從0X88開始,小于31時X的地址是在上半屏,從0X80開始
              x_adr=0x88+x/16;        
       else
              x_adr=0x80+x/16;
       bt=0x8000>>(x%16);  //求這個點到底是在哪個點
       write_com(0x34);
       write_com(0x34);
       write_com(y_adr);   //讀取數據的時候要先寫入所取數據的地址
       write_com(x_adr);
       read_data();             //讀取的第一個字節不要,
       read=read_data();     //從第二個字節開始接收。
       read<<=8;
       read|=read_data();
       bt=bt|read;
       h_bit=bt>>8;
       l_bit=bt;
       write_com(y_adr);    //寫入點的時候,重新寫入地址,因為地址已經改變。
       write_com(x_adr);
       write_num(h_bit);
       write_num(l_bit);
       write_com(0x36);    //開顯示
       write_com(0x30);    //轉回基本指令集           
}



根據文字提示的內容,為什么第一次讀取的數據不要? 為什么與運算之后就可以同時顯示了?

想請教下前輩指點下,哪怕是提示下都可以。小弟先謝謝了

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

使用道具 舉報

沙發
ID:235207 發表于 2017-9-24 00:28 | 只看該作者
哈哈,我也不是很了解
回復

使用道具 舉報

板凳
ID:123289 發表于 2017-9-24 10:03 | 只看該作者
畫出邏輯框圖或許你自己就明白了。
回復

使用道具 舉報

地板
ID:231376 發表于 2017-9-24 12:33 來自手機 | 只看該作者
yzwzfyz 發表于 2017-9-24 10:03
畫出邏輯框圖或許你自己就明白了。

寫代碼從來不畫框圖,其實我就是不理解他為啥莫名其妙要多讀一次,我昨天想想是不是所謂二緩沖技術
回復

使用道具 舉報

5#
ID:111634 發表于 2017-9-25 22:16 | 只看該作者
筆名很牛人不牛
回復

使用道具 舉報

6#
ID:231376 發表于 2017-9-26 19:56 | 只看該作者
zl2168 發表于 2017-9-25 22:16
筆名很牛人不牛

搞了兩天得到了答案~
回復

使用道具 舉報

7#
ID:231376 發表于 2017-9-26 20:14 | 只看該作者
還是寫個解答吧,網上關于這個資料比較少(搜索了一遍,都是剪刀膠布,關鍵地方沒有說明為什么):

首先12864并不是點對點,就是你寫個(1,10)進去,它就能顯示出個點來,大致就是橫向128,每次控制16位,也就是為啥
你寫了個字符進去會顯示出那么大個的字出來。

基本上可以理解為:基地址+偏移量=最終顯示(代碼就是這個思路)

另外這個屏幕Y軸是分了32+32,過了32地址又從“0”開始;




這是st7920的datesheet,這個芯片讀取分兩種模式,一種是每次讀取4位,讀取兩次,另一種是一次性讀取8位。

其次每次讀取一個字節是8位,這里又接著讀取了兩次,可以猜想一下是先讀了高位,然后讀取低位。

一個地址是16位,這樣的話

Dummy是“假的”的意思,大意是“空讀”,就是每次要先空讀一次,才能讀取到真正的信息。

bt是用戶要寫入的地址,為什么要“與”一下呢?

看到這張圖,我想你已經理解了。



        uint bt = 0, readValue = 0;
        uchar x_adr, y_adr, h_bit, l_bit;

        //--Y軸最大一共64,但是12864分為上半屏和下半屏,超過32就是下半屏了,--//
        //--地址得又從零開始了。所以對32求余數,得到Y軸的坐標,然后加上80H的基地址--//
        y_adr = 0x80 + y % 32;                //計算Y軸的地址       
       
        //--當Y大于31時是下半屏,X(水平位置的地址)是從88H開始的,而且它是16位一--//
        //--個地址,所以對16求模。而上半屏的地址是從80H開始的--//
        if(y>31)
        {
                x_adr = 0x88 + x / 16;        //計算X軸的地址
        }
       
        else
        {
                x_adr = 0x80 + x / 16;
        }
       
        //--求出X(水平位置),點亮的點是在16位數據里面的哪一個位--//
        //--所以對這個數求余數--//
        bt = 0x8000 >> (x % 16);


        LCD12864_ReadData();                  //讀取的第一個字節不要,  //空讀
        readValue = LCD12864_ReadData();          //從第二個字節開始接收。//真正的讀取
//        readValue <<= 8;                                           //高8位
//        readValue |= LCD12864_ReadData();           //低8位
        bt = bt | readValue;
        h_bit = bt >> 8;
        l_bit = bt;




后記:就這么多信息,我覺得12864的核心就在這里,可能這點東西需要下個使用者研究上幾天,最近對這種事情也很感慨,學校里在搞智能車,
做的稀爛,能完整跑一圈的沒幾個,一個個還保密的不得了,以前也是做C++逆向的,不喜歡國內這種風氣。我也在想:是不是自己傻,別人問我的,只要我會的都會告訴對方,一旦自己遇到問題了每個能幫助的字節的人~

評分

參與人數 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

8#
ID:237272 發表于 2017-10-16 14:55 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品在线播放 | 91精品国产综合久久小仙女图片 | 亚洲午夜精品在线观看 | 婷婷99 | 一区二区三区日韩 | 刘亦菲国产毛片bd | 国产在线一区二区三区 | 亚洲欧美一区二区三区在线 | 欧美日韩视频在线 | 国产福利在线小视频 | 日本精品一区二区三区在线观看视频 | 国产精品久久久久久久久久三级 | 一级黄色录像片子 | 一级做a爰片久久毛片免费看 | jizz视频| 国产精品亚洲一区 | 日本免费一区二区三区视频 | 精品久久久久久久人人人人传媒 | 色爱区综合 | 亚洲欧洲成人av每日更新 | 特黄视频 | 日韩久久久久久 | 午夜精品一区二区三区在线观看 | www.狠狠干 | 精品在线观看入口 | 久久蜜桃av一区二区天堂 | 青青久久| 日韩精品久久久久 | 色婷婷综合成人av | 色爱区综合| av在线二区 | 日韩一级免费大片 | 日日做夜夜爽毛片麻豆 | 久久久久无码国产精品一区 | 国产免费看 | 成年人网站免费视频 | 国产色婷婷精品综合在线播放 | 国产精品18hdxxxⅹ在线 | 一区二区三区影院 | 欧美涩| 成年人视频在线免费观看 |