栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

单片机调速流水灯

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

单片机调速流水灯

1.设计思想

51单片机,4个输入按钮,用来选择4种流水灯模式,流水灯的速度一直处于变化之中(程序具有高度灵活性,只需要修改编码的数组即可任意组合大多数流水灯样式)。

2.原理图


3.流程图


4.详细代码

#include "reg51.h"			 //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;

sbit K1=P1^0;//按钮
sbit K2=P1^1;
sbit K3=P1^2;
sbit K4=P1^3;

u8 mode=0;//模式
u8 time=0;//计时
u8 flag=0;
u16 code moshi1[16]={//模式1LED点亮顺序
0x7fff,
0xbfff,
0xdfff,
0xefff,
0xf7ff,
0xfbff,
0xfdff,
0xfeff,
0xff7f,
0xffbf,
0xffdf,
0xffef,
0xfff7,
0xfffb,
0xfffd,
0xfffe
};
u16 code moshi2[16]={//模式2LED点亮顺序
0x7fff,
0x3fff,
0x1fff,
0x0fff,
0x07ff,
0x03ff,
0x01ff,
0x00ff,
0x007f,
0x003f,
0x001f,
0x000f,
0x0007,
0x0003,
0x0001,
0x0000
};
u16 code moshi3[16]={//模式3LED点亮顺序
0x7fff,//01111111 11111111
0x9fff,//10011111 11111111
0xc7ff,//11000111 11111111
0xe1ff,//11100001 11111111
0xf07f,//11110000 01111111
0xf81f,//11111000 00011111
0xfc0f,//11111100 00001111
0xfc1f,//11111100 00011111
0xf87f,//11111000 01111111
0xf03f,//11110000 00111111
0xfc1f,//11111100 00011111
0xff0f,//11111111 00001111
0xffc7,//11111111 11000111
0xfff3,//11111111 11110011
0xfffd,//11111111 11111101
0xfffe
};
u16 code moshi4[16]={//模式4LED点亮顺序
0x7fff,//01111111 11111111
0x9fff,//10011111 11111111
0xc7ff,//11000111 11111111
0xe7ff,//11100111 11111111
0xf7ff,//11110111 11111111
0xf9ff,//11111001 11111111
0xfc7f,//11111100 01111111
0xfe7f,//11111110 01111111
0xff7f,//11111111 01111111
0xff9f,//11111111 10011111
0xffc7,//11111111 11000111
0xffe7,//11111111 11100111
0xfff7,//11111111 11110111
0xfff3,//11111111 11110011
0xfffd,//11111111 11111101
0xfffe
};
//定义延时数组,任意规定延时时间,时间单位10ms
u8 code time1[16]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
u8 code time2[16]={1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1};
u8 code time3[16]={2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2};
u8 code time4[16]={3,4,5,4,3,4,5,4,3,4,5,4,3,4,5,4};
//主函数
void main()
{	
	//定时器0初始化
	TMOD|=0x01;
	TH0=0xD8;	//给定时器赋初值,定时10ms
	TL0=0xF0;	
	ET0=1;//打开定时器1中断允许
	EA=1;//打开总中断
	TR0=1;//打开定时器
		  
	while(1)
	{
	if(!K1 &&(mode!=0))//模式1
		{
		mode=0;time=0;flag=0;
		while(!K1);
		}
	if(!K2&&(mode!=1))//模式2
		{
		mode=1;time=0;flag=0;
		while(!K2);
		}
	if(!K3&&(mode!=2))//模式3
		{
		mode=2;time=0;flag=0;
		while(!K3);
		}
	if(!K4&&(mode!=3))//模式4
		{
		mode=3;time=0;flag=0;
		while(!K4);
		}
	}		
}

//定时器中断
void Timer1() interrupt 3
{
	if(mode==0)//模式1
	{
		if(time
			time=0;
			P2=moshi1[flag]>>8;//点亮led
			P0=moshi1[flag];
			if(flag<15)//下一个状态,一共16个状态
				flag++;
			else
				flag=0;
		}
	}
	if(mode==1)//模式2
	{
		if(time
			time=0;
			P2=moshi2[flag]>>8;//点亮led
			P0=moshi2[flag];
			if(flag<15)//下一个状态,一共16个状态
				flag++;
			else
				flag=0;
		}
	}
	if(mode==2)//模式3
	{
		if(time
			time=0;
			P2=moshi3[flag]>>8;//点亮led
			P0=moshi3[flag];
			if(flag<15)//下一个状态,一共16个状态
				flag++;
			else
				flag=0;
		}
	}
	if(mode==3)//模式4
	{
		if(time
			time=0;
			P2=moshi4[flag]>>8;//点亮led
			P0=moshi4[flag];
			if(flag<15)//下一个状态,一共16个状态
				flag++;
			else
				flag=0;
		}
	}
	TH1=0xD8;	//给定时器赋初值,定时10ms
	TL1=0xF0;		
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/862746.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号