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

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

1.1单片机及开发板介绍

单片机介绍

单片机,英文Micro Controller Unit,简称MCU

内部集成了CPU、RAM、定时器、中断系统、通信接口等常用硬件。

单片机任务是信息采集、处理和硬件设备的控制。

单片机是一个袖珍版计算机,有成本低、体积小、结构简单的优点,在生活和工业控制领域大有所用。

单片机应用领域

单片机应用领域广泛,如智能仪表、导航系统、家用电器等。各种产品一旦用上单片机就能起到产品升级换代的效果,被冠以“智能化”的形容词。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5GTcF7IF-1668432409475)(C:\Users\86136\AppData\Roaming\Typora\typora-user-images\image-20221114205406919.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o5dtwIfK-1668432317520)(C:\Users\86136\AppData\Roaming\Typora\typora-user-images\image-20221114205423429.png)]

STC89C52单片机

所属系列:51单片机系列

公司:STC公司

位数:8位

RAM:512字节(短期存储,相当于运行内存,关机后清零)

ROM:8K(长期存储,相当于手机内存跟电脑硬盘,能长期保存)

工作频率:12MHz

命名规则:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-laHpmdbt-1668432317521)(C:\Users\86136\AppData\Roaming\Typora\typora-user-images\image-20221114205459152.png)]

1、stc为公司名,89为系列

2、89表示系列(这里表示STC的12T/6T 的8051单片机)

3、C代表工作电压(C表示5.5~3.8V)

4、52代表程序空间大小(这里的程序空间大小为8K字节)

5、RC表示RAM的空间大小(RC为512字节)

6、40表示工作频率(最大可达40MHZ)

内部结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DWXdSFRd-1668432317521)(C:\Users\86136\AppData\Roaming\Typora\typora-user-images\image-20221114205526122.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MaoKPxXV-1668432317521)(C:\Users\86136\AppData\Roaming\Typora\typora-user-images\image-20221114205545020.png)]

开发板介绍

整体
在这里插入图片描述

1、拉杆上掰取下单片机

2、单片机引脚(缺口下方为一号引脚)
在这里插入图片描述
在这里插入图片描述

3、Led灯

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ycqUgYwv-1668432317522)(C:\Users\86136\AppData\Roaming\Typora\typora-user-images\image-20221114205841169.png)]

4、矩阵按键

在这里插入图片描述

5、独立按键

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pH4pT00I-1668432317523)(C:\Users\86136\AppData\Roaming\Typora\typora-user-images\image-20221114210312592.png)]

6、红外接收头(接收遥控器的信号,可实现遥控)

在这里插入图片描述

7、无线模块(实现一个单片机控制到另一个单片机)

在这里插入图片描述

8、USB下载模块
在这里插入图片描述
9、时钟芯片(产生时间,读取时间,可制作闹钟、小时钟。)
在这里插入图片描述
10、复位系统
在这里插入图片描述

11、AD\DA(模/数转换器)(将模拟信号转换为数字信号给单片机,或者将数字信号转换为模拟信号给外部使用)
在这里插入图片描述

12、步进电机模块
在这里插入图片描述

13、蜂鸣器(根据单片机所给的各种频率输出来响动)
在这里插入图片描述
14、138译码器(可以拓展I/O口,驱动数码管)
在这里插入图片描述
15、24C02(一种ROM)
在这里插入图片描述
16、温度传感器
在这里插入图片描述

17、74HC245芯片
在这里插入图片描述

18、电位器和排座
在这里插入图片描述

19、点阵屏
在这里插入图片描述

20、动态数码管模块
在这里插入图片描述

2.1点亮一个Led

新建工程

打开Keil uVision5,点击project,再点击new uVision Project
在这里插入图片描述

在桌面新建文件夹,再在文件夹中新建文件夹,命名为点亮一个Led,再将程序命名,保存。
在这里插入图片描述

在弹出的框中选择Atmel中的89c52
在这里插入图片描述

点击Target,右键source group1,选择Add new item。弹出窗口选否。
在这里插入图片描述

选择c语言,将文件命名为main
在这里插入图片描述

编程

如何调节代码字体大小:点击上方扳手图标,在window栏选择c/c++,Element栏选择text,点击Font,即可选择字体大小。

在这里插入图片描述
点击类似魔法棒的图标,点击Output,将Create勾选,创建文件,目的:为了烧录时能找到程序文件
在这里插入图片描述
在这里插入图片描述

