Arduino-Proteus仿真05-分立式数码管循环显示0~9
设计者:STCode(公众号同名)
前言:
Proteus是英国Labcenter公司开发的电路分析与实物仿真及印制电路板设计软件,它可以仿真、分析各种模拟电路和集成电路,其提供了大量模拟与数字元器件及外部设备,以及各种虚拟仪器(如电压表、电流表、示波器、逻辑分析仪、信号发生器等),特别是它具有对单片机及其外围电路组成的综合系统交互仿真功能,
目前,Proteus仿真系统支持的主流单片机有ARM7(LPC21xx)、8051/52、AVR、PIC 10/12/16/18/24、MSP430、CotexM0/M3、HC11等,其支持的开发环境有Keil u Vision2/3/4、MPLAB、Atmel Studio等。
提示:
Proteus仿真Arduino中,关于所需硬件获取、软件编译、HEX文件获取、代码导入等问题请参考文章:Arduino-Proteus仿真01-LED灯闪烁
1) 描述
数码管可以分为共阳数码管和共阴数码管两种,本例中使用的是共阳数码管,因此将公共端接到Arduino的+5V上。单个数码管中有7颗led,当显示数字“8”的时候将点亮所有7颗led。仿真电路中,单只共阳数码管的名称为 “7SEG-COM-AN-GREEN”,7SEG代表7段,COM-AN代表的是共阳,GREEN表示led颜色为绿色;共阴数码管组件的名称为“7SEG-COM-CAT -GREEN”。
2) 元器件选择
·ATMEGA328P
·7SEG-COM-AN-GREEN
·RX8
·LED-YELLOW
·RES(220O欧姆)
在元件模式中点击P选项,在元件库中搜索所需的元件名称,双击后便可添加到元件清单中。
3) 电路连接
从电路连接图上可以看到,单只数码管的公共端连接到VCC,其余7个引脚,先连接到330欧姆的排阻上,再分别接到Arduino的引脚上,分别连接0~6号IO口。
这里说明一下,单只共阳数码管的段码标号如下图。其中abcdefg分别对应接到了Arduino的0~6,如果想让数码管显示1,只需要将b、c两个led引脚拉低即可,其他位均拉高电平,用2进制表示为11111001,对应的16进制数据为0xF9,
大家可以打开自己电脑的计算器,转换为程序员模式,看看二进制数据与16进制数据的转换。
4) 程序设计
5) const uint8_t CA_SEGCODE[] =6) { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};7) int i,j;8) //用数组指定7段数码管所连接的引脚9) int ledPins[] = { 0, 1, 2, 3, 4, 5, 6, 7 };10)11) void setup()12) {13) for(int i=0;i<8;i++)14) pinMode(ledPins[i],OUTPUT);15) }16)17) void loop()18) {19) for(i=0;i<10;i++)20) {21) for(j=0;j<7;j++)22) {23) if((CA_SEGCODE[i] >> j) & 0x01 == 1)24) digitalWrite(ledPins[j],HIGH);25) else26) digitalWrite(ledPins[j],LOW);27) }28) delay(1000);29) }30) }31)
程序说明:
源程序中先定义一个数组,用来存放显示0-9的数据;
之后定义led引脚数组,方便之后对其进行引脚的模式设置和操作对应引脚的电平
if((CA_SEGCODE[i] >> j) & 0x01 == 1)
digitalWrite(ledPins[j],HIGH);
else
digitalWrite(ledPins[j],LOW);
通过数据的移位并与0x01进行与操作,当比较的位的数据为1,则拉高对应的引脚,因此该led不亮,当比较的位的数据为0,则拉低对应引脚的电平,led亮起。
5) 软件操作
程序编写完成后点击Arduino IDE编译器的文件—首选项,将编译选项勾选上。点击好以后进行编译,编译完成后复制HEX文件所在的路径,复制完成后返回Proteus软件,双击Arduino控制板,在Program File处粘贴HEX文件的路径。点击确定以后即可进行仿真,点击Proteus软件下方运行仿真按钮,可以看到仿真的效果。