找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4943|回复: 12
打印 上一主题 下一主题
收起左侧

tm1638单片机程序+仿真模块 TM1638.DLL

  [复制链接]
跳转到指定楼层
楼主
ID:137643 发表于 2020-7-23 14:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
tm1638仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #ifndef        _TM1638_H
  2. #define        _TM1638_H

  3. #include        <REGX51.H>

  4. #define        DATA_COMMAND        0X40
  5. #define        DISP_COMMAND        0x80
  6. #define        ADDR_COMMAND        0XC0

  7. //TM1638模块引脚定义
  8. sbit        DIO=P1^0;
  9. sbit        CLK=P1^1;
  10. sbit        STB=P1^2;

  11. //共阴数码管显示代码
  12. unsigned char code tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
  13.                            0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};


  14. void TM1638_Write(unsigned char        DATA)                        //写数据函数
  15. {
  16.         unsigned char i;
  17.         for(i=0;i<8;i++)
  18.         {
  19.                 CLK=0;
  20.                 if(DATA&0X01)
  21.                         DIO=1;
  22.                 else
  23.                         DIO=0;
  24.                 DATA>>=1;
  25.                 CLK=1;
  26.         }
  27. }
  28. unsigned char TM1638_Read(void)                                        //读数据函数
  29. {
  30.         unsigned char i;
  31.         unsigned char temp=0;
  32.         DIO=1;        //设置为输入
  33.         for(i=0;i<8;i++)
  34.         {
  35.                 temp>>=1;
  36.                 CLK=0;
  37.                 if(DIO)
  38.                         temp|=0x80;
  39.                 CLK=1;
  40.         }
  41.         return temp;
  42. }
  43. void Write_COM(unsigned char cmd)                //发送命令字
  44. {
  45.         STB=0;
  46.         TM1638_Write(cmd);
  47.         STB=1;
  48. }
  49. unsigned char Read_key(void)
  50. {
  51.         unsigned char c[4],i,key_value=0;
  52.         STB=0;
  53.         TM1638_Write(0x42);                           //读键扫数据 命令
  54.         for(i=0;i<4;i++)               
  55.                 c[i]=TM1638_Read();
  56.         STB=1;                                                   //4个字节数据合成一个字节
  57.         for(i=0;i<4;i++)
  58.                 key_value|=c[i]<<i;
  59.         for(i=0;i<8;i++)
  60.                 if((0x01<<i)==key_value)
  61.                         break;
  62.         return i;
  63. }
  64. void Write_DATA(unsigned char add,unsigned char DATA)                //指定地址写入数据
  65. {
  66.         Write_COM(0x44);
  67.         STB=0;
  68.         TM1638_Write(0xc0|add);
  69.         TM1638_Write(DATA);
  70.         STB=1;
  71. }
  72. /*
  73. void Write_oneLED(unsigned char num,unsigned char flag)        //单独控制一个LED函数,num为需要控制的led序号,flag为0时熄灭,不为0时点亮
  74. {
  75.         if(flag)
  76.                 Write_DATA(2*num+1,1);
  77.         else
  78.                 Write_DATA(2*num+1,0);
  79. }          */
  80. void Write_allLED(unsigned char LED_flag)                                        //控制全部LED函数,LED_flag表示各个LED状态
  81. {
  82.         unsigned char i;
  83.         for(i=0;i<8;i++)
  84.                 {
  85.                         if(LED_flag&(1<<i))
  86.                                 //Write_DATA(2*i+1,3);
  87.                                 Write_DATA(2*i+1,1);
  88.                         else
  89.                                 Write_DATA(2*i+1,0);
  90.                 }
  91. }

  92. //TM1638初始化函数
  93. void init_TM1638(void)
  94. {
  95.         unsigned char i;
  96.         Write_COM(0x8b);       //亮度 (0x88-0x8f)8级亮度可调
  97.         Write_COM(0x40);       //采用地址自动加1
  98.         STB=0;                           //
  99.         TM1638_Write(0xc0);    //设置起始地址

  100.         for(i=0;i<16;i++)           //传送16个字节的数据
  101.                 TM1638_Write(0x00);
  102.         STB=1;
  103. }
  104. #endif
复制代码

TM1638.DLL文件要放到MODELS目录里面才能仿真,还有LIBRARY目录的文件也要放进去,要用Proteus7.8版本:
TM1638C51仿真和程序.zip (86.13 KB, 下载次数: 202)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶 踩
回复

使用道具 举报

来自 2#
ID:262 发表于 2022-1-7 23:33 | 只看该作者
wwh2382 发表于 2020-8-3 21:03
将tm1638.dll放到models文件夹,运行仿真文件还是报错,请问该怎么办?

需要用Proteus7.5版本才行,我测试了

51hei.gif (40.84 KB, 下载次数: 140)

51hei.gif

51hei.png (30.97 KB, 下载次数: 146)

51hei.png
回复

使用道具 举报

板凳
ID:748788 发表于 2020-8-3 21:03 | 只看该作者
将tm1638.dll放到models文件夹,运行仿真文件还是报错,请问该怎么办?

回复

使用道具 举报

地板
ID:5501 发表于 2021-4-8 23:03 | 只看该作者
楼主好 最近在学习这个1638芯片,我的按键数码管是 接的GRID5 GRID8 4个数码管,这个程序该修改哪里呢
回复

使用道具 举报

5#
ID:795427 发表于 2021-12-14 17:24 | 只看该作者
这仿真电路,明显看到短路了。
回复

使用道具 举报

6#
ID:1000645 发表于 2022-1-7 23:12 | 只看该作者
非常不错
回复

使用道具 举报

7#
ID:1004029 发表于 2022-2-3 20:55 | 只看该作者
将tm1638.dll放到models文件夹,运行仿真文件还是报错,请问该怎么办?
回复

使用道具 举报

8#
ID:262 发表于 2022-2-4 06:11 | 只看该作者
mengfanhua2022 发表于 2022-2-3 20:55
将tm1638.dll放到models文件夹,运行仿真文件还是报错,请问该怎么办?

需要用Proteus7.5这个版本 其他都不行  你看我在楼上发的动图
回复

使用道具 举报

9#
ID:967056 发表于 2022-12-4 10:12 | 只看该作者
唉,没首先自己实践一遍,看了大家的加复就安装了个7.5版本,后来事实证明8.13版本是可以仿真的!不知道那些说只有7.5能仿真的人是咋操作的
回复

使用道具 举报

10#
ID:14806 发表于 2023-2-2 14:52 | 只看该作者
不知道能不能仿真成功?
回复

使用道具 举报

11#
ID:981841 发表于 2023-4-19 16:44 | 只看该作者
仿真出错误是为什么
回复

使用道具 举报

12#
ID:13282 发表于 2024-3-22 22:24 | 只看该作者
8.7 SP3 仿真成功!
回复

使用道具 举报

13#
ID:1112584 发表于 2024-4-19 16:43 | 只看该作者
tm1638.dll是怎么做出来的?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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