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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求一個STC15單片機與TM1652顯示的例程

[復制鏈接]
跳轉到指定樓層
樓主
ID:33548 發表于 2025-2-26 15:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
那位大師有STC15單片機控制TM1652,顯示5位LED數碼管的例程,參考學習一下。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:866313 發表于 2025-2-27 03:09 | 只看該作者
以下內容由 DeepSeek R1 生成
以下是基于STC15單片機驅動TM1652數碼管顯示的示例代碼,綜合了多個搜索結果中的技術要點(如UART模擬時序、命令格式、硬件配置等),并針對5位數碼管顯示需求進行了適配和優化。代碼注釋中包含了關鍵邏輯說明,方便學習和移植。


STC15單片機驅動TM1652示例代碼 #include "STC15F2K60S2.H"
#include <intrins.h>

// 定義TM1652通信引腳(假設使用P3.0作為數據線)
sbit TM1652_SDA = P3^0;

// 延時函數(適應11.0592MHz晶振,調整延時以滿足52us/位的時序要求)
void delay_us(unsigned int us) {
     while (us--) {
         _nop_(); _nop_(); _nop_(); _nop_(); // 約1us延時
     }
}

// TM1652發送單字節函數
void TM1652_SendByte(unsigned char dat) {
     unsigned char i;
     unsigned char parity = 0; // 奇偶校驗計數器

     // 起始位(高→低,持續52us)
     TM1652_SDA = 1;
     delay_us(5);
     TM1652_SDA = 0;
     delay_us(52);

     // 發送8位數據(低位優先)
     for (i = 0; i < 8; i++) {
         if (dat & 0x01) {
             TM1652_SDA = 1;
             parity++;
         } else {
             TM1652_SDA = 0;
         }
         dat >>= 1;
         delay_us(52);
     }

     // 校驗位(若數據中1的個數為奇數,則校驗位為0)
     TM1652_SDA = (parity % 2 == 0) ? 1 : 0;
     delay_us(52);

     // 停止位(高電平,持續52us)
     TM1652_SDA = 1;
     delay_us(52);
}

// 初始化TM1652(設置顯示模式、亮度等)
void TM1652_Init() {
     // 顯示控制命令:開啟顯示,亮度級別4(共8級)
     TM1652_SendByte(0x48); // 命令格式:0x4X(X為亮度值+顯示開關)
}

// 顯示5位數字(支持0-9)
void TM1652_Display5Digits(unsigned char *digits) {
     // 發送顯示地址命令:從第一個數碼管開始(地址0x00)
     TM1652_SendByte(0x00); // 地址命令
     
     // 發送5位數據(每位對應一個數碼管)
     for (unsigned char i = 0; i < 5; i++) {
         TM1652_SendByte(digits); // 需根據段碼表轉換數字到TM1652編碼
     }
     
     // 發送結束命令(可選)
     TM1652_SendByte(0x0F); // 結束幀
}

// 主函數示例
void main() {
     unsigned char display_data[5] = {0x3F, 0x06, 0x5B, 0x4F, 0x66}; // 顯示"12345"

     TM1652_Init();          // 初始化TM1652
     TM1652_Display5Digits(display_data); // 更新顯示

     while(1) {
         // 動態更新顯示內容(如需)
     }
}

關鍵說明與注意事項
  • 硬件連接  

    • TM1652僅需一個數據線(SDA),連接到STC15的任意IO口(示例中使用P3.0)。
    • 數碼管的段碼需根據實際硬件電路定義(共陰/共陽),示例中的0x3F等值為共陰數碼管編碼。

  • 時序配置  

    • TM1652的UART波特率建議為19200bps(每位約52us),需通過delay_us精確控制時序。
    • 若主頻非11.0592MHz,需調整延時函數參數。

  • 命令格式  

    • 顯示控制命令:格式為0x4X,其中X的低3位控制亮度(0-7),最高位控制顯示開關(1=開)。
    • 地址命令:發送0x00表示從第一個數碼管開始寫入數據,后續依次為0x01、0x02等。

  • 段碼表參考  根據數碼管類型(共陰/共陽)定義段碼,例如共陰數碼管數字0的編碼為0x3F(對應段A-F點亮)。



擴展功能
  • 動態顯示:在main函數循環中更新display_data數組并調用TM1652_Display5Digits,可實現滾動顯示或實時數據更新。
  • 按鍵掃描:TM1652支持按鍵掃描功能,需結合中斷讀取鍵值(參考TM1652數據手冊)。

如需完整工程或更詳細的移植說明,可參考以下資源:
  • STC15W401AS驅動TM1652程序(C語言,直接適配)
  • TM1652通信協議詳解(含時序圖)


回復

使用道具 舉報

板凳
ID:404160 發表于 2025-2-27 10:52 | 只看該作者
#include <STC15F2K60S2.h>  

#define TM1652_DIO P1_0 // DIO連接口  
#define TM1652_CLK P1_1 // CLK連接口  

// 定義命令  
#define CMD_WRITE 0x40  
#define CMD_DISPLAY_ON 0x88  

