历史上的今天
今天是:2024年11月12日(星期二)
2019年11月12日 | avr单片机流水灯和按键抗干扰
2019-11-12 来源:51hei
第一次做。都是用的avr单片机ATMEGA16仿真。。有3个按键控制流水灯程序 和1个单片机按键抗干扰,左右按键要松开才行.
单片机源码:
#include void delay(unsigned int x) { int i,j; for(i=0;i } void button(int i) { if((PINC&(1< delay(20); if((PINC&(1< up(i); } while((PINC&(1< if((PINC&(1< delay(20); if((PINC&(1< down(i); } while((PINC&(1< delay(20); if((PINC&(1< left(i); } while((PINC&(1< } if((PINC&(1< delay(20); if((PINC&(1< right(i); } while((PINC&(1< } void down(int i) { while(i<4) { int k = i; for(i+=4;i<8;i+=4) { PORTA = 1<delay(50); PORTA = 0x00; button(i); } i-=4; for(i+=4;i<16;i+=4) { PORTB = 1<<(i-8); delay(50); PORTB=0x00; button(i); } i-=4; i=k; PORTA = 1<delay(50); button(i); } while(i>3&&i<8) { for(i+=4;i<16;i+=4) { PORTB = 1<<(i-8); delay(50); PORTB=0x00; button(i); } i-=4; for(i-=12;i<8;i+=4) { PORTA=1<delay(50); PORTA=0x00; button(i); } i-=4; } while(i>7&&i<12) { for(i+=4;i<16;i=+4) { PORTB=1<<(i-8); delay(50); PORTB=0x00; button(i); } i-=4; for(i-=12;i<8;i+=4) { PORTA=1<delay(50); PORTA=0x00; button(i); } PORTB=1<<(i-8); delay(50); PORTB=0x00; button(i); } while(i<16&&i>11) { for(i-=12;i<8;i+=4) { PORTA=1<delay(50); PORTA=0x00; button(i); } for( ;i<16;i+=4) { PORTB=1<<(i-8); delay(50); PORTB=0x00; button(i); } i-=4; } } void up(int i) { while(i<4) { PORTA=0x00; for(i+=12;i<16&&i>7;i-=4) { PORTB = 1<<(i-8); delay(50); button(i); } PORTB=0x00; i+=4; for(i-=4;i>=0&&i<8;i-=4) { PORTA=1<delay(50); PORTA=0x00; button(i); } i+=4; } while(i>3&&i<8) { for(i-=4;i>=0;i-=4) { PORTA = 1<delay(50); PORTA=0x00; button(i); } i=+4; for(i+=12;i<16&&i>7;i-=4) { PORTB=1<<(i-8); delay(50); PORTB=0x00; button(i); } PORTA=1<delay(50); button(i); } while(i>7&&i<12) { for(i-=4;i<8&&i>=0;i=-4) { PORTA=1<delay(50); PORTA=0x00; button(i); } i+=4; for(i+=12;i<16&&i>7;i-=4) { PORTB=1<<(i-8); delay(50); PORTB=0x00; button(i); } i+=4; } while(i>11&&i<16) { for(i-=4;i<16&&i>7;i=-4) { PORTB=1<<(i-8); delay(50); PORTB=0x00; button(i); } for( ;i<8&&i>=0;i-=4) { PORTA=1<delay(50); PORTA=0x00; button(i); } i+=16; PORTB=1<<(i-8); delay(50); button(i); } } void right(int i) { while(i<4) { i-=1; for(i+=1;i>=0&&i<4;i+=1) { PORTA = 1<delay(50); button(i); } i-=4; } while(i>3&&i<8) { i-=1; for(i+=1;i>3&&i<8;i+=1) { PORTA = 1<delay(50); button(i); } i-=4; } while(i>7&&i<12) { i-=1; for(i+=1;i>7&&i<12;i+=1) { PORTA = 1<<(i-8); delay(50); button(i); } i-=4; } while(i>11&&i<16) { i-=1; for(i+=1;i>11&&i<16;i+=1) { PORTA = 1<<(i-8); delay(50); button(i); } i-=4; } } void left(int i) { while(i<4) { i+=1; for(i-=1;i>=0&&i<4;i-=1) { PORTA = 1<delay(50); button(i); } i+=4; } while(i>3&&i<8) { i+=1; for(i-=1;i>3&&i<8;i-=1) { PORTA = 1<delay(50); button(i); } i+=4; } while(i>7&&i<12) { i+=1; for(i-=1;i>7&&i<12;i-=1) { PORTA = 1<<(i-8); delay(50); button(i); } i+=4; } while(i>11&&i<16) { i+=1; for(i-=1;i>11&&i<16;i-=1) { PORTA = 1<<(i-8); delay(50); button(i); } i+=4; } } void main() { int i; DDRA = 0xFF; DDRB = 0xFF; PORTC|=(1< { for(i=0;i<4;i++) { PORTA = 1<delay(50); button(i); } } }
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 03:33 编辑 来源:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3648721&bbs_page_no=1&bbs_id=9999 暑假学校里做机器人比赛,就是做出一个人型机器人来互相对打,要求无线控制的。 我因为去年做过这个 ...… 查看全部问答> |
|
应用场合不同,选择交流或直流取决于线圈,直流接触器的线圈只能通直流,交流接触器的线圈只能通交流工作。一般来说,在交流回路当中,主回路用的交流,辅助助回路一般都是从主回路上取电做控制回路,那么控制回路显然也是交流的,那么就要用交流接 ...… 查看全部问答> |
|
小弟刚上手驱动开发不久,现在用PB5.0做驱动。 现在是想按扇区读写全部的flash rom,我知道PB中有FMD_WriteSector等函数可以读写扇区,但不知道如何调用? 另外我还想问一下,用PB FOR CE5.0写的驱动能在windows mobile 上面用吗? 谢谢各位高手… 查看全部问答> |
|
#include <STM8S105C_S.h> #define uchar unsigned char #define uint unsigned int #define data_out PB_DDR|=0X04; #define data_in PB_DDR&=~0X04; #define scl_H PB_ODR|=0X02; #define scl_L PB_ODR&=~0X02; #define sda_ ...… 查看全部问答> |
|
用f123做了个电路板,用的是前2年的片子,烧写调试成功,偶然间不小心烧了片子,换了新的(刚买的),然后就提示60错误,找不到设备,请教斑竹为什么?头都大了,电路没问题的,用的是同样的电路板(同一批做的),元件也一样,是什么问题啊? 1。 ...… 查看全部问答> |
|
lowlevel_init.S的system_clock_init函数放到C语言下面实现——更好处理 在uboot原来的代码里,有系统时钟的初始化函数,在board/samsung/smdkv210/lowlevel_init.S的system_clock_init函数,我大概看了一下,寄存器不一样,而且是汇编写的,所以我就改成用c语言来实现,在BL1阶段初始化一下,BL2阶段就不用重新初始化了 ...… 查看全部问答> |




