找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7255|回復: 3
收起左側

proteus8.7+stm32f103+tm1637數碼管顯示仿真程序

[復制鏈接]
ID:569027 發(fā)表于 2019-9-22 10:48 | 顯示全部樓層 |閱讀模式
proteus+stm32+tm1637顯示仿真,仿真時數碼管刷新率太低,數字一位一位顯示,哪位高手改進一下。
0.png

單片機源程序如下:
  1. #include "TM1640.h"
  2. #include "delay.h"

  3. #define DEL  1   //宏定義 通信速率(默認為1,如不能通信可加大數值)

  4. //地址模式的設置
  5. //#define TM1640MEDO_ADD  0x40   //宏定義        自動加一模式
  6. #define TM1640MEDO_ADD  0x44   //宏定義 固定地址模式(推薦)

  7. //顯示亮度的設置
  8. //#define TM1640MEDO_DISPLAY  0x88   //宏定義 亮度  最小
  9. //#define TM1640MEDO_DISPLAY  0x89   //宏定義 亮度
  10. //#define TM1640MEDO_DISPLAY  0x8a   //宏定義 亮度
  11. //#define TM1640MEDO_DISPLAY  0x8b   //宏定義 亮度
  12. #define TM1640MEDO_DISPLAY  0x8c   //宏定義 亮度(推薦)
  13. //#define TM1640MEDO_DISPLAY  0x8d   //宏定義 亮度
  14. //#define TM1640MEDO_DISPLAY  0x8f   //宏定義 亮度 最大

  15. #define TM1640MEDO_DISPLAY_OFF  0x80   //宏定義 亮度 關



  16. void TM1640_start(){ //通信時序 啟始(基礎GPIO操作)(低層)
  17.         DIO_1;
  18.         delay_us(DEL);
  19.         CLK_1        ;
  20.         delay_us(DEL);
  21.         DIO_0;
  22.         delay_us(DEL);
  23.         CLK_0        ;
  24.         delay_us(DEL);
  25. }
  26. void TM1640_stop(){ //通信時序 結束(基礎GPIO操作)(低層)
  27.         CLK_0        ;
  28.         delay_us(DEL);
  29.         DIO_0;
  30.         delay_us(DEL);
  31.         CLK_1        ;       
  32.         delay_us(DEL);
  33.         DIO_1;
  34.         delay_us(DEL);
  35. }
  36. void TM1640_write(u8 date){        //寫數據(低層)
  37.         u8 i;
  38.         u8 aa;
  39.         aa=date;
  40. //        GPIO_WriteBit(TM1640_GPIOPORT,TM1640_DIN,(BitAction)(0)); //接口輸出0       
  41. //        GPIO_WriteBit(TM1640_GPIOPORT,TM1640_SCLK,(BitAction)(0)); //接口輸出0       
  42.         for(i=0;i<8;i++){
  43.                 CLK_0        ;       
  44.                 delay_us(DEL);

  45.                 if(aa&0x01){
  46.                         DIO_1;
  47.                         delay_us(DEL);
  48.                 }else{
  49.                         DIO_0;
  50.                         delay_us(DEL);
  51.                 }
  52.                 CLK_1        ;               
  53.                 delay_us(DEL);
  54.                 aa=aa>>1;
  55.    }
  56. //        GPIO_WriteBit(TM1640_GPIOPORT,TM1640_DIN,(BitAction)(0)); //接口輸出0       
  57. //        GPIO_WriteBit(TM1640_GPIOPORT,TM1640_SCLK,(BitAction)(0)); //接口輸出0       
  58.          
  59.          
  60.          CLK_0        ;       
  61.                     delay_us(DEL);
  62. //       DIO_1;
  63. //        delay_us(DEL);
  64.         CLK_1        ;                       
  65.               delay_us(DEL);
  66.                     while(GPIO_ReadInputDataBit(TM1640_GPIOPORT ,TM1640_DIN) == 0x01);
  67. //delay_us(DEL);delay_us(DEL);delay_us(DEL);delay_us(DEL);delay_us(DEL);delay_us(DEL);delay_us(DEL);
  68. }

  69. void TM1640_Init(void){ //TM1640接口初始化
  70.         GPIO_InitTypeDef  GPIO_InitStructure;        
  71.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);      
  72.     GPIO_InitStructure.GPIO_Pin = TM1640_DIN | TM1640_SCLK; //選擇端口號(0~15或all)                        
  73.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //選擇IO接口工作方式      
  74.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //設置IO接口速度(2/10/50MHz)   
  75.         GPIO_Init(TM1640_GPIOPORT, &GPIO_InitStructure);

  76.                 DIO_1; //接口輸出高電平1       
  77.         CLK_1        ;                //接口輸出高電平1       
  78.         TM1640_start();
  79.         TM1640_write(TM1640MEDO_ADD); //設置數據,0x40,0x44分別對應地址自動加一和固定地址模式
  80.         TM1640_stop();
  81.         TM1640_start();
  82.         TM1640_write(TM1640MEDO_DISPLAY); //控制顯示,開顯示,0x88,  0x89,  0x8a,  0x8b,  0x8c,  0x8d,  0x8e,  0x8f分別對應脈沖寬度為:
  83.                                                                            //------------------1/16,  2/16,  4/16,  10/16, 11/16, 12/16, 13/16, 14/16         //0x80關顯示
  84.         TM1640_stop();       
  85.                                
  86. }

  87. void TM1640_display(u8 address,u8 date){ //固定地址模式的顯示輸出
  88.         const u8 buff[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//,0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x00};//數字0~9及0~9加點顯示段碼表
  89.     //---------------   0    1    2    3    4    5    6    7    8    9    0.   1.   2.   3.   4.   5.   6.   7.   8.   9.   無   
  90.    TM1640_start();
  91.    TM1640_write(0xC0+address);                 //傳顯示數據對應的地址
  92.    TM1640_write(buff[date]);                                 //傳1BYTE顯示數據
  93.          TM1640_stop();
  94. }
  95. void TM1640_display_add(u8 address,u8 date){        //地址自動加一模式的顯示輸出
  96.         u8 i;
  97.         const u8 buff[21]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x00};//數字0~9及0~9加點顯示段碼表
  98.     //---------------   0    1    2    3    4    5    6    7    8    9    0.   1.   2.   3.   4.   5.   6.   7.   8.   9.   無   
  99.   TM1640_start();
  100.    TM1640_write(0xC0+address);                 //設置起始地址
  101.    for(i=0;i<4;i++){
  102.       TM1640_write(buff[date]);
  103.    }
  104.    TM1640_stop();
  105. }


  106. /*********************************************************************************************
  107. * 杜洋工作室
  108. * 洋桃電子
  109. *********************************************************************************************/
復制代碼

所有資料51hei提供下載:
數碼管顯示程序.zip (368.59 KB, 下載次數: 246)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:46475 發(fā)表于 2019-10-13 20:19 | 顯示全部樓層
感謝分享。。。。。。。。。。。
回復

使用道具 舉報

ID:276703 發(fā)表于 2020-1-1 17:15 | 顯示全部樓層
感謝分享  學習下這個方法
回復

使用道具 舉報

ID:352886 發(fā)表于 2020-4-25 10:02 | 顯示全部樓層
文件都打不開
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表