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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

如何用51單片機驅動tm1637 四位數碼管 求幫助

[復制鏈接]
跳轉到指定樓層
樓主
如何用51單片機驅動tm1637 四位數碼管
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:164602 發表于 2018-11-19 08:09 | 只看該作者
首先:查找TM1637芯片的手冊,看清楚它的每個管腳的用途和控制條件。
例如:
百度文庫:https://wenku.baidu.com/view/defe34f3f90f76c661371a2e.html




第二:查找四聯裝數碼管的各引腳。
例如:某款四聯裝數碼管的資料圖:




第三:根據以上資料,搭建自己的硬件。也就是將這兩個硬件連接起來,再與單片機連接起來。
第四:根據硬件特性,編寫程序。
例如:
/*****************************************************************************
*版權信息:深圳天微電子有限公司
*文 件 名:TM1637-V1.0
*當前版本:V1.0
*MCU 型號:STC12C5608AD
*開發環境:Keil uVision4
*晶震頻率:11.0592MHZ      
*完成日期:2013-07-19
*程序功能:數碼管驅動和按鍵:驅動8段6位LED共陽數碼管顯示,當對應按鍵按下時顯示1~7,原理圖請參考TM1637規格書;         
*免責聲明:1.此程序為TM1637驅動共陽LED數碼管和按鍵演示程序,僅作參考之用。
            2.如有直接使用本例程程序造成經濟損失的,本公司不承擔任何責任            
********************************************************************************/
#include <reg52.h>                                                //頭文件
#include "intrins.h"                                                //包含_nop_()指令頭文件

#define nop _nop_();_nop_();_nop_();_nop_();_nop_();                 //宏定義


/********************定義控制端口**********************/
sbit CLK=P2^2;                                                                 //定義CLK
sbit DIO=P2^3;                                                                 //定義DIO


/********************定義數據*************************/
unsigned char code CODE[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //共陽顯示數據0-F
                                                        /* 0   1    2    3    4     5    6    7     8    9   a     b    c    d    e    f*/
unsigned char code TAB[10]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};//數碼管不顯示

/********************延時函數,延時nms******************/
void delay_nms(unsigned int n)
{
unsigned int i;
while(n--)
   for(i=0;i<550;i++);
}

/********************Start函數*************************/
void I2CStart()
{
DIO=1;
CLK=1;
nop;
DIO=1;
nop;
DIO=0;
nop;
CLK=0;
}

/********************Stop函數*************************/
void I2CStop()
{
    CLK=0;
        nop;
        nop;
        DIO=0;
        nop;
        nop;
        CLK=1;
        nop;
        nop;
        nop;
        DIO=1;
        nop;
        CLK=0;
        DIO=0;
}

/***************發送8bit數據,從低位開始**************/
void I2CWritebyte(unsigned char oneByte)
{
  unsigned char i;
  for(i=0;i<8;i++)
  {
    CLK=0;
        if(oneByte&0x01)
          DIO=1;
        else
          DIO=0;
        nop;
    CLK=1;
    oneByte=oneByte>>1;
  }
                                                                                  //8位數據傳送完                 
        CLK = 0;                                                                //判斷芯片發過來的ACK應答信號
        nop;
        while(DIO==1);
        nop;
        CLK = 1;
        nop;
}

/***************讀按鍵程序**************/
unsigned char read_key()
{
unsigned char rekey,i;
I2CStart();
I2CWritebyte(0x42);                                                         //寫讀鍵指令0x42
DIO=1;
for(i=0;i<8;i++)
{
        CLK=0;
        nop;
        nop;
        rekey=rekey>>1;                                                           //先讀低位
        nop;
        nop;
        CLK=1;
        if(DIO)
          rekey=rekey|0x80;
        else
          rekey=rekey|0x00;
        nop;
}
        CLK = 0;                                                          //判斷芯片發過來的ACK應答信號
        nop;
        nop;
        while(DIO==1);
        nop;
        nop;
        CLK = 1;
        nop;
        nop;
        I2CStop();

        return rekey;
}

