小弟求一AVR程序

来源:百度知道 编辑:UC知道 时间:2024/09/22 18:42:15
小弟求一ATTINY13的程序,ATTINY13的datasheet请在网上下载一下,谢谢。
PB3 PB4分别接有一个开关到VCC,
PB0 PB1分别接有一个LED到GND。
程序要求如下:
单片机上电后,当PB3为1时(也就是按一下开关),PB0亮3秒(输出1),熄灭;
当PB4为1时,PB1亮3秒,熄灭。再按PB3的开关,PB0亮3秒,熄灭;再
按PB4的开关......循环往复......(上电后哪个开关先起作用不限)

请注意:
1,按了某个开关,对应的灯亮过后,如果再按此开关,则此灯
不能再亮。必须轮到按另一个开关,另一个灯亮过后,再按第一个开关才有效。
2,假如按了开关A,对应的灯亮过后,断电,再上电,这时再按开关A,则对应的
灯不会亮。也必须轮到按另一个开关,另一个灯亮过后,再按开关A才有效。

请使用内部晶振和内部复位

高电平触发好像要设置一下单片机内部的上拉下拉电阻。谢谢!

这个程序貌似搞的跟按键互锁似的,其他都很简单,就这个互锁稍稍有点麻烦,不过咱还是能给你解决的。按键采用低电平触发。程序如下:
#include <iot13v.h>
#include <macros.h>

#define uchar unsigned char
#define uint unsigned int

#define s1 (PINB&0x08) //按键1定义PB3口
#define s2 (PINB&0x10) //按键2定义PB4口
#define led1_on PORTB|=0x01
#define led2_on PORTB|=0x02
#define led1_off PORTB&=0xfe
#define led2_off PORTB&=0xfd
#define xtal 8 //定义晶振频率8MHz,这个可根据自己的需要去改

uchar s1_flag=1 ; //按键1使能
uchar s2_flag=1 ; //按键2使能

void delay_1ms(void);
void delay_ms(uint k);
void s1_scan(void);
void s2_scan(void);
void key_scan(void);

void delay_1ms(void)
{
uint i;
for(i=0;i<(xtal*143-2);i++)
{
NOP();
}
}

void delay_ms(uint k)
{
uint i;