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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7649|回復: 4
收起左側

51單片機初學實踐:用DS1302模塊和1.44寸TFT顯示屏(ST7735)實現電子鐘

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

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

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

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


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


實物接線效果:

51hei圖片_20200726151404.jpg


在實踐過程中,有以下心得:

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

2、P3.2需要設置為推挽模式,以便更好地驅動顯示屏背光
  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
復制代碼

3、ADC采樣輸入,需要用到P1.0和P1.1兩個端口,P1.0用于測量TL431輸出的參考電壓2.5v,P1.1用于測量光敏電阻當前分壓
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轉換結果的高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轉換器電源, 540個時鐘周期轉換一次
  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. }
復制代碼

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


光敏電阻的特點是光照越強阻值越小,分壓降低,而在弱光環境則是阻值變大,分壓升高,如下二圖所示
可以根據這個特點自動調整顯示屏背光強度

51hei圖片_20200726151430.jpg


4、PWM輸出

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

Annotation 2020-07-26 141016.png


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


占空比調整通過設置不同的CCAP1L/H值來實現
Annotation 2020-07-26 141931.png


Annotation 2020-07-26 142110.png


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

5、在TFT屏幕上顯示字符
需要注意12x16和12x24這種字符點陣數據,由于12不是8的整數倍,實際存儲16bit,使用時,需要跳過最后4個填充bit
//采用設置窗口方法填充12x24點陣數字
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函數內容:
  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執行以下分支
  30.         {
  31.                         //printf(">>>===\r\n");
  32.                         ReadAndShowTemperature(-5);
  33.                         
  34.                         ReadAndShowPhotoresistorVoltage();

  35.             timer_flag_5s = 0;
  36.                 }
  37.     }
  38. }
復制代碼

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

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

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

Annotation 2020-07-26 160835.png

以上代碼使用最小系統和面包板調試,接線簡單,具體端口可參看config.h

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

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


評分

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

查看全部評分

回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人午夜激情 | 在线观看亚洲专区 | 91最新在线视频 | 欧美精品久久 | 国产高清一二三区 | 人人看人人爽 | 精品影院| 国产资源一区二区三区 | 中文字幕免费中文 | 国产一区二区在线免费播放 | 91麻豆精品一区二区三区 | 欧美激情久久久 | 伊人狠狠操 | 拍戏被cao翻了h承欢 | 亚洲成人av一区二区 | 免费一区二区三区 | 成人久久久久 | 国产大片黄色 | 粉嫩一区二区三区四区公司1 | 99视频免费在线观看 | 久久这里有精品 | 欧美成人精品一区 | 欧美日韩亚洲视频 | 男人久久天堂 | 亚洲成人一区二区 | 欧美综合视频 | 日本一区二区三区在线观看 | 国产欧美精品区一区二区三区 | 亚洲 中文 欧美 日韩 在线观看 | 亚洲天堂一区二区 | 日韩精品一区二区三区中文在线 | 中文字幕乱码一区二区三区 | 午夜成人在线视频 | 三级视频国产 | 嫩呦国产一区二区三区av | 日本视频在线 | 在线免费观看欧美 | 国产综合久久久久久鬼色 | 中文字幕一区二区三区四区 | 美女福利网站 | 我爱操 |