利用MEGA328制作辉光数码管显示电路
简 介: 为了驱动两个辉光数码管,供有20个数字,使用MEGA32 MCU制作了一个秒表运行驱动电路板。
关键词
: 辉光数码管,IN 12,MEGA32
§01 MEGA32测试电路
前面在IN-12辉光数码管:俄罗斯进口的器件中测辉光数码管的显示性能。在 辉光 辉光数码管的驱动与响应时间测试了利用13001晶体管驱动辉光管电路。
1.1 测试MEGA32的MCU电路1
设计制作MEGA32的测试电路,是但原来的基于MEGA32的开发工具链进行测试。
1.1.1 测试电路设计
▲ 图1.1.1 原理电路图
▲ 图1.1.2 单面快速制版PCB
1.1.2 焊接制作电路
一分钟后的到电路板,进行焊接组装成测试电路板。
提供+5V工作电源,工作电流为22mA。
▲ 图1.1.3 焊接后的测试电路板
测量晶体管脚的MCU的晶振高频信号。由于这个芯片是已经编程的芯片,内部应该具有BOOTLOADER的程序。ATMEGA328实验电路板
▲ 图1.1.4 测量晶体振荡频率信号
1.2 下载程序
1.2.1 下载接口
下面是下载接口电平转换电路。根据现在的定义,可以直接按照顺序连接到现在的电路板上。
▲ 图1.2.1 下载接口转换电路
使用接口下载器连接UART1完成程序下载:
▲ 图1.2.2 使用接口下载器连接UART1完成程序下载
1.2.2 下载软件
使用MEGA328 DOWNLOAD PROGRAM:8328完成程序下载。
- 下载参数设置:
-
端口
:COM1
波特率
:115200
MCU
:MEGA328
▲ 图1.2.3 下载程序完成程序下载
1.3 建立测试软件
1.3.1 建立MEGA32的工程文件
建立新的MEGA32的工程文件。所在的目录为:
D:\zhuoqing\window\Atmel\test\2022\NIXIEMEGA32
▲ 图1.3.1 工程的选项
将下面的例程代码拷贝到所建的MEGA328工程文件中。
D:\zhuoqing\window\Atmel\UserCode\M32
▲ 图1.3.2 利用ICCV7构建MEGA328的开发工程
修改定义在control.h中的 LED 端口之后,重新编译下载执行。电路板出现闪烁过程。
▲ 图1.3.3 下载之后测试程序在闪烁
§02 辉光管数码驱动电路
2.1 电路设计
2.1.1 原理图设计
AD\Atmel\NiXieTube\NiXieTube.SchDoc
▲ 图2.1.1 控制原理图MCU M32
▲ 图2.1.2 输出控制电路
2.1.2 单面电路板设计
▲ 图2.1.3 单面板的PCB的设计
2.2 软件设计
D:\zhuoqing\window\Atmel\test\2022\NIXIEMEGA32\MAIN.C
/*
**==============================================================================
** MAIN.C : -- by Dr. ZhuoQing, 2014-2-6
**
** Description:
**
**==============================================================================
*/
//------------------------------------------------------------------------------
int putchar(char c) {
SendChar(c); // Only send the character from U
return c;
}
//------------------------------------------------------------------------------
void main(void) {
unsigned int nCount;
unsigned char ucChar;
unsigned int nIncCount;
int nNumber;
int nShowNumber;
//--------------------------------------------------------------------------
Mega32Init(); // Initialize MCU
ControlInit(); // Initialize control
CommandInit();
//--------------------------------------------------------------------------
cprint("Test MEGA32. -- by Dr.ZHUOQING.\r\n");
nCount = 0;
nIncCount = 0;
nNumber = 0;
//--------------------------------------------------------------------------
for(;;) {
if(nCount & 0x100) ON(LED);
else OFF(LED);
nCount ++;
//----------------------------------------------------------------------
if(++nIncCount >= 100) {
nIncCount = 0;
nNumber ++;
if(nNumber >= 100) nNumber = 0;
nShowNumber = 1 << (nNumber/10);
SetNum1(nShowNumber);
nShowNumber = 1 << (nNumber%10);
SetNum2(nShowNumber);
}
//----------------------------------------------------------------------
WaitTime(1);
//----------------------------------------------------------------------
if(CAN_RECE) {
ReceChar(&ucChar);
SendChar(ucChar);
ProcSerial(ucChar);
}
//----------------------------------------------------------------------
}
}
//------------------------------------------------------------------------------
//==============================================================================
// END OF THE FILE : MAIN.C
//------------------------------------------------------------------------------
- 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
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
/*
**==============================================================================
** CONTROL.H: -- by Dr. ZhuoQing, 2014-2-6
**
** Description:
**
**==============================================================================
*/
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//==============================================================================
// PORT DEFINITION
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void ControlInit(void);
//------------------------------------------------------------------------------
void SetNum1(int nNumber);
void SetNum2(int nNumber);
//==============================================================================
// END OF THE FILE : CONTROL.H
//------------------------------------------------------------------------------
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
/*
**==============================================================================
** CONTROL.C: -- by Dr. ZhuoQing, 2014-2-6
**
**==============================================================================
*/
//------------------------------------------------------------------------------
//==============================================================================
// CONTROL FUNCTION
//------------------------------------------------------------------------------
void ControlInit(void) {
OFF(LED);
OUT(LED);
OFF(TN1);
OUT(TN1);
OFF(TN2);
OUT(TN2);
OFF(TN3);
OUT(TN3);
OFF(TN4);
OUT(TN4);
OFF(TN5);
OUT(TN5);
OFF(TN6);
OUT(TN6);
OFF(TN7);
OUT(TN7);
OFF(TN8);
OUT(TN8);
OFF(TN9);
OUT(TN9);
OFF(TN10);
OUT(TN10);
OFF(TN11);
OUT(TN11);
OFF(TN12);
OUT(TN12);
OFF(TN13);
OUT(TN13);
OFF(TN14);
OUT(TN14);
OFF(TN15);
OUT(TN15);
OFF(TN16);
OUT(TN16);
OFF(TN17);
OUT(TN17);
OFF(TN18);
OUT(TN18);
OFF(TN19);
OUT(TN19);
OFF(TN20);
OUT(TN20);
OFF(TN21);
OUT(TN21);
OFF(TN22);
OUT(TN22);
OFF(TN23);
OUT(TN23);
OFF(TN24);
OUT(TN24);
}
//------------------------------------------------------------------------------
void SetNum1(int nNumber) {
if(nNumber & 0x1) ON(TN1);
else OFF(TN1);
if(nNumber & 0x2) ON(TN2);
else OFF(TN2);
if(nNumber & 0x4) ON(TN3);
else OFF(TN3);
if(nNumber & 0x8) ON(TN4);
else OFF(TN4);
if(nNumber & 0x10) ON(TN5);
else OFF(TN5);
if(nNumber & 0x20) ON(TN6);
else OFF(TN6);
if(nNumber & 0x40) ON(TN7);
else OFF(TN7);
if(nNumber & 0x80) ON(TN8);
else OFF(TN8);
if(nNumber & 0x100) ON(TN9);
else OFF(TN9);
if(nNumber & 0x200) ON(TN10);
else OFF(TN10);
if(nNumber & 0x400) ON(TN11);
else OFF(TN11);
}
//------------------------------------------------------------------------------
void SetNum2(int nNumber) {
if(nNumber & 0x1) ON(TN12);
else OFF(TN12);
if(nNumber & 0x2) ON(TN13);
else OFF(TN13);
if(nNumber & 0x4) ON(TN14);
else OFF(TN14);
if(nNumber & 0x8) ON(TN15);
else OFF(TN15);
if(nNumber & 0x10) ON(TN16);
else OFF(TN16);
if(nNumber & 0x20) ON(TN17);
else OFF(TN17);
if(nNumber & 0x40) ON(TN18);
else OFF(TN18);
if(nNumber & 0x80) ON(TN19);
else OFF(TN19);
if(nNumber & 0x100) ON(TN20);
else OFF(TN20);
if(nNumber & 0x200) ON(TN21);
else OFF(TN21);
if(nNumber & 0x400) ON(TN22);
else OFF(TN22);
}
//==============================================================================
// END OF THE FILE : CONTROL.C
//------------------------------------------------------------------------------
- 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
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
2.3 运行情况
▲ 图2.2.1 辉光管运行情况
※ 制作总结 ※
为了驱动两个辉光数码管,供有20个数字,使用MEGA32 MCU制作了一个秒表运行驱动电路板。
■ 相关文献链接:
● 相关图表链接:
- 图1.1.1 原理电路图
- 图1.1.2 单面快速制版PCB
- 图1.1.3 焊接后的测试电路板
- 图1.1.4 测量晶体振荡频率信号
- 图1.2.1 下载接口转换电路
- 图1.2.2 使用接口下载器连接UART1完成程序下载
- 图1.2.3 下载程序完成程序下载
- 图1.3.1 工程的选项
- 图1.3.2 利用ICCV7构建MEGA328的开发工程
- 图1.3.3 下载之后测试程序在闪烁
- 图2.1.1 控制原理图MCU M32
- 图2.1.2 输出控制电路
- 图2.1.3 单面板的PCB的设计
- 图2.2.1 辉光管运行情况
测试电路板AD工程文件:AD\Atmel\NiXieTube\NiXieTube.SchDoc ↩︎
文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。
原文链接:zhuoqing.blog.csdn.net/article/details/122769832
- 点赞
- 收藏
- 关注作者
评论(0)