/************顯示函數,地址自加一************/
void disp0(unsigned char *p)                              
{
unsigned char i;
I2CStart();
I2CWritebyte(0x40);                                  //數據命令設置:地址自動加1,寫數據到顯示寄存器
I2CStop();

I2CStart();
I2CWritebyte(0xc0);                                  //地址命令設置:初始地址為00H
for(i=0;i<6;i++)                                  //發送4字節數據到顯存
{
I2CWritebyte(*p);
p++;
}
I2CStop();

I2CStart();
I2CWritebyte(0x8C);                                 //顯示控制命令:開顯示,脈沖寬度為11/16.
I2CStop();

}

/************顯示函數,固定地址寫數據************/
void disp(unsigned char add, unsigned char value)
{
I2CStart();
I2CWritebyte(0x44);                                 //數據命令設置:固定地址,寫數據到顯示寄存器
I2CStop();

I2CStart();
I2CWritebyte(add);                                //地址命令設置:寫入add對應地址

I2CWritebyte(CODE[value]);                        //給add地址寫數據
I2CStop();

I2CStart();
I2CWritebyte(0x8C);                                //顯示控制命令:開顯示,脈沖寬度為11/16.
I2CStop();

}

/************按鍵處理函數,按鍵數據低位在前高位在后************/
void key_process()
{
unsigned char temp;
temp=read_key();                                   //讀取按鍵返回值
if(temp!=0xff)
{
  disp0(TAB);                                           //清屏
  switch(temp)
  {
    case 0xf7 : disp(0xc0,1);break;                  //K1與SG1對應按鍵按下,顯示1
        case 0xf6 : disp(0xc1,2);break;                  //K1與SG2對應按鍵按下,顯示2
        case 0xf5 : disp(0xc2,3);break;                  //K1與SG3對應按鍵按下,顯示3
        case 0xf4 : disp(0xc3,4);break;                  //K1與SG4對應按鍵按下,顯示4
        case 0xef : disp(0xc4,5);break;                  //K2與SG1對應按鍵按下,顯示5
        case 0xee : disp(0xc5,6);break;                  //K2與SG2對應按鍵按下,顯示6
        case 0xed : disp(0xc0,7);break;                  //K2與SG3對應按鍵按下,顯示7
        default   : break;
  }
}
}

void main()
{
  disp0(CODE);                                      //上電數碼管顯示0~5
  delay_nms(1);
  while(1)                                     //按鍵后顯示按鍵內容
  {
    key_process();
    delay_nms(100);
  }
}

還是很簡單的嘛。

有點麻煩?那么這樣也是可以的:
在某寶上找TM1637,就會有已經連接好的模塊成品,你只需要連接上單片機即可,還提供可能完整的資料,好好學習一下,也是可以解決你的問題的。
回復

使用道具 舉報

板凳
ID:428918 發表于 2018-11-19 20:40 | 只看該作者
HC6800-ES-V2.0 發表于 2018-11-19 08:09
首先:查找TM1637芯片的手冊,看清楚它的每個管腳的用途和控制條件。
例如:
百度文庫:https://wenku.ba ...

非常感謝你的解答,我就是淘寶買的TM637四位數碼管的模塊,他給的資料是arduino的程序,51單片機不能直接使用。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美在线高清 | 欧美精品片 | 日韩精品1区2区3区 爱爱综合网 | 在线免费观看黄a | 欧美www在线观看 | 国产精品乱码一区二区三区 | 中文字幕中文字幕 | 欧美极品在线观看 | 91精品中文字幕一区二区三区 | 国产精品视频免费播放 | 韩日精品一区 | 国产综合久久 | 国产人久久人人人人爽 | 三级黄色片在线播放 | 在线一区 | 久久中文字幕一区 | 国产精品福利在线 | 日韩欧美亚洲 | 91黄在线观看 | 国产电影精品久久 | 国产91亚洲精品 | 欧美成年黄网站色视频 | 在线视频 中文字幕 | 婷婷在线网站 | 久久久久一区二区三区四区 | 自拍视频一区二区三区 | 久久久精品天堂 | 国产精品久久一区二区三区 | 亚洲国产精品一区 | 九九久久久| 91中文字幕在线 | 男人天堂99 | 久久久久久久一区二区三区 | 中文字幕一区二区三区不卡在线 | 一级片免费视频 | 国产精品视频一区二区三区 | 久久久久91 | 免费看一级毛片 | 成人精品一区二区 | 久久国产精品久久久久久 | 91久久久久久久久久久久久 |