找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機(jī)初學(xué)實(shí)踐:用DS1302模塊和1.44寸TFT顯示屏(ST7735)實(shí)現(xiàn)電子鐘

  [復(fù)制鏈接]
ID:759974 發(fā)表于 2020-7-26 16:23 | 顯示全部樓層 |閱讀模式
這周在上次實(shí)現(xiàn)的電子鐘(51單片機(jī)初學(xué)實(shí)踐:用DS1302模塊和LCD1602顯示屏實(shí)現(xiàn)電子鐘)的基礎(chǔ)上作了以下2點(diǎn)改進(jìn):1、將LCD1602屏幕更換為1.44寸 TFT顯示屏
主要考慮是TFT顯示屏可以使用不同字體和顏色,更方便定制顯示界面

2、將STC89C52RC單片機(jī)更換為STC12C5A60S2單片機(jī)
首先是空間更大,STC12C5A60S2單片機(jī)(60K bytes flash ROM, 1280 bytes data RAM),STC89C52RC單片機(jī)(8K bytes flash ROM, 512 bytes data RAM)

其次STC12C5A60S2單片機(jī)有單獨(dú)的SPI接口(P1.5 MOSI 和 P1.6 MISO),可以更好地驅(qū)動TFT顯示屏
STC12C5A60S2單片機(jī)有10位ADC(P1.0 - P1.7),可以采集光敏電阻電壓,自動調(diào)整TFT顯示屏背光亮度
STC12C5A60S2單片機(jī)有專用PWM輸出(P1.3 和 P1.4,可以很方便地調(diào)整TFT顯示屏背光亮度

TFT顯示屏效果:
從上到下依次為:年月日 星期幾 時分秒 氣溫 光敏電阻電壓
51hei圖片_20200726151412.jpg


串口打印效果:
Annotation 2020-07-26 002733.png


實(shí)物接線效果:

51hei圖片_20200726151404.jpg


在實(shí)踐過程中,有以下心得:

1、STC12C5A60S2單片機(jī)有專用的串口定時器,更方便設(shè)置波特率
  1. /* 串口配置函數(shù),通信波特率 9600 */
  2. void UART1_Config()
  3. {
  4.         PCON &= 0x7F;        //波特率不倍速
  5.         SCON  = 0x50;        //配置串口為模式1,允許發(fā)送和接收
  6.         //9600bps@11.0592MHz
  7.         BRT = 0xDC;                //設(shè)定獨(dú)立波特率發(fā)生器重裝值
  8.         AUXR |= 0x04;        //獨(dú)立波特率發(fā)生器時鐘為Fosc,即1T
  9.         AUXR |= 0x01;        //串口1選擇獨(dú)立波特率發(fā)生器為波特率發(fā)生器
  10.         AUXR |= 0x10;        //啟動獨(dú)立波特率發(fā)生器
  11.         EA = 1; //啟用中斷
  12.         ES = 1;        //啟用串口中斷
  13. }
復(fù)制代碼

2、P3.2需要設(shè)置為推挽模式,以便更好地驅(qū)動顯示屏背光
  1. #ifdef MCU_STC12
  2.         //P3.2 set as push-pull output mode, for LCD backlight
  3.         P3M1 &= ~(1<<2);
  4.         P3M0 |=  (1<<2);
  5. #endif
復(fù)制代碼

3、ADC采樣輸入,需要用到P1.0和P1.1兩個端口,P1.0用于測量TL431輸出的參考電壓2.5v,P1.1用于測量光敏電阻當(dāng)前分壓
Annotation 2020-07-26 143927.png

Annotation 2020-07-26 145214.png

Annotation 2020-07-26 144746.png


Annotation 2020-07-26 144938.png


Annotation 2020-07-26 145039.png


Annotation 2020-07-26 145114.png


  1. void ADC_Init()
  2. {
  3.         P1ASF = 0x03;                //選擇P1.0和P1.1作為ADC采樣輸入

  4.         // ADRJ=1時,10位A/D轉(zhuǎn)換結(jié)果的高2位存放在ADC_RES的低2位中,低8位存放在ADC_RESL中
  5.         AUXR1 |= 1<<2;                 //set ADRJ=1 : 10bit result = ADC_RES<<8 + ADC_RESL
  6.         ADC_RES = 0;
  7.         ADC_RESL = 0;
  8.         ADC_CONTR = ADC_POWER | ADC_SPEEDLL; // 打開A/D轉(zhuǎn)換器電源, 540個時鐘周期轉(zhuǎn)換一次
  9.         Delay10us();
  10. }

  11. uint16 ADC_Get_Result(uint8 channel)
  12. {
  13.         uint16 res;
  14.         ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | channel;
  15.         _nop_(); //Must wait before inquiry
  16.         _nop_();
  17.         _nop_();
  18.         _nop_();
  19.         while(!(ADC_CONTR & ADC_FLAG));
  20.         ADC_CONTR &= ~ADC_FLAG;
  21.         res = (ADC_RES & 0x03) << 8;
  22.         res += ADC_RESL;
  23.         Delay10us();
  24.         Delay10us();
  25.         return res;
  26. }
復(fù)制代碼

TL431和光敏電阻接線示意
Annotation 2020-07-25 232140.png Annotation 2020-07-25 232258.png


光敏電阻的特點(diǎn)是光照越強(qiáng)阻值越小,分壓降低,而在弱光環(huán)境則是阻值變大,分壓升高,如下二圖所示
可以根據(jù)這個特點(diǎn)自動調(diào)整顯示屏背光強(qiáng)度

51hei圖片_20200726151430.jpg


4、PWM輸出

不需要修改頻率,直接設(shè)置為SysClk/12
Annotation 2020-07-26 141225.png

Annotation 2020-07-26 141016.png


PCA模塊工作模式設(shè)定為8位PWM,無中斷
Annotation 2020-07-26 142547.png


占空比調(diào)整通過設(shè)置不同的CCAP1L/H值來實(shí)現(xiàn)
Annotation 2020-07-26 141931.png


Annotation 2020-07-26 142110.png


  1. <blockquote>// 1.3和1.4口 PWM占空比,數(shù)值越大,占空比越小
復(fù)制代碼

5、在TFT屏幕上顯示字符
需要注意12x16和12x24這種字符點(diǎn)陣數(shù)據(jù),由于12不是8的整數(shù)倍,實(shí)際存儲16bit,使用時,需要跳過最后4個填充bit
//采用設(shè)置窗口方法填充12x24點(diǎn)陣數(shù)字
void Display_Digit_12x24(uint8 x, uint8 y, uint16 fc, uint16 bc, uint8 idx)
{
        uint8 i,j,k;
        
        LCD_Set_Region(x, y, 12, 24);
        for(i=0; i<3*16; i++)
        {
                if(1 == i%2) k = 4;
                else k = 8;
               
                for(j=0; j<k; j++)
                {
                        if(digit12x24[idx][ i]&(0x80>>j))
                        {
                                SPI_Write_Word(fc);
                        }
                        else
                        {
                                if (fc != bc)
                                {
                                        SPI_Write_Word(bc);
                                }
                        }
                }
        }
}


6、main函數(shù)內(nèi)容:
  1. void main()
  2. {
  3.     int8 slen = 0;
  4.         uint8 pdata uart_cmd_buf[64] = {0};

  5.         DS18B20_Start();
  6.         UART1_Config();        // 9600 baud
  7.         Timer0Init();        //T0定時10ms
  8.     DS1302_Init();        //初始化RTC時鐘
  9.         ADC_Init();

  10. #ifdef MCU_STC12
  11.         //P3.2 set as push-pull output mode, for LCD backlight
  12.         P3M1 &= ~(1<<2);
  13.         P3M0 |=  (1<<2);
  14. #endif

  15.         SPI_Init();
  16.         LCD_Init();
  17.         PWM_Init();
  18.         delay_ms(500);
  19.         LCD_Show_Format();

  20.     while(1)
  21.     {
  22.                
  23.                 Uart_Cmd_Check(&uart_cmd_buf, sizeof(uart_cmd_buf)-1);

  24.         if (timer_flag_250ms)  //每250ms讀取依次時間
  25.         {
  26.                         ReadAndShowRtc();
  27.             timer_flag_250ms = 0;
  28.         }
  29.         if (timer_flag_5s)  //每隔5s執(zhí)行以下分支
  30.         {
  31.                         //printf(">>>===\r\n");
  32.                         ReadAndShowTemperature(-5);
  33.                         
  34.                         ReadAndShowPhotoresistorVoltage();

  35.             timer_flag_5s = 0;
  36.                 }
  37.     }
  38. }
復(fù)制代碼

STC12C5A60S2單片機(jī)手冊下載地址(點(diǎn)替換成.):www點(diǎn)stcmcudata點(diǎn)com/datasheet/stc/STC-AD-PDF/STC12C5A60S2.pdf

1.44寸TFT(ST7735)顯示屏資料(點(diǎn)替換成.):www點(diǎn)lcdwiki點(diǎn)com/zh/1.44inch_SPI_Module_ST7735S_SKU:MSP1443

完整代碼見附件,文件列表如圖所示:

Annotation 2020-07-26 160835.png

以上代碼使用最小系統(tǒng)和面包板調(diào)試,接線簡單,具體端口可參看config.h

初學(xué)單片機(jī),難免有錯漏之處,還請各位壇友不吝賜教。

DS1302_UART_ST7735_STC12C5A60S2.7z (2.34 MB, 下載次數(shù): 222)


評分

參與人數(shù) 3黑幣 +80 收起 理由
1109 + 15 很給力!
pengxxx + 15 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:64253 發(fā)表于 2020-8-12 16:46 | 顯示全部樓層
沒想到還有沙發(fā)坐,先瞧瞧
回復(fù)

使用道具 舉報

ID:585455 發(fā)表于 2020-10-5 11:40 | 顯示全部樓層
很棒的分享,小弟正享用這屏幕顯示時間溫度。
回復(fù)

使用道具 舉報

ID:71456 發(fā)表于 2022-2-18 18:37 | 顯示全部樓層
LCD數(shù)據(jù)口和單片機(jī)連  要加限流電阻嗎?
回復(fù)

使用道具 舉報

ID:140489 發(fā)表于 2022-6-8 13:14 | 顯示全部樓層
試了下,屏能顯示,但時間不走
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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