这个是LED彩灯设计,详情见附件
仿真图(proteus仿真工程文件可到本帖附件中下载):
单片机源程序如下:
- #include <reg52.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar a ;
- void delayms(uint ms) //延时
- {
- uint i;
- while(ms --)
- {
- for(i=0;i<120;i++);
- }
- }
- void LED1(void) //左移花样
- {
- uchar i,j;
- j=0x01;
- for(i=0;i<8;i++)
- {
- P0=~j;
- delayms(250);
- j=j<<1;
- }
- }
- void LED2(void) //右移花样
- {
- uchar i,j;
- j=0x80;
- for(i=0;i<8;i++)
- {
- P0=~j;
- delayms(250);
- j=j>>1;
- }
- }
- void LED3(void) //拉幕式与闭幕式花样
- {
- uchar i,j,k,LED; //拉幕开始参数式设置
- j=0x10;
- k=0x08;
- for(i=0;i<4;i++)
- {
- LED=j|k;
- P0=~LED;
- delayms(250);
- j=_crol_(j,1);
- k=_cror_(k,1); //循环左移一位
- }
- LED=0xFF;
- P0=~LED;
- delayms(250);
- j=0x80;
- k=0x01; //闭幕式开始参数设置
- for(i=0;i<4;i++)
- {
- LED=j|k;
- P0=LED;
- delayms(250);
- j=_cror_(j,1)+0x80;
- k=_crol_(k,1)+0x01; //循环左移一位
- }
- }
- void int_1()interrupt 2
- {
- delayms(100);
- if(INT1==0);
- {
- a++;
- if(a>3);
- {
- a=1;
- }
- }
- }
- void INT1_init(void) //初始化
- {
- EX1=1; //打开外部中断1
- IT1=1; //下降沿触发中断INT1
- EA=1; //全局中断允许
- }
- void main(void)
- {
- INT1_init();
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
我的作品.zip
(52.66 KB, 下载次数: 23)
|