找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6601|回复: 3
收起左侧

proteus8.7+stm32f103+tm1637数码管显示仿真程序

[复制链接]
ID:569027 发表于 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 发表于 2019-10-13 20:19 | 显示全部楼层
感谢分享。。。。。。。。。。。
回复

使用道具 举报

ID:276703 发表于 2020-1-1 17:15 | 显示全部楼层
感谢分享  学习下这个方法
回复

使用道具 举报

ID:352886 发表于 2020-4-25 10:02 | 显示全部楼层
文件都打不开
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表