单片机程序在cpu中执行,直接给寄存器写值(1和0),通过驱动器执行引脚给高电平还是低电平
在这里插入图片描述

P2直接控制8个LED灯,通过二进制控制,1为灭,0为亮。不能直接写二进制,要用十六进制,如0001 0001=0x11,0x为十六进制标志,四个二进制数用一个十六进制数代替。进制转换如下:
在这里插入图片描述

写编程要有头文件#include <REGX52.H>

编程如下;

#include <REGX52.H>
void main()
{
    P2=0xFE;
}

打开软件stc,在单片机型号选STC89C52RC,点击打开程序文件,找到保存文件,打开object里的文件,点击下载/编程,重启单片机即可
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

认识Led

中文名:发光二极管

英文名:light emitting diode,简称Led

用途:照明、广告灯

单片机Led模块:
在这里插入图片描述

如图,单片机Led有8个,右边表示正极,经过8个电阻调节电流,左端连接单片机引脚,通过单片机控制左端电极正负,控制LED亮灭

电阻大小计算(根据电阻上数字):

102=10 00=1k;473=47*10^3=47k

2.2LED闪烁

编程改进:

为使程序能够一直重复执行,可添加while

#include <REGX52.H>
void main()
{
    while(1){
        P2=0xFE;
    }
}

Delay延迟函数

若函数如下:

#include <REGX52.H>
void main()
{
    while(1){
        P2=0xFE;
        P2=0xFF;
    }
}

用于闪烁太快,人眼看不见,因此需要Dealy延迟函数

在STC软件中上方找到软件延时计算器,在定时长度输入500,生成函数。复制函数,粘贴到程序中。在头文件中加#include <INTRINS.H>

结果如下:

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

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

	_nop_();
	i = 4;
	j = 129;
	k = 119;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}


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

改进:在定时长度输入1,定义unsigned char xms;让函数在while(xms)中,结尾xms–,如下:

void Delay(unsigned int xms)		
{
	unsigned char i, j;
    while(xms){
		_nop_();
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
    }
}

2.3LED流水灯

写入程序

由上一节内容,通过对照进制表,让LED灯挨个闪烁

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

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

	_nop_();
	i = 4;
	j = 129;
	k = 119;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}


void main()
{
	while(1)
	{
		P2=0xFE;
		Delay500ms();
		P2=0xFD;
		Delay500ms();
		P2=0xFB;
		Delay500ms();		
		P2=0xF7;
		Delay500ms();
		P2=0xEF;
		Delay500ms();
		P2=0xDF;
		Delay500ms();
		P2=0xBF;
		Delay500ms();
		P2=0x7F;
		Delay500ms();
		
	}
}

打开程序的方法

找到打开程序的文件的位置,找到main文件,右键,用记事本或Dev打开

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mJs8D7ew-1668432317527)(C:\Users\86136\AppData\Roaming\Typora\typora-user-images\image-20221113234236341.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mMk5bWKK-1668432317527)(C:\Users\86136\AppData\Roaming\Typora\typora-user-images\image-20221113234347198.png)]

3.1独立按键控制LED灯亮灭

独立按键介绍

相当于是一种电子开关,按下时开关接通,松开时开关断开,原理是按键内部金属弹片受力弹动来实现接通和断开

内部结构:
在这里插入图片描述

对应单片机引脚
在这里插入图片描述

编程

右键可打开头文件,点击open

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s4Hd2dfA-1668432317528)(C:\Users\86136\AppData\Roaming\Typora\typora-user-images\image-20221114000329265.png)]

通过下划线“_“精确控制某一个单元,如:

P2_0,P2_1……分别代表一个LED灯,用1和0控制灭和亮。

P3_1,P3_0……分别代表一个独立按键用1和0控制关和开。

用if语句即可写出程序,用独立按键控制LED灯亮灭

#include <REGX52.H>

void main(){
	while(1){
		if(P3_1==0){
			P2_0=1;
		}else{
			P2_0=0;
		}
	}
}

然而,一旦松开按键,LED就会熄灭

C51数据运算:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JsaQSqA4-1668432317528)(C:\Users\86136\AppData\Roaming\Typora\typora-user-images\image-20221114001134994.png)]

按位左移<< : 0011 1100<<1=0111 1000