void DelayMs(unsigned int ms)  
{  
    while (ms--) {  
        unsigned int i = 123; // 大約1ms  
        while (i--);  
    }  
}  

void TM1652_SendByte(unsigned char dat)  
{  
    unsigned char i;  

    // 發送數據  
    for (i = 0; i < 8; i++) {  
        TM1652_DIO = dat & 0x01; // 發送最低位  
        dat >>= 1;               // 右移  
        TM1652_CLK = 1;          // 時鐘高電平  
        DelayMs(1);              // 小延時  
        TM1652_CLK = 0;          // 時鐘低電平  
    }  
}  

void TM1652_Init(void)  
{  
    TM1652_CLK = 0; // CLK初始化  
    TM1652_DIO = 0; // DIO初始化  

    TM1652_SendByte(CMD_WRITE); // 發送寫命令  
    TM1652_SendByte(CMD_DISPLAY_ON); // 打開顯示  
}  

void TM1652_Display(unsigned char pos, unsigned char data)  
{  
    // pos: 位置 (0-4) 對應于 5 位數碼管  
    // data: 顯示的數據  
    TM1652_SendByte(0xC0 | pos); // 設置起始地址  
    TM1652_SendByte(data); // 發送數據  
}  

void main(void)  
{  
    TM1652_Init(); // 初始化TM1652  

    while (1) {  
        TM1652_Display(0, 0x01); // 顯示第0位數據  
        TM1652_Display(1, 0x02); // 顯示第1位數據  
        TM1652_Display(2, 0x03); // 顯示第2位數據  
        TM1652_Display(3, 0x04); // 顯示第3位數據  
        TM1652_Display(4, 0x05); // 顯示第4位數據  
        DelayMs(1000); // 延時1秒  

        TM1652_Display(0, 0x06); // 改變顯示內容  
        TM1652_Display(1, 0x07);  
        TM1652_Display(2, 0x08);  
        TM1652_Display(3, 0x09);  
        TM1652_Display(4, 0x0A);  
        DelayMs(1000); // 延時1秒  
    }  
}

//參考,按思路去修改
回復

使用道具 舉報

地板
ID:161164 發表于 2025-2-27 11:32 | 只看該作者
用串口1的模式3就可以簡單控制
回復

使用道具 舉報

5#
ID:1109793 發表于 2025-2-28 07:39 | 只看該作者
cedtek 發表于 2025-2-27 03:09
以下內容由 DeepSeek R1 生成以下是基于STC15單片機驅動TM1652數碼管顯示的示例代碼,綜合了多個搜索結果中 ...

居然只用一個腳通信?我記得好像18B20
回復

使用道具 舉報

6#
ID:161164 發表于 2025-2-28 11:38 | 只看該作者
xiaobendan001 發表于 2025-2-28 07:39
居然只用一個腳通信?我記得好像18B20

這芯片是串口通信的,只收不發
一個TxD就夠
回復

使用道具 舉報

7#
ID:1109793 發表于 2025-2-28 12:38 | 只看該作者
lkc8210 發表于 2025-2-28 11:38
這芯片是串口通信的,只收不發
一個TxD就夠

哦,沒用過,那就是不能帶按鍵 了
我用過1650帶幾個按鍵,還是很方便的,顯示與主控分體時節省不少線。
回復

使用道具 舉報

8#
ID:33548 發表于 2025-2-28 17:32 | 只看該作者
飛云居士 發表于 2025-2-27 10:52
#include   

#define TM1652_DIO P1_0 // DIO連接口  

1652只有一個接收口,一線的
回復

使用道具 舉報

9#
ID:1133081 發表于 2025-3-1 08:35 | 只看該作者
cjtdz 發表于 2025-2-28 17:32
1652只有一個接收口,一線的

地板正解!使用單片機串口,只發不收。波特率19200. TM1652.PDF (369.46 KB, 下載次數: 0)
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久999免费视频 999久久久久久久久6666 | 久久久精品网站 | 日韩中文字幕视频在线 | 日韩在线不卡视频 | 天天看天天操 | 亚洲韩国精品 | 日日摸夜夜添夜夜添特色大片 | 精品亚洲一区二区 | 中文一级片| 蜜桃黄网| 午夜影院普通用户体验区 | 亚洲成人免费av | 日韩精品一区在线观看 | 午夜播放器在线观看 | 亚洲欧美中文日韩在线v日本 | 亚洲精品福利在线 | 91麻豆产精品久久久久久夏晴子 | 亚洲免费精品 | 久久精品小视频 | 一区二区三区高清 | 中文字幕在线一区二区三区 | 一级毛片观看 | 毛片在线看片 | 古典武侠第一页久久777 | 国产在线精品一区二区 | 97久久精品午夜一区二区 | 成年人在线视频 | 午夜精品一区二区三区在线视 | 亚洲综合国产 | 99精品视频免费观看 | 久久久久久亚洲精品 | 国产精品久久久久久吹潮 | 伊人网影院 | 久久伊 | 国产片淫级awww | 欧美一区二 | 日本中文字幕日韩精品免费 | 国产精品视频500部 a久久 | 麻豆91av | 国产精品久久久久久妇女 | 中文字幕 在线观看 |