AutoLeaders控制组——单片机学习笔记

这篇具有很好参考价值的文章主要介绍了AutoLeaders控制组——单片机学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

点亮一个LED

AutoLeaders控制组——单片机学习笔记,单片机,学习,笔记
LED灯模式图
AutoLeaders控制组——单片机学习笔记,单片机,学习,笔记
VCC为电源正极 左边那些红色的字是网络标号(网络标号是一张电路图中线路的名称。 端口号是多张电路图为了能够标明连在一起的符号)

AutoLeaders控制组——单片机学习笔记,单片机,学习,笔记
AutoLeaders控制组——单片机学习笔记,单片机,学习,笔记
AutoLeaders控制组——单片机学习笔记,单片机,学习,笔记
102表示电阻大小,电阻起到了限流电阻的作用

AutoLeaders控制组——单片机学习笔记,单片机,学习,笔记
CPU通过配置的寄存器来控制电路,硬件电路执行想要完成的功能。
低电平为0;高电平为1
AutoLeaders控制组——单片机学习笔记,单片机,学习,笔记代码需要将二进制转化为十六进制X

void main()
{
	p2=0xFE;//1111 1110
}

LED闪烁

#include <REGX52.H>
#include <INTRINS.H>

void Delay500ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 4;
	j = 205;
	k = 187;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void main()
{
	
	while(1)
	{
		P2=0xFE;
		Delay500ms();
		P2=0xFF;
		Delay500ms();
	}
}

LED流水灯

#include <REGX52.H>
#include <INTRINS.H>

void Delay500ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 4;
	j = 205;
	k = 187;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}


int main()
{
	while(1)
	{
		P2=0xFE;      //1111 1110
		Delay500ms();
		P2=0xFD;      //1111 1101   
		Delay500ms();
		P2=0xFB;      //1111 1011
		Delay500ms();
		P2=0xF7;      //1111 0111
		Delay500ms();
		P2=0xEF;      //1110 1111
		Delay500ms();
		P2=0xDF;      //1101 1111
		Delay500ms();
		P2=0xBF;      //1011 1111
		Delay500ms();
		P2=0x7F;      //0111 1111
		Delay500ms();
	}
}

改良版AutoLeaders控制组——单片机学习笔记,单片机,学习,笔记

void Delay1ms(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;

	i = 2;
	j = 239;
	do
	{
		while (--j);
	} while (--i);
}

独立按键控制LED亮灭

AutoLeaders控制组——单片机学习笔记,单片机,学习,笔记
AutoLeaders控制组——单片机学习笔记,单片机,学习,笔记
按下四个连接
松开两边连接中间断开
独立按键开发板内部连接如下
AutoLeaders控制组——单片机学习笔记,单片机,学习,笔记
将P2口配置为输出模式。通过设置相应的寄存器,将P2口配置为输出模式。
设置P2口输出电平。根据需要,将P2口的输出电平设置为高电平或低电平。通常情况下,高电平表示LED熄灭,低电平表示LED点亮。
连接LED。将LED的正极连接到P2口,将LED的负极连接到地(GND)。
控制LED状态。根据需要,改变P2口的输出电平,从而控制LED的亮灭状态。

单片机通电时所有IO口都是高电平

寄存器写一个值会送到IO口上,同样会检测IO口的电平读回来

按键松开,读寄存器,值为1;按下时读寄存器为0AutoLeaders控制组——单片机学习笔记,单片机,学习,笔记

AutoLeaders控制组——单片机学习笔记,单片机,学习,笔记
AutoLeaders控制组——单片机学习笔记,单片机,学习,笔记
AutoLeaders控制组——单片机学习笔记,单片机,学习,笔记

#include <REGX52.H>

int main()
{
	while(1)
	{
		if(P3_1==0)   //K1接在了P31,直接读这个寄存器
		{
			P2_0=0;
		}
		else
		{
			P2_0=1;
		}
	}
}

独立按键控制LED状态

AutoLeaders控制组——单片机学习笔记,单片机,学习,笔记
硬件消抖:通过电路过滤掉
软件处理:按键按下时延时20ms,松手时也延时20ms

#include <REGX52.H>

void Delay(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;
	while(xms)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
	
}

int main()
{
	while(1)
	{
		if(P3_1==0)
		{
			Delay(20);            //如果P31是按下状态,那么延时20ms
			while(P3_1==0);       //按下不操作,松手才操作;while(P3_1==0)检测松手,不能不加
			Delay(20);            //松手以后,消除松手抖动
			P2_0=~P2_0;           //可以操作了,然后取反
		}
			
	}
}

独立按键控制LED显示二进制

int main()
{
	unsigned char LEDNum=0;     // 无符号字符型为0~255的8位二进制数据,表示一个寄存器
	while(1)
	{
		if(P3_1==0)
		{
			Delay(20);
			while(P3_1==0);
			Delay(20);
			
			LEDNum=++;
			P2=~LEDNum;
		}
	}
		
}

独立按键控制LED移位

#include <REGX52.H>
void Delay(unsigned int xms);

unsigned char LEDNum;