按位右移>> : 0011 1100>>1=0001 1110

按位与&:0001 1000 & 0010 1010=0000 1000

​ 相同数字&后不变,不同数字&后为0

按位或|:0001 1000 | 0010 1010=0011 1010

​ 1“或”1和0都为1,0“或”0为0

按位异或^:0001 1000^0010 1010=0011 0010

​ 相同数字为0,不同数字为1

按位取反0001 1000=1110 0111

3-2 独立按键控制LED状态

按键的抖动

对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zIEKYCTP-1668432317528)(C:\Users\86136\AppData\Roaming\Typora\typora-user-images\image-20221114133640644.png)]

由于按键的抖动,单片机在刚刚按下按键时,会在一瞬间读取多个结果,造成误差,因此需要消抖

如何消抖

1、加入硬件,使经过电路,途径触发器之类的硬件,过滤后再传输给单片机处理。

2、通过软件处理,写入延时程序,度过抖动时间后再进行操作。

编程

1、加入延迟函数Delay

2、判断是否按下按键if(P3_1==0)

3、接着Delay(20)用于消除抖动

4、用while(P3_1==0)卡住程序,实现按住按键没有生效,松开按键生效的效果。接着再次用Delay(20)用于消除抖动

5、通过P2_0=~P2_0实现按下开关后LED灯状态改变

如下:

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

void Delay(unsigned int xms)		
{
	unsigned char i, j;
    while(xms){
		_nop_();
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
 }
}


void main()
{
	while(1){
		if(P3_1==0){
			Delay(20);
			while(P3_1==0);
			Delay(20);
			
			P2_0=~P2_0;
		}
	}
}	

正常下载即可

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

编程

1、由上节课可知加入Delay函数消抖,然后通过if,while函数实现独立按键控制Led状态

2、不能直接P2++,因为单片机默认高电平,所以P2++呈现的效果是相反的,即灯全亮,灭灯进位

3、不能直接对P2取反,因为P2在不断改动,取反是它,加一还是它,最终会卡在1111 1111与0000 0000不断徘徊

4、因此要定义一个变量Led=0,让Led++,再让P2=~Led,从而实现独立按键控制LED显示二进制

代码如下:

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

void Delay(unsigned int xms)
{
	unsigned char i, j;
    while(xms){
		_nop_();
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
 }
}

void main()
{
	unsigned char Led=0;
	while(1){
		if(P3_1==0){
			Delay(20);
			while(P3_1==0);
			Delay(20);
			
			Led++;
			P2=~Led;
		}
	}
}

编程改进

因为P2++实现的是反向操作,于是我们可以通过P2–来实现正向操作。

代码如下:

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

void Delay(unsigned int xms)
{
	unsigned char i, j;
    while(xms){
		_nop_();
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
 }
}

void main()
{
	unsigned char Led=0;
	while(1){
		if(P3_1==0){
			Delay(20);
			while(P3_1==0);
			Delay(20);
			
			P2--;
		}
	}
}

3.4独立按键控制LED移位

编程

1、与上节课相同,加入Delay函数消抖,然后通过if,while函数实现独立按键控制Led状态,定义一个变量Led=0,让Led++,

2、因为单片机LED只有8个而Led值到8时,移位越界,因此加入if(Led==8)时,令Led=0。

3、通过P2~(0x01<<Led)完成操作

代码如下:

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

void Delay(unsigned int xms)		
{
	unsigned char i, j;
    while(xms){
		_nop_();
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
 }
}

void main()
{
	unsigned char Led;
	P2=~0x01;
	while(1){
		if(P3_2==0&&P2==~0){
			Delay(20);
			while(P3_2==0);
			Delay(20);
            
            Led++;
			if(Led==8)
                Led=0;
			P2=~(0x01<<Led);
		}
	}
}

LED左移编程

上述代码为LED右移,以下为LED左移

1、if函数移至前面,先判断if(Led0)时,Led7;

2、用else表示Led不为0时的操作,Led–

代码如下:

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

void Delay(unsigned int xms)		
{
	unsigned char i, j;
    while(xms){
		_nop_();
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
 }
}

void main()
{
	unsigned char Led;
	P2=~0x01;
	while(1){
		if(P3_2==0&&P2==~0){
			Delay(20);
			while(P3_2==0);
			Delay(20);
			if(Led==0)
                Led=7;
            else
                Led--;
			P2=~(0x01<<Led);
		}
	}
}

