|
AVR单片机实现键控灯的设计
前一课中,我们学习了用AVR单片机实现流水灯的过程,下面我们将通过一个例子继续学习如何用AVR单片机的输入引脚来控制输出。 1.硬件连接 ATMEGA8515的PORTD引脚中的PD2、PD3、PD4、PD5四个引脚分别接有按钮,按钮按下时,这几个引脚分别接地。PB口共接有8个发光二极管。 2.功能要求 这个程序的要求很简单,开机后,所有灯均不亮,按下按钮后,相应的LED发光,例如:PD2上所接的按钮按下时,PB2上所接的LED发光,PD3上所接的按钮按下时,PB3上所接的LED发光,依此类推。 3.程序实现 /************************************************** ; 平凡单片机工作室 ; http://www.mcustudio.com ; Copyright 2004 pingfan's McuStudio ; All rights Reserved ;作者:周坚 ;jkd.c ;键控灯程序,用于AT89S8515或者ATMEG8515,在DSB-1A型实验板上实现 **************************************************/ #include "avr/io.h" static void io_init(void) { //PortB Set PORTB = 0xff; DDRB = 0xff; // PortD PORTD = 0xFF; DDRD = 0x0; }
int main(void) { io_init(); while(1) { PORTB=PIND; //读引脚 } } 4.程序分析 ATMEGA8515的引脚既可作为输入又可作为输出,与51单片机不同,IO口作为输入或者输出时,首先设置相应的寄存器。这里将PORTB设置为输出,PORTD设置为输入。设置为输入引脚时,同时将PORTD置为0XFF,这是要求AVR向输入引脚提供一个弱上拉,这种用法与80C51的特性类似。如果此时设置PORTD=0,那么PORTD将为高阻态,必须在外电路明确地提供上拉或下拉电阻,以确定其电平,而我们的电路中并未接上拉电阻,所以不能用这种方式。 主程序非常简单,除了调用了初始化程序外,就是一行:PORTB=PIND;这是读出端口D的引脚的值,并送到端口B。注意,对于AVR单片机而言,端口有一个专门的引脚输入地址,要获得引脚的信息,必须直接读这个地址中的数据,这与80C51是不一样的。单片机之路的永久域名:www.mcuway.com |
|