遷移51 的 LCD12864 到 Stm32F407 (正點原子探索者) 清翔51單片機 LCD12864帶中文字庫

 

假期參加電賽崩了。。。  閒的無聊,準備做一些底層的代碼分享一下,也算是給自己磨鍊一下吧。

這次做的是Stm32F407ZGT6 驅動LCD12864 的代碼 測試的時候使用的是正點原子的探索者 STM32F4開發板、 LCD 插在 清翔的51單片機開發板上  注意 我是用的是 帶有中文字庫的版本       代碼的下載地址在這裏

這裏注意  驅動LCD  需要給模塊一個參考電壓  也就是上圖的VO  否則LCD 顯示會出異常(顏色過深或者過淺) 我也是因爲這個

所以才使用了成品開發板的電路

程序是從51單片機的程序上遷移過來的,咱們不做深究,只是注重一些遷移的細節。

以上是三個控制引腳的設置,其實還有幾個是 PSB  需要設置,這個是一直拉高  我就沒用IO了 就直接接到VCC了

在51中 IO的輸入輸出是由 C語言的讀取和寫入決定的, P0 = 0xff  是輸出  data = P0是 讀取

但是在STM32F407 中確不是這樣的,STM32 有自己的輸入數出模式, 不同的時刻需要對輸入輸出的寄存器進行配置。

我的實現過程大概是這樣的:

輸出和輸入分別使用一個函數來實現,函數中有切換 IO輸入輸出模式的操作 也有 讀取和寫入的操作

實現了這兩個函數以後剩下的代碼幾乎就可以全部遷移過去了,只要注意一下 函數名稱就可以了

 

以上就實現了對LCD12864 的驅動, 我測試用的 LCD是帶有中文字庫的,顯示漢字很方便,至於繪圖, 描點、反白、顯示數字等等的暫時還沒有實現,看心情吧。如果有更新的話後期大家應該可以看得到。

 

更新的代碼來了,  我編寫了一些常用的顯示代碼,

大概是這樣的  顯示int(帶符號)  double 還有hex 和bin 

 

int 顯示的函數 請使用這個   後面的那個是有問題的

void LCD_12864_show_int(u8 x,u8 y,int num,u8 len)
{
    u32 temp=1;
    u8 i=0;
    u8 flag=1;
    LCD_12864_pos(x,y);
    if(num <0)
    {
        LCD_12864_write_data('-'); //顯示符號
        num *=-1;
    }
    for(i=0;i<len-1;i++) // 最高位 除以len -1
        temp *=10;
    for(i=0;i<len;i++)
    {    
        if(flag &&(num/temp == 0))
        { //flag == 1 並且 num/temp == 0
          //證明這是我們不想要的開頭部分的0
            LCD_12864_write_data(' ');// 填充空格
        } else
        {
            flag = 0;//  第一次進入就會置0  之後就不會進到上面的邏輯
            LCD_12864_write_data((num/temp)+'0');
            
            
        }
        num%=temp;
        temp/=10;
    }    
}

這是顯示int 的實現方法(自己寫的可能會有bug   我這邊測試暫時沒有發現問題)

這是顯示string的方法,  可以直接顯示漢字!

double 的顯示比較長。。。。 而且這個代碼存在一定的精度的誤差 比如你要顯示123456.654321  可能實現的不是這個數字!!!

其實 顯示 double和 hex  bin 都是先合成一個string  然後在現實string   主要的難點就是合成string了

以上就是顯示的過程了

這是顯示的效果圖  對應於 main中

顯示bin的話  LCD的長度不是很夠 看着就是比較難受

這是顯示 字符串和 int

看起來還湊合  ,  注意使用的時候長度要有一定的富餘

 

 

代碼大概是這樣的,我會上傳, 寫的比較匆忙 錯誤支持在做難免,希望您的不吝賜教!

 

代碼下載地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章