51单片机驱动TM1638芯片+Proteus仿真

51单片机驱动TM1638芯片+Proteus仿真


  • 今天研究了一天,如何在驱动8位数码的同时,控制LED灯,就是出来不来效果,但是单步执行,可以看到LED灯能来,感觉是刷新太快了看不出效果。没有实际硬件光靠仿真有时候真的很难调试出效果,也许是软件bug的存在。

在这里插入图片描述

本案例只是修正了资料中的写显示数码管地址位显示不对应的bug。注释掉的代码比较多,主要是用来调试LED的效果时使用的测试代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

#include <REGX51.H>
#include <tm1638.h>
#include <intrins.h>
unsigned char num[8]; //各个数码管显示的值


int main(void)
{
unsigned char i;
init\_TM1638(); //初始化TM1638
for(i=0;i<8;i++)
Write\_DATA(2\*i,tab[16]);//初始化寄存器,显示"--- ----"
Delay1000ms();
for(i=0;i<8;i++){
Write\_DATA(2\*i,tab[i]);
// Write\_DATA(2\*i,tab[17]);//初始化寄存器,熄灭
//Write\_oneLED(4,1);
// for(i=0;i<8;i++){
// Write\_allLED(1<<i);
Delay1000ms();}
for(i=0;i<8;i++){
TM1638\_display\_Fix(i,12+i);
Delay1000ms();}
while(1)
{
// Write\_oneLED(4,1);
// Write\_allLED(1);
// for(i=8;i<16;i++)
// Write\_DATA(2\*i,0xc0);//初始化寄存器,显示"--- ----"
// Write\_DATA(16,0x80);
// for(i=0;i<8;i++){
// TM1638\_display\_Fix(i,18-i);
// Delay1000ms();
// }
// for(i=0;i<8;i++){
// Write\_DATA(2\*i,tab[i]);


// for(i=0;i<8;i++)
// Write\_DATA(2\*i,tab[17]);//初始化寄存器,熄灭
}
}


  • 仿真代码和程序源码
1
2
3
链接:https://pan.baidu.com/s/1Pb5C99b7e\_umWCNdMlxeig 
提取码:dq99