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

	}
}

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

相关推荐
saoys2 小时前
Opencv 学习笔记:创建与原图等尺寸的空白图像
笔记·opencv·学习
叁散5 小时前
实验项目1 RFID 标签实验
单片机·嵌入式硬件
晓幂8 小时前
【2025】HECTF
笔记·学习·web安全
慕云紫英9 小时前
基金申报的一点经验
学习·aigc
微露清风9 小时前
系统性学习C++-第十八讲-封装红黑树实现myset与mymap
java·c++·学习
宝贝儿好9 小时前
【强化学习】第六章:无模型控制:在轨MC控制、在轨时序差分学习(Sarsa)、离轨学习(Q-learning)
人工智能·python·深度学习·学习·机器学习·机器人
大、男人9 小时前
python之asynccontextmanager学习
开发语言·python·学习
比奇堡派星星9 小时前
MCU 裸机时间片调度系统
单片机·嵌入式硬件
做cv的小昊9 小时前
【TJU】信息检索与分析课程笔记和练习(8)(9)发现系统和全文获取、专利与知识产权基本知识
大数据·笔记·学习·全文检索·信息检索
盐焗西兰花10 小时前
鸿蒙学习实战之路-蓝牙设置完全指南
学习·华为·harmonyos