• 大小: 22KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-26
  • 语言: 其他
  • 标签: C51彩灯  

资源简介

1. 用16盏以上的LED小灯,实现至少4种彩灯灯光效果(不含全部点亮,全部熄灭); 2. 可以用输入按钮在几种灯光效果间切换; 3. 可以通过按钮暂停彩灯效果,使小灯全亮,再次按下相同按钮后继续之前的效果; 4. 增加自动在几种效果间切换的功能,并设置一个按钮可以在自动模式和手动模式间切换; 5. 使用定时中断延时。 程序中实现了十钟灯光效果,分别是: 顺时针流水灯、逆时针流水灯、交替闪烁、顺时针对角灯、逆时针对角灯、顺时针逐个点亮、顺时针逐个熄灭、逆时针逐个点亮、逆时针逐个熄灭、二进制加法。

资源截图

代码片段和文件信息

/**************************************************************************************************
模块名称:51单片机彩灯控制器
模块功能:实现十种循环彩灯控制
编写人员:mengkun  (http://mkblog.cn)
编写日期:2016/12/18
**************************************************************************************************/

#include 

#define false 0
#define true 1
#define uchar unsigned char
#define uint unsigned int

sbit pause_key = P3^0; //暂停按钮
sbit auto_key = P3^1; //手动模式的效果切换
sbit change_key = P3^2; //手动模式效果切换

sbit pauseLed = P3^6; //暂停、启动指示灯
sbit autoLed = P3^7; //自动、手动模式指示灯

int ledCode[8]={0xfe0xfd0xfb0xf70xef0xdf0xbf0x7f}; //led段码(单个显示)

int ledCode2[8]={0xfe0xfc0xf80xf00xe00xc00x800x00}; //led段码(半显示半灭)

int disCode[10]={0x030x9f0x250x0d0x990x490x410x1f0x010x09}; //数码管段码 0~9

void displayLed(void); //显示led的主函数
void keyScan(void); //键盘扫描处理函数

void Delay10ms(unsigned int n); //延时10ms

bit isPause = false; //是否暂停
bit isAuto = true; //是否自动运行
bit isChange = false; //是否要切换下一个效果

uchar time;   //计时满0.5s

uchar types; //第几种灯光显示方案
uint counts; //灯光的第几个

/******************************************************************************* 
* 函 数 名          : T0_INT
* 函数功能         : T0定时器中断函数
* 输      入         : 无
* 输      出         : 无 
*******************************************************************************/ 
void T0_INT(void)  interrupt 1

TL0= (65536-50000)/256;
TH0= (65536-50000)%256;
time ++;
if(time >= 10) //定时时间:0.5s
{
time=0;
if(isChange == true) //可以变换下一种显示效果了
{
counts = 0;
types++; //显示下一种效果
if(types > 9) types = 0; 
P0 = disCode[types]; //更新数码管显示
isChange = false;
}
displayLed();
counts++;
}
}

/******************************************************************************* 
* 函 数 名          : main
* 函数功能         : 主函数
* 输      入         : 无
* 输      出         : 无 
*******************************************************************************/  
void main(void)

TMOD=0x61; //0110 0001 //方式一

TL0= (65536-50000)/256; //50ms
TH0= (65536-50000)%256;
TR0=1; //开启T0
ET0=1; //T0中断允许

EA=1; //总中断开启

time = 0; //定时器时间扩种(0.5s)
counts = 0; //灯光的第几次
types = 0; //灯光显示模式

pauseLed = 0; //暂停指示灯灭

P0 = disCode[types]; //更新数码管显示

while(1)
{
keyScan(); //键盘扫描及处理
}
}

/******************************************************************************* 
* 函 数 名          : keyScan
* 函数功能         : 键盘扫描处理
* 输      入         : 无
* 输      出         : 无 
*******************************************************************************/  
void keyScan(void)
{
if(pause_key == 0) //按下了暂停按钮
{
Delay10ms(1);
if(pause_key == 0)
{
isPause = ~isPause;
pauseLed = isPause;
if(isPause == true)
{
ET0=0; //关闭T0中断
P0 = 0xfd; //数码管显示 “-”
P1 = 0x00; //所有的灯都亮起来
P2 = 0x00;
}else{
ET0=1; //T0中断允许
P0 = disCode[types]; //更新数码管显示
displayLed();
}
while(

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        7622  2016-12-18 15:56  main.c
     文件      118971  2016-12-18 15:51  1.DSN
     文件        3397  2016-12-18 15:42  1.hex

评论

共有 条评论

相关资源