基于51单片机的流水灯设计

基于51单片机的流水灯设计三个按键:A按键启动、B按键控制不同流水速度(低中高)、C按键设计思路一(未用中断):8个LED灯正极解电源,负极接单片机I/O口。死循环:设置P2口为11111110,使用左移函数,循环七次。同时每次位移中间加入延时函数。三个按键:A按键启动、B按键控制不同流水速度(低中高)、C按键控制流水灯暂停蜂鸣器长响:思路一:设置一个变量i,起初为0,按下A键后为1;当i为1进入死循环设置变…

大家好,又见面了,我是你们的朋友全栈君。

三个按键:A按键启动、B按键控制不同流水速度(低中高)、C按键

设计思路一(未用中断):
8个LED灯正极解电源,负极接单片机I/O口。
死循环:设置P2口为11111110,使用左移函数,循环七次。
同时每次位移中间加入延时函数。
三个按键:A按键启动、B按键控制不同流水速度(低中高)、C按键控制流水灯暂停蜂鸣器长响:
思路一:设置一个变量i,起初为0,按下A键后为1;当i为1进入死循环
设置变量j,按下B,j++,当j大于3,j=j-3;使用j*1000,来空置循环函数的延时时间。设置bit变量s=0,按下按键C,s++,当s=1,j进入循环蜂鸣器响,s=0退出循环。
在每次延时时检查按键

#include<reg52.h>
#include<intrins.h>
typedef unsigned int u16;
typedef unsigned char u8;
u8 j=1;

#define LED P2

sbit K1=P3^1;
sbit K2=P3^0;
sbit K3=P3^2;
sbit BUZ=P1^5;


void delayk(u16 i)       //延时函数快,
{   
    while(i--);
	
}


void delay()       //延时函数
{
	void key2();
	void key3();
	u16 y;
	switch(j)
	{
		case 1:for(y=10000;y>0;y--){key2();key3();}break;
		case 2:for(y=20000;y>0;y--){key2();key3();}break;
		case 3:for(y=40000;y>0;y--){key2();key3();}break;
		
		
	}

}

void key2()
{
	if(K2==0)
		{
			delayk(1000);
			if(K2==0)
			{
			++j;
			}
			if(j>3) { j=j-3;}
		}
		while(!K2);
	}

void key3()
{
	u8 i;
	if(K3==0)
		{
			delayk(1000);
			if(K3==0)
			{ 
        i=1;				
				while(i)			
				{
					BUZ=0;
					while(K3==1&&i==1)
					{
			        if(K3==0)
								{
								delayk(1000);
			          if(K3==0)
		            {
			            i=0;BUZ=1;while(!K3);
				          }
								}
							}
							}
							}
						}
}
				
			

void pamadeng()
{ 
	u8 i;
	while(1)
	{ 
		key2();
		key3();
		LED=0XFE;    //1111 1110
		  delay();
		for(i=0;i<7;i++)
		{
			key2();
			key3();
			LED=_crol_(LED,1);   
		  delay();
		
		}
   }
}
	

	
void main()
{
	while(1)
	{
		if(K1==0)
		{
			delayk(1000);
			if(K1==0)
			{
				pamadeng();
			}
		}
	}
}

设计思路二:(使用中断)
设置一个变量i,起初为0,按下A键后为1;当i为1进入死循环
设置变量j,按下B,进入中断2,当j大于3,j=j-3;使用j*1000,来空置循环函数的暂停时间。设置bit变量s=0,按下按键C,进入外部中断0,s++,当s=1,j进入循环蜂鸣器响,s=0退出循环。

#include<reg52.h>
#include<intrins.h>

typedef unsigned int u16;
typedef unsigned char u8;
typedef bit u1;

#define LED P2

sbit K1=P3^0;        //2号开关
sbit K2=P3^3;        //4号开关
sbit K3=P3^2;        //3号开关
sbit BUZ=P1^5;       //蜂鸣器

u8 j=1;              //用于记录K2按键
void delay(u16 i)
{
	while(i--);       
}

void open02()        //打开外部中断0,2
{
	EA=1;              //总中断
	EX0=1;              //打开外部中断0
	IT0=1;             //边沿触发方式
	EX1=1;              //打开外部中断1
	IT1=1;             //边沿触发
}

void pamadeng()                 //控制跑马灯跑动
{ 
	u8 i;
	while(1)
	{
		LED=0XFE;    //1111 1110
    delay((j*20000));
		for(i=0;i<7;i++)
		{
			LED=_crol_(LED,1);   
		 delay((j*20000));
		}
	}
}


void main()
{
	open02();
	while(1)
	{
		if(K1==0)
		{
			delay(1000);
			if(K1==0)
			{
				pamadeng();
			}
    }
	}
}

void key2() interrupt 2    //外部中断1,记录按键2次数
{
	delay(1000);             //消抖
	if(K2==0)
		++j;
	if(j>3)
		j=j-3;
}

void key3() interrupt 0     //外部中断0,跑马灯暂停
{
	delay(1000);                   //消抖
	if(K3==0)
	{
		u1 k=1;              //用于记录K3按键
		BUZ=0;
		while(k)
		{ 
			
			while(K3==1&&k==1)
			{
				if(K3==0)
				{
					delay(1000);           //消抖
					if(K3==0)
					{
						k=~k;BUZ=1;          //关闭蜂鸣器
						while(!K3);          //确认按键松开
					}
				}
			}
		}
	}
}


学习收获:
单片机:集成电路芯片;计算机部件集成;

