嵌入式学习--江协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);

	}
}

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

相关推荐
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码5 天前
嵌入式学习路线
学习
Lester_11015 天前
STM32霍尔传感器输入口设置为复用功能输入口时,还能用GPIO函数直接读取IO的状态吗
stm32·单片机·嵌入式硬件·电机控制
LCG元5 天前
低功耗显示方案:STM32L0驱动OLED,动态波形绘制与优化
stm32·嵌入式硬件·信息可视化
三佛科技-187366133975 天前
120W小体积碳化硅电源方案(LP8841SC极简方案12V10A/24V5A输出)
单片机·嵌入式硬件
z20348315205 天前
STM32F103系列单片机定时器介绍(二)
stm32·单片机·嵌入式硬件
毛小茛5 天前
计算机系统概论——校验码
学习
babe小鑫5 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms6 天前
ROS2知识大白话
笔记·学习·ros2