彩灯控制单片c语言程序,用C语言实现键控彩灯系统

用按键(采用外部中断方式)控制彩灯的运行。通过按动按键,彩灯在三种闪亮方式(左移,右移和自定义花样)之间切换。

在主程序中,设置一个判断的的标志变量flag,当没有中断发生时,标志flag的值没有被改变,程序保持运行使彩灯按其中某一种花样闪亮显示。若按下键后,使单片机产生中断,中断函数被调用,则标志flag的值将发生一次改变(这里的中断函数就是修改flag的值),在退出中断后,主程序再次执行到判断标志flag时,由于标志flag的值已经是新的值,所以将执行另一彩灯控制子程序,彩灯将按另一种花样进行显示。

需要说明一点是:如果产生中断的是低电平不是由按键产生的,而是由于其他按键产生的没有抖动的信号,在中断程序中则不需要消抖处理。

源程序:

#include "reg51.h"

#define uchar unsigned char

uchar flag;

uchar light,assum;

void delay05s()

{

unsigned char i,j,k;

for(i=5;i>0;i--)

for(j=200;j>0;j--)

for(k=250;k>0;k--);

}

void delay10ms(void)

{

unsigned char i,j;

for(i=20;i>0;i--)

for(j=250;j>0;j--)

}

void left()

{

light=light<<1;

if(light==1) light=0x01;

P2=~light;

}

void right()

{

light=light>>1;

if(light==0) light=0x80;

P2=~light;

}

void assum()

{

uchar code dispcode[8]={0x7e,0xbd.0xdb,0xe7,0xdb,0xbd,0x7e,0xff};

if(assum==7) assum=0;

else

assum++;

}

void main()

{

IT0=1;

EX0=1;

EA==1;

flag=1;

light=0x01;

assum=0;

while(1)

{

switch(flag)

{

case 1: left(); break;

case 2: right(); break;

case 3: assum() break;

}

delay05s();

}

}

void int-0() interrupt 0

{

delay10ms();

if(INT0==0)

{

flag++;

if(flag>3) flag=1;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值