AVR第7课:动态数码管

发布者:独享留白1028最新更新时间:2020-07-24 来源: 51hei关键字:AVR  动态数码管  变量 手机看文章 扫描二维码
随时随地手机看文章

动态数码管。



/*

*author:ChenLu

*date:2014.11.20

*/


//input the head file so that the program can work normally

//iom16v---know the register

//macros---know the BIT(x)

#include

#include

//use those can make your study very conveninet

#define uint unsigned int

#define uchar unsigned char


//display methods 

void initSystem();

void delay();


//display the variable data

uchar flag;

uchar table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};


//the main function

void main()

{

  //init your system

initSystem();

while(1)

{

  //start your function,and this is core solution

for(flag=0;flag<8;flag++)

{

    PORTC = ~(PORTC | BIT(0));

    PORTA = table[flag]; 

    PORTB = ~BIT(flag);

    PORTC = PORTC | BIT(0);

    delay();

}

}

}


//the method of init system

void initSystem()

{

  //control PA

DDRA = 0xFF;

PORTA = table[0];

//to make PB port output 

DDRB = 0xFF;

//to make PB port output high level

PORTB = 0xFE;

//control PC0

DDRC = DDRC | BIT(0);

PORTC = PORTC | BIT(0);

}


//the sub method of delay

void delay()

{

  uint i,j;

  for(i=0;i<10;i++)

  for(j=0;j<5;j++);

}

不断改变delay()函数中变量的值,会出现不一样的效果。主要是熟悉AVR单片机IO口的使用。


关键字:AVR  动态数码管  变量 引用地址:AVR第7课:动态数码管

上一篇:AVR--I/O端口寄存器
下一篇:AVR开发 Arduino方法(六) 内存子系统

推荐阅读最新更新时间:2024-11-13 13:58