int main()
{
	while(1)
	{
		if(P3_1==0)
		{
			Delay(20);
			while(P3_1==0);
			Delay(20);
			
			LEDNum++;
			if(LEDNum>=8)     // if语句如果只有一句,可以不用{}
				LEDNum=0;
			P2=~(0x01<<LEDNum) // P2是一个反向逻辑,给1是灭,给0是亮,所以取反
		}
	}
}
	

void Delay(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;
	while(xms)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}

#include <REGX52.H>
void Delay(unsigned int xms);    //另一种声明方式

unsigned char LEDNum;

int main()
{
	P2=~0x01;
	while(1)
	{
		if(P3_1==0)
		{
			Delay(20);
			while(P3_1==0);
			Delay(20);
			
			LEDNum++;
			if(LEDNum>=8)
				LEDNum=0;
			P2=~(0x01<<LEDNum);
		}
		
		if(P3_0==0)       // 开关是31 30 32 33
		{
			Delay(20);
			while(P3_0==0);
			Delay(20);
			
			if(LEDNum==0)     // 也需要越界判断,之前定义的是无符号char型,减到0再往下会有越界
				LEDNum=7;    // 先判断,才操作,如果已经为0,那么赋给最大值7
			else
				LEDNum--;     // 不是真正的往右移,而是相对于前面的少往右移一位,相当于左移
			P2=~(0x01<<LEDNum);
		} 
	}
}
	

void Delay(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;
	while(xms)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}

静态数码管展示

AutoLeaders控制组——单片机学习笔记,单片机,学习,笔记
A~G和一个字节的八位对应;引脚是“就近引出”
(共阴极接法和共阳极接法是两种不同的电路连接方式,它们在电平、连接方式以及应用领域上都有所区别。

共阴极接法:在此方法中,三相半波整流桥的负极(阴极)相连接,即都连接到负极。当使用此接法时,例如在PLC与驱动器的八段发光二极管中,所有二极管的阴极都连在一起,而阳极则分别控制各段。为了显示数字"6",您所描述的方法是正确的:3,8接地,然后A~DP输入10111110。这是因为当阴极为低电平时,输入的1会被视为高电平来驱动显示。

共阳极接法:此方法是将三相半波整流桥的正极(阳极)相连接,即都连接到正极。共阳极接法与共阴极的主要区别在于电平和连接方式。在共阳接法中,电源公共端接到电源正极,经过PLC内部的电流流出到外部开关上,当开关闭合时,光耦导通,PLC检测到就会把映射的信号传输出去。

要形成电势差并使某些部分显示特定的字符或数字,确实需要对电路进行正确的连接。在您的描述中,共阴极接法与共阳极接法之间的主要差异在于输入的段码数据是相反的。这确保了当某一侧为高电平时,另一侧为低电平,从而正确显示预期的数字或字符。)

如果要显示数字6,那么就需要把AFGEDC点亮:

对应共阴极接法图中,3,8接地,然后A~DP输入10111110(也叫段码),把这八个数据给单片机的IO口上,即可显示"6"

对应共阳极接法图中,3,8接Vcc,然后A~DP输入01000001(与共阴极相反)

四位一体数码管(四个大公共端引出,其余字母相同的管子连在一块,如所有A连一块,所有B连一块):
————————————————
版权声明:本文为CSDN博主「SHENAO1-Z」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_57218426/article/details/126396152

AutoLeaders控制组——单片机学习笔记,单片机,学习,笔记
AutoLeaders控制组——单片机学习笔记,单片机,学习,笔记
选中是哪个LED灯p2口,再将段码数据输入p0口,输出
AutoLeaders控制组——单片机学习笔记,单片机,学习,笔记

AutoLeaders控制组——单片机学习笔记,单片机,学习,笔记
AutoLeaders控制组——单片机学习笔记,单片机,学习,笔记
AutoLeaders控制组——单片机学习笔记,单片机,学习,笔记
把数码管的某一位显示某一个数字封装成一个子函数文章来源地址https://www.toymoban.com/news/detail-834860.html

#include <REGX52.H>

unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; // 0-9的段码表

void Nixie(unsigned char Location,Number)       // 数码管显示的子函数,两个参数:位置和数字
{
	switch(Location)
	{
		case 1: P2_4=1; P2_3=1; P2_2=1; break;
		case 2: P2_4=1; P2_3=1; P2_2=0; break;
		case 3: P2_4=1; P2_3=0; P2_2=1; break;	
		case 4: P2_4=1; P2_3=0; P2_2=0; break;
		case 5: P2_4=0; P2_3=1; P2_2=1; break;
		case 6: P2_4=0; P2_3=1; P2_2=0; break;
		case 7: P2_4=0; P2_3=0; P2_2=1; break;
		case 8: P2_4=0; P2_3=0; P2_2=0; break;     
	}
	P0=NixieTable[Number];     // P0的值即为要显示的数字
}


int main()
{
	Nixie(2,3);
	while(1)
	{
		
	}
		
}

动态数码管展示

#include <REGX52.H>

unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; 

