0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于51单片机按键控制流水灯设计

CHANBAEK 来源:头条号电子秘探 作者:头条号电子秘探 2023-03-23 15:50 次阅读

遇到一个问题,如何按键按下既能控制流水灯又能把键值在数码管中显示呢?流水灯500ms的延时,和数码管动态刷新延时小于10ms显示有冲突。

bit和sbit,sfr都是C51扩展的变量类型,不是标准C语言类型

1.bit类型的值是一个二进制位,不是0就是1,类似布尔类型

2.sbit大部分是用在寄存器中的,方便对寄存器的某位进行操作的。

sbit LED1 = P0^0 把P0端口的第0位命名为LED1,方便使用

sbit 位变量名=SFR 名称^变量 位地址值

3.sfr也是一种扩充数据类型:,占用一个内存单元,利用它可以访问51单片机内部的所有特殊功能寄存器。如用sfr P1 = 0x90 指定P1来操作地址为0X90的寄存器

改变流水灯的方向

按键控制流水灯实现的功能:

1.key1启动键,首次按下可以产生自上向下的流水灯效果

2.key2停止键,按下可以终止流水灯的运动

3.key3和key4分别产生自上向下和自下向上的流水灯效果

实现的方法:

1.利用标志位Startflag来控制流水灯的开始和停止,初始化定义为0停止,为1时上电便有流水灯效果。用标志位UpDownflag控制流水灯的方向,初始化的值0,1来控制自上而下还是从下到上

2.利用移位运算符实现流水灯效果

注意:移位运算符实现循环移位才能实现流水灯的效果

C51库函数自带循环移位的效果:crol 循环左移 _cror_循环右移

按键应用层功能函数

void Key_Service()
{
	switch(Key_Scan())
	{
		case 1: Startflag = 1;break;//开始
		case 2: Startflag = 0;break;//停止
		case 3:	UpDownflag =1;break;//向上流水灯
		case 4: UpDownflag =0;break;//向下流水灯
		default :break;
	}
	if(Startflag) 
	{
		
		P0 = temp;
		if(UpDownflag)
		{
			
			temp = (temp>>1)|0x80;  //右移一位
			if(temp == 0xff) //条件判断给temp重新赋值,实现循环移位功能
				temp = 0x7f; 
		
		}
		else
		{
			temp = (temp<<1)|0x1;//左移一位
			if(temp == 0xff) //条件判断给temp重新赋值,实现循环移位功能
				temp = 0xfe;
			
		}
		DelayXms(500);
	}
	
}

自己遇到的一个问题:按键按下既能控制流水灯又能把键值在数码管中显示

2个功能分开都能正确运行

糅合在一起就会出问题。

因为延时500ms数码管动态刷新有问题

void main()
{
	LEDBuf[0]=23;
	LEDBuf[1]=23;
	LEDBuf[2]=23;
	
	while(1)
	{
		Key_Service();
		
		Didplay_Service();
	}

}

void Didplay_Service()
{
	switch(Key_Scan())
	{
		case 1:LEDBuf[3]=1;break;
		case 2:LEDBuf[3]=2;break;
		case 3:LEDBuf[3]=3;break;
		case 4:LEDBuf[3]=4;break;
		default :break;
	}
	Display();	
}

如果删除500ms的延时,显示效果是这样的.

加上500ms延时,按键好像失效似的,返回显示的键值也不对,很奇怪的问题。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620834
  • 寄存器
    +关注

    关注

    30

    文章

    5028

    浏览量

    117720
  • 数码管
    +关注

    关注

    31

    文章

    1827

    浏览量

    89948
  • 流水灯
    +关注

    关注

    21

    文章

    432

    浏览量

    59104
  • 按键
    +关注

    关注

    4

    文章

    220

    浏览量

    57338
收藏 人收藏

    评论

    相关推荐

    按键控制流水灯

    利用一个按键控制流水灯的移位C语言程序怎样写,求指导
    发表于 07-29 19:02

    单片机按键控制流水灯方向的实现方法

    题目概述:单片机按键控制流水灯方向。编程:#include #include#define uchar unsigned char#define uint unsigned int***it k0
    发表于 12-02 06:39

    基于51单片机的心形流水灯原理图

    51单片机控制的心形流水灯原理图,通心形流水灯的制作熟悉单片机的接口
    发表于 11-23 11:03 53次下载

    51单片机流水灯程序

    51单片机流水灯程序 51单片机流水灯程序
    发表于 12-21 15:52 164次下载

    51单片机按键控制流水灯闪烁测试程序详细资料免费下载

    本文档的主要内容详细介绍的是51单片机按键控制流水灯闪烁测试程序详细资料免费下载。
    发表于 09-29 10:34 47次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>按键控制</b><b class='flag-5'>流水灯</b>闪烁测试程序详细资料免费下载

    使用51单片机按键控制流水灯换速的程序免费下载

    本文档的主要内容详细介绍的是使用51单片机控制流水灯分别以500ms,1s,3s流动按键时切换速度的程序免费下载。
    发表于 08-26 17:30 14次下载
    使用<b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>按键控制</b><b class='flag-5'>流水灯</b>换速的程序免费下载

    基于51单片机流水灯设计

    三个按键:A按键启动、B按键控制不同流水速度(低中高)、C按键设计思路一(未用中断):8个LED灯正极解电源,负极接
    发表于 11-04 14:06 5次下载
    基于<b class='flag-5'>51</b><b class='flag-5'>单片机</b>的<b class='flag-5'>流水灯</b>设计

    51单片机流水灯教程。

    51单片机流水灯教程。
    发表于 11-11 20:21 22次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>流水灯</b>教程。

    51单片机流水灯实验

    基于51单片机流水灯实验 我们知道通过编写程序对51单片机进行控制,完成
    发表于 11-20 17:51 63次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>流水灯</b>实验

    51单片机怎么在定时器流水灯里加按键控制程序

    51单片机怎么在定时器流水灯里加按键控制程序怎么让key1按下去向左流水而key2按下去向右流水
    发表于 11-20 19:06 9次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>怎么在定时器<b class='flag-5'>流水灯</b>里加<b class='flag-5'>按键控制</b>程序

    C语言查询按键控制8个流水灯

    C语言查询按键控制8个流水灯一.仿真电路图注意发光二极管的方向以及接的电阻的大小。二.C语言代码
    发表于 11-21 16:51 14次下载
    C语言查询<b class='flag-5'>按键控制</b>8个<b class='flag-5'>流水灯</b>

    51单片机心形灯实现按键控制流水编程

    51单片机心形灯实现按键控制流水编程
    发表于 11-23 16:20 19次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>心形灯实现<b class='flag-5'>按键控制</b><b class='flag-5'>流水</b>编程

    Proteus:单片机按键控制流水灯方向

    题目概述:单片机按键控制流水灯方向。编程:#include <reg51.h>#include<intrins.h>#define
    发表于 11-23 17:06 12次下载
    Proteus:<b class='flag-5'>单片机</b><b class='flag-5'>按键控制</b><b class='flag-5'>流水灯</b>方向

    51单片机按键控制流水灯

    51单片机按键控制流水灯左移右移代码如下#include <reg52.h>#include <intrins.h>#define uchar
    发表于 11-23 17:21 14次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>按键控制</b><b class='flag-5'>流水灯</b>

    基于单片机按键控制四级变速流水灯设计

    四个按键控制流水灯变速,实现四级速度控制
    的头像 发表于 08-14 10:47 736次阅读