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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3639|回復(fù): 4
收起左側(cè)

基于STC32G12K128單片機的LCM-DMA-EEPROM實驗例程

[復(fù)制鏈接]
ID:1039438 發(fā)表于 2023-1-31 15:11 | 顯示全部樓層 |閱讀模式
      春節(jié)在家無事,學(xué)習(xí)了LCM,DMA和EEPROM的使用,寫了一個例程,上機調(diào)試運行通過,分享給大家,相信這類東西多些對我們初學(xué)者是有利的。也歡迎大神們指點和吐槽。

      程序采用模塊化編程,一個主程序main.c,一個mcu初始化程序mcu_initial,c。一個tft320x240屏的驅(qū)動程序。其余兩個看名子就知是什么了。
下面是單片機主程序:
#include <STC32G.H>
#include "mcu_initial.h"
#include "picture.h"
#include "eeprom_drv.h"
#include "tft_320_drv.h"
#include "lcm_dma_test.h"
char xdata buffer[3696];//DMA緩沖區(qū),按技術(shù)手冊要求,必須在xdata位置
        void main(void)
{
unsigned int k;
        unsigned long cont;
//unsigned long j;

        mcu_initial();
        lcd_initial();
      
lcd_address(0,0,320,240);
        display_black();//不清屏的結(jié)果是屏上會顯示上一個程序運行時的圖像
/***清全部eeprom區(qū),寫完屏蔽掉,這里設(shè)置了37K的eeprom
        for(j=0;j<37887;j=j+512)
         IapErase(j);
        */
        /***先把數(shù)據(jù)寫入eeprom
                p=gImage_picture;//gImage_picture是頭文件中的圖像數(shù)組的名

        for (j=0;j<36960;j++)
        {
                //dat=*p;//從目標(biāo)位置取操作數(shù)據(jù),本例是直接把數(shù)據(jù)源位置寫入
                IapProgram(j,*p);//把數(shù)據(jù)寫入指定位置
                p++;//源數(shù)據(jù)地址加一
               
        }
*/
//讀eeprom數(shù)據(jù)文件并顯示出來
for (cont=0;cont<10;cont++)
{
        IapReadmany(cont*3696,3696,buffer);//讀一組數(shù)據(jù),因為xdata空間限制,要分次讀到,次數(shù)與每次的數(shù)量的積正好為全部數(shù)據(jù),這個讀取函數(shù)很厲害,一句就把需要的數(shù)據(jù)讀到緩沖區(qū)了

        lcm_dma_test(0,(0+cont*12),154,120,3696,buffer);//分四個位置顯示,因為空間限制,不能存下全屏用的數(shù)據(jù),只存了四分之一幅
while(!(DMA_LCM_STA&0x01));//這時本應(yīng)該做其它事,可我打算繼續(xù)刷屏,所以只好等待
        lcm_dma_test(154,(0+cont*12),154,120,3696,buffer);
while(!(DMA_LCM_STA&0x01));
        lcm_dma_test(154,(120+cont*12),154,120,3696,buffer);
while(!(DMA_LCM_STA&0x01));
        lcm_dma_test(0,(120+cont*12),154,120,3696,buffer);
while(!(DMA_LCM_STA&0x01));

}


while(1)

{k=SEC;
digit_display(128,64,k);//顯示時鐘秒位
digit_display(160,96,MIN);//顯示時鐘分位,只為測試,隨意顯示的

        }
}

void LCMIF_DMA_Interrupt(void) interrupt 13
{
        if(DMA_LCM_STA& 0x01)//lcm中斷請求標(biāo)志位
        {
        //        LCMIFSTA = 0x00;//清中斷標(biāo)志位
                        DMA_LCM_STA = 0x00; //清除 DMA 狀態(tài)
//LcmFlag = 0;
        }
        /***先屏蔽DMA內(nèi)容
        if(DMA_LCM_STA & 0x01)//lcm的dma中斷請求標(biāo)志位
        {
                if(DmaFlag)
                {
                        DmaFlag = 0;
                        DMA_LCM_CR = 0;
                }
                else
                {
                        index--;
                        if(index == 0)
                        {
                                DMA_LCM_CR = 0;
                                LCD_CS=1;
                        }
                        else
                        {
                                DMA_LCM_CR = 0xa0;        //Write dat
                        }
                }
                DMA_LCM_STA = 0;
        }
        */
      
}
盡可能的使用了STC官方數(shù)據(jù)手冊的例程。特別是中斷程序,是照抄的。如果哪句在官方手冊里沒有,一定是我自己造改的。
tft_320_drv.c里的寫數(shù)據(jù)函數(shù):

void transfer_data(char data1)
{//LCM程序
      
        LCMIFDATL = data1;
        CS0=0;
        LCMIFCR = 0x85;                //Enable interface, write data1 out
while(LCMIFSTA==0);

LCMIFSTA=0;

        CS0 = 1 ;
      
//舊程序
/*        CS0 = 0;
        DC0 = 1;
        RD0 = 1;
        P2=data1;
        WR0 = 0;
        WR0 = 1;
        CS0 = 1;
        */
}

這是個基礎(chǔ)函數(shù),使用這個函數(shù)說明使用了LCM功能,這個功能能提高芯片的工作效率,這種用法就是把LCM功能日常化使用了。
這里附了一個舊函數(shù),方便不能使用LCM功能的朋友使用其它兩項功能(eeprom和dma).
STC官方數(shù)據(jù)手冊上的寫數(shù)據(jù)程序是這樣的:
#define LCM_WRDB(d)  LCM_WR = 0;\  
                                       LCM_DB = (d);\
                                         _nop_();\
                                      LCM_WR = 1  

做為新人,看不太懂,但感覺是用了LCM這個名子,但沒用LCM功能。
圖像數(shù)據(jù)放在頭文件Picture里,使用這個程序時需要自己做個圖形數(shù)據(jù)的頭文件。我自己的圖不太嚴(yán)謹(jǐn)就不上傳了。自己做圖里要考慮圖像的大小與屏,eeprom空間容量的關(guān)系,我用了一半的eeprom存了四分之一屏的圖像。約37K。320*240*2/1024=37.5k
完整程序在附件中,歡迎查閱,吐槽和指正。
補充一句,stc32g12k128的eeprom容量是在stc-isp軟件里設(shè)置的。如圖所示的位置。
stc-isp.png
例圖.png

hard_test.zip

312.19 KB, 下載次數(shù): 25, 下載積分: 黑幣 -5

評分

參與人數(shù) 1黑幣 +80 收起 理由
admin + 80 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:1039438 發(fā)表于 2023-2-1 08:20 | 顯示全部樓層
補充一下:
1,做為學(xué)習(xí)階段的例程,程序中還使用了外晶振和內(nèi)部RTC時鐘源,沒有安裝外晶振的朋友可以把相關(guān)語句屏蔽掉,系統(tǒng)會自動選擇內(nèi)部高速時鐘源,其頻率可在STC-ISP軟件界面選定。
2,緩沖數(shù)組的確定和程序中幾個數(shù)字的解釋,我在這個程序中用了一個隨手拿來的圖片,經(jīng)軟件(Image2Lcd或其它)縮小后大小為154*120(320和240兩者只能照顧一個)。其數(shù)據(jù)量為:
154*120*2=36960(字節(jié))
選擇緩沖數(shù)組3696一是該 值小于8K(stc32g12k128的xdata空間是8K,DMA緩沖數(shù)組只能放在這個空間)
二是總數(shù)據(jù)量正好分十次讀完(整除)。三是3696/154/2=12.就是刷屏?xí)r正好12行(整除),所以程序中出現(xiàn)了3696,154,120,12這幾個數(shù)字,如果哪位同學(xué)的圖像數(shù)據(jù)不同,可按這個關(guān)系自己確定相應(yīng)的常數(shù)。
3,調(diào)試程序時借助了stc-usb link1d工具,進行硬件仿真,用它可以清楚地看到程序運行到哪一步,各種變量的變化,及數(shù)組內(nèi)數(shù)值的變化。明顯的減少了調(diào)試時間。記得聽過一句話,說程序不是寫出來的,是調(diào)出來的。意思大概是寫一個程序并不難,但寫完后難免存在各種小bug.一點小問題可能耽誤很多時間,甚至調(diào)錯方向,把對的改成錯的,結(jié)果越調(diào)越亂(我這種新人難免出這種情況),有了硬件仿真,就容易多了。程序卡在哪里,一看就知道,針對性的進行調(diào)整,容易多了,記得卡的最多的是外晶振無法開啟(這也是上來做補充說明的原因)到現(xiàn)在我也沒能把控時鐘管理。只到了能用的程度,出現(xiàn)問題時,沒能力解決這方面的問題。而最夸張的一次是完全正確的程序,執(zhí)行時卻連第一行都沒進去。如果沒有硬件仿真器支持,真的要多花太多時間去查。
回復(fù)

使用道具 舉報

ID:961114 發(fā)表于 2023-2-2 09:47 | 顯示全部樓層
我也在學(xué)  
真12位ADC, 熱敏電阻/NTC 測溫 《STC32位8051單片機原理及C語言程序設(shè)計 視頻教程》,第19集
1111.png
回復(fù)

使用道具 舉報

ID:1039438 發(fā)表于 2023-2-3 13:10 | 顯示全部樓層
STC莊偉 發(fā)表于 2023-2-2 09:47
我也在學(xué)  
真12位ADC, 熱敏電阻/NTC 測溫 《STC32位8051單片機原理及C語言程序設(shè)計 視頻教程》,第19集

NTC的性能參數(shù)我不熟。沒搞這方面的驗證實驗,只做了ds18b20的測溫實驗。
回復(fù)

使用道具 舉報

ID:1039438 發(fā)表于 2023-2-3 13:14 | 顯示全部樓層
STC莊偉 發(fā)表于 2023-2-2 09:47
我也在學(xué)  
真12位ADC, 熱敏電阻/NTC 測溫 《STC32位8051單片機原理及C語言程序設(shè)計 視頻教程》,第19集

后來才知道在屠龍刀核心板上就設(shè)計安裝了NTC測溫電路的,直接編程就能調(diào)試了
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久免费观看视频 | 亚洲精品久久久一区二区三区 | 懂色一区二区三区免费观看 | 在线免费中文字幕 | 亚洲欧美中文日韩在线v日本 | 91久久网站 | 69av片| 国产高清在线 | 91视频精选 | 天天久久| 狠狠躁18三区二区一区 | 激情五月综合网 | 日韩精品成人一区二区三区视频 | 男人天堂手机在线视频 | 欧美一区二区三区在线 | 国产精品久久久久久久岛一牛影视 | 成年人视频免费在线观看 | 99久久久99久久国产片鸭王 | 午夜精品久久 | 国产精品欧美一区二区三区 | 少妇黄色 | 中文字幕国产一区 | 看a网站| 国内av在线 | 一区二区视屏 | 久久成人精品视频 | 日韩中文字幕视频在线 | 九九热在线观看视频 | 国产自产21区 | 国产一级在线 | 国产成人精品一区二区三区视频 | 国产精品不卡 | 久久一视频 | 日韩在线三级 | 色视频网站 | 在线观看第一页 | 99在线免费视频 | 成人毛片网站 | 日日夜夜精品免费视频 | 亚洲a一区二区 | 亚洲一区二区中文字幕 |