跑马灯电路板仿真

222222.gif

工具

Proteus:MCU仿真软件

ICC AVR : AVR单片机代码编写软件

元器件

ATMEGA-8 :AVR MCU

LED:发光二极管

电源:这里用VCC代替

元器件在proteus的名字

LED-RED

ATMEGA8

CHIPRES470R

这里的VCC是逻辑端子,没有具体的物理(实体)模型,只是电路图中代表电源,所有取名一样的端子将会在PCB中进行连接。另外电路图中没有加入电阻,所以对二极管的输入电流没有做控制,实际操作中需要加上的。另外还有物理端子,代表有实体的物理模型。

ATMEGA-8上面有很多的输入输出(I\O)端口,这里用的是PD1、PD3、PD4端口。代码使用ICC AVR 来编写,不同的版本有不同的书写方式。新版本好像套了一个开源的编辑器,旧的版本还是自己的编辑器。大概了解一下就可以了。然后就是编译输出为HEX,这些设置都可以在Project---Option里进行设置。

微信截图_20190920144931.png

还有需要注意的是ICC AVR 编辑器需要先新建工程,才能编译文件。不新建工程的话,即使代码写完,也无法编译。

跑马灯代码

#include <iom8v.h>
void delay_1ms(void){
    unsigned int i;
    for(i=1;i<(unsigned int )(1144-2);i++);
} 
void delay_1ma(unsigned int n){
    unsigned int i=0;
    while(i<n){
        delay_1ms();
        i++;
    }
}
void main(){
    unsigned char i;
    DDRD=0xFF; //设置D端口为输出模式 还有输入模式0xFF
    while(1){
        PORTD =~(1<<1); // << 是位移操作 相应位置对应的端口 1000 : 1<<4 即第四位  
        delay_1ma(30); // 延迟
           PORTD =~(1<<3);  
            delay_1ma(30);
            PORTD =~(1<<4);
            delay_1ma(30);
    }
}

关于输出高电平点亮led的解释

0824ab18972bd4079415dc097d899e510eb30977.png

 当I/O口输出高电平时,LED两端的电位相同,因此电压为0V,不能构成电流回路,所以LED不亮。当I/O口输出低电平时,LED左侧电位为0,而右侧则在R1的上拉作用下电位提高,因此LED两端有正向电压,可以点亮发光。

  MCS-51单片机的I/O口具有比较强的灌电流能力,但拉电流能力却很弱,所以并不适合用输出高电平的方法点亮LED,大多采用这种负逻辑的驱动方法。


为了更好的理解下面是说明书中的内容

本节所有的寄存器和位以通用格式表示:小写的 “x” 表示端口的序号,而小写的 “n” 代表

位的序号。但是在程序里要写完整。例如, PORTB3 表示端口 B 的第 3 位,而本节的通

用格式为 PORTxn。物理 I/O 寄存器和位定义列于 P63“I/O 端口寄存器的说明 ” 。

每个端口都有三个 I/O 存储器地址 : 数据寄存器 – PORTx、 数据方向寄存器 – DDRx 和端

口输入引脚 – PINx。数据寄存器和数据方向寄存器为读 / 写寄存器,而端口输入引脚为只

读寄存器。但是需要特别注意的是,对 PINx 寄存器某一位写入逻辑 "1“ 将造成数据寄存

器相应位的数据发生 "0“ 与 “1“ 的交替变化。当寄存器 MCUCR 的上拉禁止位 PUD 置位

时所有端口引脚的上拉电阻都被禁止。

编译好HEX文件以后,双击proteus仿真软件中的MCU ATmega8 图形 然后选择这个HEX。

微信截图_20190920151047.png

然后点击仿真就可以了 ,电源VCC逻辑端子的话,可以点击终端模式选择POWER就可以了。


个人理解,如有错误还望指出。


跑马灯电路板仿真


本站如无特别说明即为原创,转而告知:(https://iwonmo.com/archives/1615.html)

标签: none

仅有一条评论

  1. repostone repostone 回复 2019-09-21 16:43

    看不懂,图倒是做得不错。

添加新评论