4.1静态数码管显示

LED数码管

定义:数码管是一种简单、廉价的显示器,是由多个发光二极管封装在一起组成“8”字型的器件。

生活中的数码管:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LTqCaAwr-1668432317528)(C:\Users\86136\AppData\Roaming\Typora\typora-user-images\image-20221114200425802.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zT98lf35-1668432317528)(C:\Users\86136\AppData\Roaming\Typora\typora-user-images\image-20221114200443970.png)]

数码管引脚

1、一位数码管

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ak8a261b-1668432317528)(C:\Users\86136\AppData\Roaming\Typora\typora-user-images\image-20221114200737303.png)]

2、连接方式

共阴极

img

共阳极

img

3、数码管排序(顺时针)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bACURD6q-1668432317529)(C:\Users\86136\AppData\Roaming\Typora\typora-user-images\image-20221114201148334.png)]

数码管引脚定义

1、数码管是四位一体的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ksgfvrsO-1668432317529)(C:\Users\86136\AppData\Roaming\Typora\typora-user-images\image-20221114201346986.png)]

2、连接方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MAzF8L2w-1668432317529)(C:\Users\86136\AppData\Roaming\Typora\typora-user-images\image-20221114201420266.png)]

根据上面连接方式,可见通过更改位选(即上方的12、9、8、6对应口)的数值,来控制其是否连通。

由于共用引脚,一次只能显示一个数字

3、动态数码管显示

通过快速扫描程序,极快的显示数字,人眼就会看到多个数字

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zp52PM8N-1668432317529)(C:\Users\86136\AppData\Roaming\Typora\typora-user-images\image-20221114202335954.png)]

4、共用引脚的原因

减少引脚数量,便于单片机控制

原理图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3GQ1iVU5-1668432317529)(C:\Users\86136\AppData\Roaming\Typora\typora-user-images\image-20221114202413848.png)]

1、控制LED的I/O口

根据上面的动态数码管模块图,可知P00P07控制LED的段选(下面的多个引脚),而位选(公共端)接在LED1LED8。

接着看138译码器可以发现,位选端的LED1LED8在其右侧,左侧由P22P24控制,即所谓3个口控制8位。

2、74HC245芯片

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ws7nCx1Q-1668432317529)(C:\Users\86136\AppData\Roaming\Typora\typora-user-images\image-20221114202656260.png)]

3、牌组电阻

img

从上图的动态数码管原理图中,这一部分负责保护电路,防止数码管电流过大。

编程

1、建立Switch函数,使对应选位选中

switch(L){
		case 8:P2_4=0;P2_3=0;P2_2=0;break;
		case 7:P2_4=0;P2_3=0;P2_2=1;break;
	  case 6:P2_4=0;P2_3=1;P2_2=0;break;
		case 5:P2_4=0;P2_3=1;P2_2=1;break;
		case 4:P2_4=1;P2_3=0;P2_2=0;break;
		case 3:P2_4=1;P2_3=0;P2_2=1;break;
		case 2:P2_4=1;P2_3=1;P2_2=0;break;
		case 1:P2_4=1;P2_3=1;P2_2=1;break;
	}

2、建立数组,使能显示对应数字

unsigned char n[]={0x3F,0x06,0x5B,0x4F,0x66,0x7D,0x07,0x7F,0X6F,0x3E};

3、建立函数smg,使对应选位选中且能显示对应数字

void smg(unsigned char L,q){
	switch(L){
		case 8:P2_4=0;P2_3=0;P2_2=0;break;
		case 7:P2_4=0;P2_3=0;P2_2=1;break;
	  case 6:P2_4=0;P2_3=1;P2_2=0;break;
		case 5:P2_4=0;P2_3=1;P2_2=1;break;
		case 4:P2_4=1;P2_3=0;P2_2=0;break;
		case 3:P2_4=1;P2_3=0;P2_2=1;break;
		case 2:P2_4=1;P2_3=1;P2_2=0;break;
		case 1:P2_4=1;P2_3=1;P2_2=1;break;
	}
	P0=n[q];
	Dealy(1);
}

最终代码如下:

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

unsigned char n[]={0x3F,0x06,0x5B,0x4F,0x66,0x7D,0x07,0x7F,0X6F,0x3E};

void Dealy(unsigned char xms)		//@11.0592MHz
{
	while(xms){
		unsigned char i, j;

		_nop_();
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
		}
	}

void smg(unsigned char L,q){
	switch(L){
		case 8:P2_4=0;P2_3=0;P2_2=0;break;
		case 7:P2_4=0;P2_3=0;P2_2=1;break;
	  case 6:P2_4=0;P2_3=1;P2_2=0;break;
		case 5:P2_4=0;P2_3=1;P2_2=1;break;
		case 4:P2_4=1;P2_3=0;P2_2=0;break;
		case 3:P2_4=1;P2_3=0;P2_2=1;break;
		case 2:P2_4=1;P2_3=1;P2_2=0;break;
		case 1:P2_4=1;P2_3=1;P2_2=1;break;
	}
	P0=n[q];
	Dealy(1);
}

void main(){
	while(1){
	if(P3_1==0){
		Delay(20);
		while(P3_1==0);
		Delay(20);
		
		smg(1,1);
		Delay(1);
	}
	}
}

即实现了静态数码管显示

4.2动态数码管显示

编程

1、由上节课时所学,打出基本代码

2、让1位显示1,2位显示2,3位显示3

3、中间间隔2ms

代码如下:

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

unsigned char n[]={0x3F,0x06,0x5B,0x4F,0x66,0x7D,0x07,0x7F,0X6F,0x3E};

void Dealy(unsigned char xms)		//@11.0592MHz
{
	while(xms){
		unsigned char i, j;

		_nop_();
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
		}
	}

void smg(unsigned char L,q){
	switch(L){
		case 8:P2_4=0;P2_3=0;P2_2=0;break;
		case 7:P2_4=0;P2_3=0;P2_2=1;break;
	  case 6:P2_4=0;P2_3=1;P2_2=0;break;
		case 5:P2_4=0;P2_3=1;P2_2=1;break;
		case 4:P2_4=1;P2_3=0;P2_2=0;break;
		case 3:P2_4=1;P2_3=0;P2_2=1;break;
		case 2:P2_4=1;P2_3=1;P2_2=0;break;
		case 1:P2_4=1;P2_3=1;P2_2=1;break;
	}
	P0=n[q];
	Dealy(1);
}

void main(){
	while(1){
	if(P3_1==0){
		Delay(20);
		while(P3_1==0);
		Delay(20);
		
		smg(1,1);
		Delay(2);
        smg(2,2);
		Delay(2);
        smg(3,3);
		Delay(2);
	}
	}
}

如果闪烁太快,会有重影,因此需要2ms延迟,称为消影

数码管驱动方式

1、单片机直接扫描:硬件设备简单,但会耗费大量单片机CPU时间

2、专用驱动芯片:内部自带显存、扫描电路,单片机只需告诉它显示什么即可

d char n[]={0x3F,0x06,0x5B,0x4F,0x66,0x7D,0x07,0x7F,0X6F,0x3E};

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

unsigned char n[]={0x3F,0x06,0x5B,0x4F,0x66,0x7D,0x07,0x7F,0X6F,0x3E};

void Dealy(unsigned char xms)		//@11.0592MHz
{
	while(xms){
		unsigned char i, j;

		_nop_();
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
		}
	}

void smg(unsigned char L,q){
	switch(L){
		case 8:P2_4=0;P2_3=0;P2_2=0;break;
		case 7:P2_4=0;P2_3=0;P2_2=1;break;
	  case 6:P2_4=0;P2_3=1;P2_2=0;break;
		case 5:P2_4=0;P2_3=1;P2_2=1;break;
		case 4:P2_4=1;P2_3=0;P2_2=0;break;
		case 3:P2_4=1;P2_3=0;P2_2=1;break;
		case 2:P2_4=1;P2_3=1;P2_2=0;break;
		case 1:P2_4=1;P2_3=1;P2_2=1;break;
	}
	P0=n[q];
	Dealy(1);
}

void main(){
	while(1){
	if(P3_1==0){
		Delay(20);
		while(P3_1==0);
		Delay(20);
		
		smg(1,1);
		Delay(2);
        smg(2,2);
		Delay(2);
        smg(3,3);
		Delay(2);
	}
	}
}

数码管驱动方式

1、单片机直接扫描:硬件设备简单,但会耗费大量单片机CPU时间

2、专用驱动芯片:内部自带显存、扫描电路,单片机只需告诉它显示什么即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值