模电:
半导体:原子最外层电子4个(既易得电子又易失电子,硅、锗),
二极管:掺杂正极性P,掺杂负极性N。LED,掺杂加入通电发光物质,长脚正,短脚负,正极里面东西小,负极大;稳压管,反接稳压。P中空穴多,P中电子多。但是电场方向是N指向P。
三极管:NPN,B高电平连通(箭头指向外);PNP,B低电平连通。C高,E低(箭头指向内)
场效应管:FET
芯片:www.alldatasheetcn.com
运算放大器,比较器
上面有一横低电平有效,无一横高电平有效

数电:
TTL:5高0低(大于2高,小于0.8低)
COMS:
HVCMOS:3.3高0低(大于1.7高,小于0.7低)
LVCMOS:2.5高0低
RS232电平通信:
负逻辑:+12低电平,-12高电平

Long 32位(51) 32位VC与int无区别 int 16位 short 16位 char 8位
float 32位 double 64位
sbit:特殊功能位声明
bit:位变量声明

ROM 掉电不丢失(只读不写)
RAM 掉电丢失

P3.0 RXD串行口输入
P3.1 TXD串行口输出
(通信)
P3.2 INT0外部中断0输入
P3.3 INT1外部中断1输入
P3.4 T0定时器0外部输入
P3.5 T1定时器1外部输入
P3.6 WR外部写控制
P3.7 RD外部读控制

震荡周期,时钟周期:晶振提供
状态周期:时钟周期的两倍
机器周期:CPU完成一个独立操作;六个状态周期,十二个震动周期
指令周期:CPU完成一条指令所需要的全部时间;每条指令执行时间都是由一个或几个机器周期组成,MCS-51有单,双,四周期指令

对I/O口的控制
上(下)拉电阻,将不确定的信号全部转化高(低)电平

电源电路:
复位电路:高电平复位(上电复位(启动复位),手动复位)
复位电路中电容作用:
在这里插入图片描述

电容主要对于上电复位:单片机上电,给电容充电,电路导通,RST高电平,电容充满后,电路不导通,RST 低电平。完成复位

时钟电路:
下载电路:

I/O口

在这里插入图片描述

延时函数:
Void delay(unsigned int i)
{

While(i–)
}
当i=1时大概是10微秒

中断:
外部中断0,INT0 P3.2
定时器中断0,T0 P3.4
外部中断1,INT1 P3.3
定时器中断1,T1 P3.5
RX,TX P3.0 P3.1

后期计划:
继续巩固51的学习,同时进入STM32的学习

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/135637.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • vue中map用法_vue里面的meta用法

    vue中map用法_vue里面的meta用法后端给我返回格式是这样[‘2018-8-14’,‘2018-8-14’]但是我是想要{date:“2018/08/13”,title:“”}{date:“2018/08/14”,title:“”}这样的格式一段代码搞定letarr=res.data;letnewArr=arr.map(val=&gt;{…

  • pytorch Dataset, DataLoader产生自定义的训练数据「建议收藏」

    pytorch Dataset, DataLoader产生自定义的训练数据「建议收藏」pytorchDataset,DataLoader产生自定义的训练数据目录pytorchDataset,DataLoader产生自定义的训练数据1.torch.utils.data.Dataset2.torch.utils.data.DataLoader3.使用Dataset,DataLoader产生自定义训练数据3.1自定义Dataset3.2Da…

  • 硬盘没有初始化怎么恢复数据_初始化磁盘崩溃转储怎么处理

    硬盘没有初始化怎么恢复数据_初始化磁盘崩溃转储怎么处理没有初始化是因为分区表损坏了,导致硬盘出现没有初始化。磁盘显示没有初始化恢复数据办法工具/软件:光明数据恢复软件步骤1:软件运行后,直接双击需要恢复文件的磁盘。步骤2:坐等软件扫描完毕大概需要几分钟到半个小时,稍微耐心等下即可。步骤3:勾上所有需要恢复的数据,然后点右上角的保存,《另存为》按钮,将勾上的文件COPY出来。步骤4:等待软件将资料复制完成就可以了。注意事项1:没有初始化恢复出来的资料需要暂时保存到其它盘里。注意事项2:想要恢复没有初始化需要注意,在文件找到之前,不要

  • Python求解两数之和[通俗易懂]

    Python求解两数之和[通俗易懂]题目描述:写一个函数,此函数要实现以下功能:给一个列表,并且给一个目标数字,如果列表里的两个数字之和等于目标数字,返回那两个数字的索引值。比如,给定列表[3,5,7,14],目标数字是10,那么返回[0,2],0是3的索引,2是7的索引,3+7=10.注意,不可以重复利用列表中的某个数字,比如返回[1,1]是不能接受的。一、两层for循环遍历列表思路:先拿出列表里的第0个数…

  • 我的世界java手机_我的世界java手机版

    我的世界java手机_我的世界java手机版我的世界java手机版是一款非常好玩的模拟经营游戏,游戏非常的自由,你几乎可以在游戏中干任何事,你可以自己建造一个世界,或是制作一个像素版的动漫人物,你还可以探索这个世界,寻找资源,你还可以和好友一起在这里进行对抗,你还在等什么,赶快来体验吧!我的世界java手机版游戏特色没有华丽的画面,没有什么游戏特效但是它最大的优势就是在于它的游戏性玩家在一个完全开放的世界,可以完全按照自己的想法建造我的世界…

  • IDataParameter调用存储过程

    IDataParameter调用存储过程

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号