非接触ID卡程序(AVR与em4095)
/* 在提取出同步时钟信号后,就可以通过检测出两个上升沿(或下降沿)的时间间隔来提取数据了。 两个上升沿(或下降沿)的时间间隔总共有t=T’,t=1.5T’,t=2T’三种情况。 如果检测到两个上升沿之间的间隔t=T’时,则收到一个与前一个逻辑值相同的数据, 在b上升沿之后t=T’时间的的c处检测到上升沿,得到与前一个逻辑值con_receive相同的数据1。 将此数据存放入存储器中,并同时将当前逻辑值1赋给状态位con_receive; 如果检测到两个上升沿之间的时间间隔t=1.5T’时,两种情况:当前一个数据值con_receive为1时,得到两个数据00,并将逻辑值0赋给con_receive;当前一个数据为0时,得到一
[单片机]
学习AVR(九) 指令执行的时序
该部分对指令执行的一般访问时序作了讲解。AVR CPU由CPU时钟clkCPU驱动,clkCPU直接由为芯片所选的时钟源产生。片内没有使用时钟分频电路。 图6所示为并行的指令读取和指令执行,源于Harvard架构和快速访问寄存器堆的概念。这是基本的流水操作的概念,最高可以获得1MIPS/MHz (每兆Hz每秒百万条指令)的执行速度,相应的可以实现单位成本、单位时钟和单位功率功能的最优化。 图6. 并行的指令读取和指令执行 图7所示为寄存器堆的中断时序概念。在一个单时钟周期内,一条使用两个寄存器操作数的ALU运算被执行,并将结果存回目标寄存器 图7. 单周期ALU运算
[单片机]
学习<font color='red'>AVR</font>(九) 指令执行的时序
使用Atmel Studio7和USBasp烧写器烧写AVR单片机
很多教程中都提供使用Atmel Studio和MKII对AVR单片机进行烧写,但民间使用最多的烧写器是物美价廉的USBasp,10元左右的价格比200元的MKII亲民多了。但是在Atmel Studio中不可以直接使用USBasp进行烧写,于是通常需要借助其他软件,带来更多麻烦。 本文通过Atmel Studio的External Tools和Avrdude软件,达到可以在Atmel Studio中直接烧写单片机的目的。这样可以在开发环境中完成编程、编译和烧写,非常方便。 第一步:你需要有一个USBasp以及其驱动,驱动程序在网络上铺天盖地,在购买模块的时候向店家索要也可。在设备管理器中可以通过设定驱动搜索的路径来安装驱动
[单片机]
使用Atmel Studio7和USBasp烧写器烧写<font color='red'>AVR</font>单片机
与传统单片机相比AVR有哪些提高和改善
  AVR与传统类型的单片机相比,除了必须能实现原来的一些基本的功能,其在结构体系、功能部件、性能和可靠性等多方面有很大的提高和改善。   但使用更好的器件只是为设计实现一个好的系统创造了一个好的基础和可能性,如果还采用和沿袭以前传统的硬件和软件设计思想和方法的话,是不能用好AVR的,甚至也不能真正的了解AVR的特点和长处。   功能越好的器件,需要具备更高技术和能力的人来使用和驾驭它。就象一部好的F1赛车,只有具备高超技术的驾驶员才能充分体会到车的特点,并能最大限度的发挥出车的性能。   AVR具有上手入门快,开发方便简单的特点,但要充分体会和发挥AVR的优点,还需要应用工程师本身的硬软件设计开发能力的不断学习、实践提高。
[单片机]
8051单片机实战分析(以STC89C52RC为例) | 06 - 动态数码管驱动
1 动态扫描 那什么是动态扫描呢? 举个例子:有 2 个数码管,我们要显示“12”这个数字,可以先让高位的位选三极管导通,然后控制段选让其显示“1”,延时一定时间后再让低位的位选三极管导通,然后控制段选让其显示“2”。把这个流程以一定的速度循环运行就可以让数码管显示出“12”,由于交替速度非常快,人眼识别到的就是“12”这两位数字同时亮了。 在多个数码管显示数字的时候,我们可以轮流点亮数码管(一个时刻内只有一个数码管是亮的),利用人眼的视觉暂留现象(也叫余辉效应),就可以做到看起来是所有数码管都同时亮了,这就是动态显示,也叫做动态扫描。 那么一个数码管需要点亮多长时间呢?也就是说要多长时间完成一次全部数码管的扫描呢(很
[单片机]
8051单片机实战分析(以STC89C52RC为例) | 06 - <font color='red'>动态</font><font color='red'>数码管</font>驱动
基于PWM功能的AVR单片机定时计数器设计要点
一、定时/计数器PWM设计要点 根据PWM((脉宽调制(PWM:(Pulse Width Modulation)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的模式))的特点,在使用ATmega128的定时/计数器设计输出PWM时应注意以下几点: 1.首先应根据实际的情况,确定需要输出的PWM频率范围,这个频率与控制的对象有关。如输出PWM波用于控制灯的亮度,由于人眼不能分辨42Hz以上的频率,所以PWM的频率应高于42Hz,否则人眼会察觉到灯的闪烁。 2.快速PWM可以的到比较高频率的PWM输出,但占空比的调节精度稍微差一些。此时计数器仅工作在单程正向计数方式,计数器的上限值决定PWM的频率,而比较匹配寄存器的值决
[单片机]
基于74HC595 74HC165 的AVR单片机程序例子
硬件说明:ATmega48/88/168的PB5是SPI时钟输出,接74HC595/74HC165的移位时钟输入端;PB4是SPI的MISO数据输人,接74HC165的数据输出;PB3是SPI的MOSI数据输出,接74HC595的串行数据输入端SER;PB2接74HC595/74HC165的锁存时钟输入端。 程序1:本例子是用硬件SPI接口循环发送一个变量到74HC595,并且在数据发送完毕后通过单片机的另外一个IO接口PB2输出一个 锁存 脉冲 ,使74HC595把移位寄存器的数据输出到锁存寄存器,并驱动8个LED输出,实现来回流水的效果。 //本程序在本站的 M8 V2.0 实验板 通过 // CodeWizardAVR
[单片机]
AVR移位算法详细解释
很多初学者都会被移位算法迷惑,移位算法形如(1 X)这样的形式,高手写程序时,习惯用移位算法来写出各个寄存器的使用。比如下面一段是AVR 的USART 的初始化代码。 UCSRC = (1 URSEL)|(1 UCSZ1)|(1 UCSZ0); UCSR0B = (1 RXCIE)|(1 TXCIE)|(1 RXEN)|(1 TXEN); // RXCIE=1;TXCIE=1;UDREIE=0;RXEN=1;TXEN=1 这样的写法对高手是福,这些代码里面说明了操作了寄存器的哪些位,能够看出它的操作的意义;对新手确是祸害,因为新手看不懂这样的程序。 回到开始的地方,解释一下,什么是移位算法: 如:A = (1 2)
[单片机]
<font color='red'>AVR</font>移位算法详细解释
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved