嵌入式学习--江协51单片机day2

今天学的不多,内容为:静态、动态数码管的控制,模块化编程和lcd1602调试工具

数码管的控制

由于内部电路的设计,数码管每次只能显示一个位置的一个数字,动态的实现是基于不同位置的闪烁频率高。

P2_4,P2_3,P2_2控制位置(与led模块共用接口)

显示数字,顺时针旋转依次为ABCDEFG DP,0为灭,按顺序写出后由右向左读出,例如6为 1011 1110(对应ABC...),为7D(0111 1101)

静态

复制代码
#include <REGX52.H>
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
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];
	
}
void main()
{
	Nixie(5,9);
	while(1)
	{
		
	}
}

动态

我们可以将delay的时间由高到低观察,发现确实是闪烁

(但是不进行delay清零,否则上次的会串到当前的,导致乱码)

复制代码
#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)//????,????????ABCDEFG DP,0??,????????????
	//??6? 1011 1110,?7D
{
	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;
}
void main()
{
	while(1)
	{
		Nixie(1,1);
		Nixie(2,2);
		Nixie(3,3);
	}
}

模块化编程

模块化编程就是将函数单独生成两个文件一个.c一个.h,达到和头文件类似的效果。

复制代码
#ifndef __DELAY_H__
#define __DELAY_H__
void Delay(unsigned int xms);
#endif

.h文件的固定声明格式

这是达成的效果,使代码更加简洁,同时也方便在后续的使用。后续再用可以将相应的文件粘贴到对应的文件夹里

lcd1602调试工具

lcd1602主要学习了会使用的函数

复制代码
#include <REGX52.H>
#include "LCD1602.h"
#include "Delay.h"
int Result=0;
void main()
{
	LCD_Init();
	/*LCD_ShowChar(1,1,'A');
	LCD_ShowString(1,3,"HELLO");
	LCD_ShowNum(1,9,521,3);
	LCD_ShowSignedNum(1,13,-66,2);
	LCD_ShowHexNum(2,1,0xA8,2);
	LCD_ShowBinNum(2,4,0xAA,8);
	*/
	while(1)
	{
		Result++;
		Delay(1000);
		LCD_ShowNum(1,1,Result,3);

	}
}

今天学习的内容不是很多,主要是数码管的硬件原理听了好长时间,虽然还是似懂非懂,但是感觉挺有用的。

相关推荐
andrsted20 分钟前
用练题簿小程序 - 让错题不再白错
学习·微信小程序·小程序·学习方法
2601_9499506326 分钟前
练题簿,把培训从“走过场”变成“真落地”
人工智能·学习·小程序·刷题·小程序推荐
问天_观心4 小时前
大模型微调学习(二)
人工智能·python·深度学习·学习·语言模型·transformer
指掀涛澜天下惊4 小时前
强化学习进阶篇八 策略梯度算法
深度学习·学习·算法·强化学习
star learning white4 小时前
STM32入门学习5
stm32·嵌入式硬件·学习
传奇开心果编程4 小时前
【Rust入门知识点学与练】第4课:条件判断 if / else
开发语言·学习·rust
lifallen5 小时前
Skill 的生命周期:问题消失以后
人工智能·学习·ai·ai编程
千谦阙听5 小时前
C++类和对象(中):默认成员函数、构造与析构、拷贝构造、运算符重载
开发语言·c++·学习
Agudamu11616 小时前
AI 视频学习笔记工具拆解:4款工具谁能把视频变成复习资料
人工智能·学习·音视频
HugoStudio_SWAN6 小时前
洛谷 B4500 / B4449 / B3843 凯撒密码、密码强度与密码合规——加密与安全的三道门
c++·学习·程序人生·算法·安全