void Delay(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;
	while(xms--)
	{
      i = 2;
	  j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
	
}


void Nixie(unsigned char Location,Number)      
{
	switch(Location)
	{
		case 1: P2_4=1; P2_3=1; P2_2=1; break;
		case 2: P2_4=1; P2_3=1; P2_2=0; break;
		case 3: P2_4=1; P2_3=0; P2_2=1; break;	
		case 4: P2_4=1; P2_3=0; P2_2=0; break;
		case 5: P2_4=0; P2_3=1; P2_2=1; break;
		case 6: P2_4=0; P2_3=1; P2_2=0; break;
		case 7: P2_4=0; P2_3=0; P2_2=1; break;
		case 8: P2_4=0; P2_3=0; P2_2=0; break;     
	}
	P0=NixieTable[Number];  
	Delay(1);
	P0=0x00;
}


int main()
{
	
	while(1)
	{
		Nixie(1,1);
//		Delay(20);
		Nixie(2,2);
//		Delay(20);
		Nixie(3,3);
//		Delay(20);
	}
}

到了这里,关于AutoLeaders控制组——单片机学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【32单片机学习】(3)霍尔编码器减速直流电机控制及测速

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 1.实验现象 2.实验接线及原理图 接线图 原理图  电机接线图 3.代码部分 1.主函数  main.c 2.按键部分   key.c  key.h pwm代码   pwm.c  pwm.h 电机驱动   motor.c   motor.h  OLED显示 oled.c oled.h  编码器

    2024年02月11日
    浏览(42)
  • 学习C51单片机——矩阵按键控制数码管显示数字(学习笔记Keil5)

    单片机检测矩阵按键是否被按下的依据是检测与该按键对应的 I/O 口是否为低电平

    2024年04月17日
    浏览(33)
  • 78、基于STM32单片机学习型搬运机器人四自由度机械臂机械手遥感控制设计

    毕设帮助、开题指导、技术解答(有偿)见文末。 目录 摘要 一、硬件方案 二、设计功能 三、实物图 四、原理图 五、PCB图  六、程序源码 七、资料包括  在当今大规模制造业中,企业为提高生产效率,保障产品质量,普遍重视生产过程的自动化程度,工业机器人作为自动

    2024年02月09日
    浏览(39)
  • 【单片机】温控系统参数辨识及单片机PID控制

    半导体制冷片正向通电制冷,反向通电制热。系统采用半导体制冷片(帕尔贴)作为执行单元,帕尔贴下端连接水冷系统进行散热,上端为导热铜片,铜片上贴有热敏电阻用于测量系统的温度。 控制系统采用4个MOS管组成的H桥驱动电路,通过PWM进行加热制冷温度控制。 一般的

    2024年02月03日
    浏览(30)
  • 单片机设计基于单片机的交通灯控制系统的设计

      针对我国城市路况复杂的特点,在交通灯控制系统硬件设计方面以最小系统模块、电源模块、时间显示模块以及车流量检测模块为主要模块,不仅可以完成交通灯的顺序点亮,还可以实现倒计时、车流量检测等相关功能;软件设计方面通过检测程序的设定,来检测是否达

    2024年02月04日
    浏览(34)
  • 如何使用单片机点亮LED灯,并使用按键控制[51单片机]

    首先先看一下我的板子,如果我们板子不相同,可能操作也不太相同 我们就不讲底层原理了,直接看,我们可以看到板子上有 8个LED灯   那这个8个LED用什么来控制呢,我们先看底层的线路图,所有的LEDD都连接到了P2带后缀的接口上, 那么只需要操作这几个接口的高低电频,

    2024年02月05日
    浏览(32)
  • 51单片机控制键盘

    键盘是电子系统中人机对话的重要组成部分,是人向机器发出指令、输入信息的必须设备 键盘在单片机应用系统中是使用最广泛的一种数据 输入设备 。键盘是由多个 按键 组成的。 按键通常是一种常开型开关,常态下按键的两个触点处于 断开 状态,按下按键时它们才闭合

    2024年02月02日
    浏览(53)
  • 单片机设计基于51单片机的智能风扇控制系统设计与实现

      我们常见的电风扇一般只有四、五个风速档,用的是人工开关,而且并不是每个人家里都会有空调,或者在一些小型的工厂或者一些小型加工厂,这些地方都可能没有配备大型的中央空调系统这些东西,所以这些东西往往都会采用风扇这种小成本的东西来代替,但是不清楚

    2024年02月03日
    浏览(53)
  • 单片机PWM舵机控制

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档   文章目录 一、PWM是什么? 二、如何控制舵机?     PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进 行调制,等效出所需要的波形(包含形状以及幅值),对模拟

    2023年04月25日
    浏览(40)
  • 单片机课设———基于51单片机的智能风扇控制器(汇编语言)

    说明:单片机芯片为AT89C52,使用普中开发板,用汇编语言编程。 系统实现了对风扇的控制: (1)控制器面板包括:启/停键、模式选择键、风速键和类型选择键。 (2)模式分为:手动模式和自动温控模式。在温控模式下,风速键和类型选择键无效。 (3)风速分为:强、中

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包