永发信息网

求ATmega16流水灯程序

答案:4  悬赏:60  手机版
解决时间 2021-02-05 08:20
  • 提问者网友:伴风望海
  • 2021-02-05 02:05
求ATmega16流水灯程序
最佳答案
  • 五星知识达人网友:鸽屿
  • 2021-02-05 03:37

#include <D:\开发板\OK100E\程序\avr程序\OK100E.H>

void One_led(uchar number,uchar light)
{
uchar i;
if(light==TRUE) //点亮操作
{
PORTB&=~BIT(number); //输出数据
PORTC|=BIT(LEDLK); //更新数据
Delayms(5); //调整时序
PORTC&=~BIT(LEDLK); //锁存数据
}
else
{
PORTB|=BIT(number); //输出数据
PORTC|=BIT(LEDLK); //更新数据
Delayms(5); //调整时序
PORTC&=~BIT(LEDLK); //锁存数据
}
}

void All_led(uchar light)
{
if(light)
{
PORTB&=~ALLLED; //ALLLED=0xFF,使全部LED都亮
PORTC|=BIT(LEDLK); //输出数据
Delayms(5); //调整时序
PORTC&=~BIT(LEDLK); //锁存数据
}
else
{
PORTB|=ALLLED; //ALLLED=0xFF,使全部LED都灭
PORTC|=BIT(LEDLK); //输出数据
Delayms(5); //调整时序
PORTC&=~BIT(LEDLK); //锁存数据
}
}


void main()
{
Board_init();
PORTC|=BIT(BEEP);
while(1)
{
uchar i;
for(i=0;i<8;i++) //循环8次,8个LED依次点亮
{
All_led(FALSE); //全部熄灭
One_led(i,TRUE); //点亮指定的LED
Delayms(200); //延时指定的时间
}
}
}
全部回答
  • 1楼网友:愁杀梦里人
  • 2021-02-05 06:08
#include <iom8v.h> void main() {int i; DDRB = 0xFF; while (1) { PORTD=0x55; for (i=0;i<10000;i++); PORTD=0xaa; for (i=0;i<10000;i++); } }
  • 2楼网友:第四晚心情
  • 2021-02-05 05:35
include<iom16v.h> const unsigned char dis[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff}; void delay(unsigned char x)//延迟函数 {unsigned char i,j; for(i=0;i<x;i++) for(j=0;j<1140;j++); } void main(void) {unsigned char n; DDRA=0xff; while(1) { for(n=0;n<8;n++) {PORTA=dis[n]; delay(1000); } for(n=7;n>1;n--) {PORTA=dis[n]; delay(1000); } } }
  • 3楼网友:独钓一江月
  • 2021-02-05 04:05
首先这个单片机是mega8不是mega16 不过这个没影响 因为你在proteus里面选的是对的 问题出在主程序第二行 你应该将d端口设置为输出 而不是b端口 将ddrb=0xff改为ddrd=0xff即可
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