当前位置: 首页 > news >正文

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

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

相关文章:

  • 卷积神经网络基础(七)
  • C++对象注册系统(1)实现原理
  • 【Python爬虫电商数据采集+数据分析】采集电商平台数据信息,并做可视化演示
  • DHCP理解
  • 【上位机——MFC】对象和控件绑定
  • Kubernetes安全策略实战:从PodSecurityPolicy到Pod Security Admission
  • leetcode文件级全局变量会在测试用例之间相互影响
  • FPGA----基于ZYNQ 7020实现定制化的EPICS通信系统
  • 第1章 算法设计基础
  • 305.出现最频繁的偶数元素
  • AI日报 · 2025年5月07日|谷歌发布 Gemini 2.5 Pro 预览版 (I/O 版本),大幅提升编码与视频理解能力
  • Facebook隐私设置详解:如何保护你的个人信息
  • 【工具】HandBrake使用指南:功能详解与视频转码
  • YOLOv8的Python基础--函数篇2
  • 三款实用工具推荐:配音软件+Windows暂停更新+音视频下载!
  • WebRTC通信原理与流程
  • 解构与重构:自动化测试框架的进阶认知之旅
  • 学习整理使用php将SimpleXMLElement 对象解析成数组格式的方法
  • Qt重写相关事件,原来的默认功能是不是丢失了?
  • CVE体系若消亡将如何影响网络安全防御格局
  • 黄土是他们的气质:打破宁夏当代油画创作的沉寂
  • 外交部发言人就印巴局势升级答记者问
  • 中铁房地产24.7亿元竞得上海松江新城宅地,溢价率20.42%
  • 夜读丨母亲的手擀面
  • 观察|印巴交火开始升级,是否会升级为第四次印巴战争?
  • 农行原首席专家兼浙江省分行原行长冯建龙主动投案,正接受审查调查