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

做h5的图片网站中国免费网站服务器免费下载

做h5的图片网站,中国免费网站服务器免费下载,重庆建设工业集团官网,北京电力建设公司待遇1. 单个数码管基本定义 数码管连接方式: 分为共阳极和共阴极连接,如下图所示,上面为共阴极连接,下面为共阳极连接。 数码管引脚定义: 右侧从1开始逆时针到10,依次为1,2,3,…,8,9,10。上面数码管连接方式…

1. 单个数码管基本定义

数码管连接方式:

分为共阳极和共阴极连接,如下图所示,上面为共阴极连接,下面为共阳极连接。

在这里插入图片描述

数码管引脚定义:

右侧从1开始逆时针到10,依次为1,2,3,…,8,9,10。上面数码管连接方式图中的标号就对应到具体的引脚。数码管定义的ABCDEFG&DP如左图所示,结合这些LED灯的编号和引脚编号可以得出连线图。

在这里插入图片描述

连线方式如下图所示:

在这里插入图片描述

2. 多个数码管定义

连接方式如下图所示,一共有12个引脚(上下的连接方式只是共阴极连接和共阳极连接的区别)。

则12,9,8,6控制具体亮哪一个LED灯,而其他控制显示的具体数字

在这里插入图片描述

每一个独立数码管显示(下方)都连接到了相同的接口。如果我们上方将12,9,8,6全部点亮(即所有数码管都显示数字),则每个数码管显示的都是具体ABCDEFG&DP连接的单片机的8个端口对应的结果。

这样的好处是,原本需要4*8=32个引脚控制的多个数码管,只用12个引脚就简单替代了

3. 动态数码管模块电路图分析

动态数码管模块电路图如下:

在这里插入图片描述

图中的COM通常接地或电源负极,这里可以看作这些LED管是共阴极连接,所以具体abcdefg&dp点亮哪一个,就要给哪一个置1。

0-9对应16进制如下(P07→P00):

int LEDNum[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};

下边的74HC245是一个双向数据缓冲器。使用这个是因为:

  • 高电平点亮灯与低电平点亮灯比起来,低电平会更亮一些(需要具体自己动手实验看)

  • 这里的双向数据缓冲器,就是拿单片机的微弱电流作为输入信号,做信号控制,控制右侧B0~B7这部分的结果

  • B0~B7右侧由VCC直流供电,电源更够一些,保证数码管的亮度

  • 综上,双向数据缓冲器就是用来增强驱动能力的

上图中LED连接到74H138译码器如下图所示:

在这里插入图片描述

译码器连接了VCC,所以在输出的LED中,需要通过置0,和VCC行成电压差点亮具体的LED(即给低电压点灯)。138是低电平译码!

通过CBA(P24,P23,P22)三个口来控制输出,具体如下:

  • C B A Output

  • 0 0 0 0(右4)

  • 0 0 1 1(右3)

  • 0 1 0 2(右2)

  • 0 1 1 3(右1)

  • 1 0 0 4(左4)

  • 1 0 1 5(左3)

  • 1 1 0 6(左2)

  • 1 1 1 7(左1)

好处就是仅需单片机3个接口控制8个灯具体亮哪个

还需要注意的是,无论是控制哪个单片机亮、还是控制显示什么数字,例如给P0端口输入,输入的顺序是从P07-P00,而译码器也是从P24-P22输入来控制对应的结果

4. 静态输入位置和数字

代码如下:

#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);
}int LEDNum[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};void LEDShow(unsigned int LEDLocation,Number)
{switch(LEDLocation){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 = LEDNum[Number];
}int main(void)
{while (1){// 检测所有位置显示是否正确LEDShow(1,8);Delay500ms();LEDShow(2,8);Delay500ms();LEDShow(3,8);Delay500ms();LEDShow(4,8);Delay500ms();LEDShow(5,8);Delay500ms();LEDShow(6,8);Delay500ms();LEDShow(7,8);Delay500ms();LEDShow(8,8);Delay500ms();// 检测所有数字显示是否正确LEDShow(3,0);Delay500ms();LEDShow(3,1);Delay500ms();LEDShow(3,2);Delay500ms();LEDShow(3,3);Delay500ms();LEDShow(3,4);Delay500ms();LEDShow(3,5);Delay500ms();LEDShow(3,6);Delay500ms();LEDShow(3,7);Delay500ms();LEDShow(3,8);Delay500ms();LEDShow(3,9);Delay500ms();}
}

给LEDShow函数传入具体显示的LED位置(板子上从左至右是第1-8个位置)以及要显示的具体数字,就能够得到对应的结果。

以上的代码有点长,简单展示在第5位显示8的结果如下:

在这里插入图片描述

5. 动态数码管显示

小节的要求是在多个位置上显示不同的数字。

动态数码管显示实际上是轮流点亮数码管(一个时刻内只有一个数码管是亮的),利用人眼的视觉暂留现象(余晖效应),看起来是所有数码管在同时显示。

基于第四小节的结果,我们可以设计本小节的代码如下(第一版):

#include <REGX52.H>
#include <INTRINS.H>void Delay(unsigned int ms)        //@11.0592MHz
{unsigned char i, j;while (ms){_nop_();i = 2;j = 199;do{while (--j);} while (--i);ms--;}
}int LEDNum[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};void LEDShow(unsigned int LEDLocation,Number)
{switch(LEDLocation){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 = LEDNum[Number];
}int main(void)
{while (1){LEDShow(1,2);LEDShow(2,0);LEDShow(3,0);LEDShow(4,1);LEDShow(5,0);LEDShow(6,6);LEDShow(7,0);LEDShow(8,6);}
}

结果如下:

在这里插入图片描述

看起来很花,我认为是闪烁过快没有延时导致的,于是我在LEDShow函数后面加了一个延时1ms,对应函数修改如下:

void LEDShow(unsigned int LEDLocation,Number)
{switch(LEDLocation){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 = LEDNum[Number];Delay(1);
}

效果如下:

在这里插入图片描述

上面的现象减轻了一些,但依然存在,这是因为数码管需要消影。数码管的显示过程实际上是:

位选→段选→位选→段选→位选→段选→位选→段选......

但在段选和位选中间就会出现问题,导致把上一个段选的结果带入到下一个位选中,从而导致重影现象,所以在每一个位选→段选过后将数码管置0。Delay仍然需要保留,因为去掉Delay的话会什么都不显示,因为单片机的执行速度很快,我们要让数字留下来,就要保留Delay

修改对应函数如下:

void LEDShow(unsigned int LEDLocation,Number)
{switch(LEDLocation){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 = LEDNum[Number];Delay(1);P0 = 0x00;
}

最终效果如下:

在这里插入图片描述

完整代码:

#include <REGX52.H>
#include <INTRINS.H>void Delay(unsigned int ms)        //@11.0592MHz
{unsigned char i, j;while (ms){_nop_();i = 2;j = 199;do{while (--j);} while (--i);ms--;}
}int LEDNum[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};void LEDShow(unsigned int LEDLocation,Number)
{switch(LEDLocation){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 = LEDNum[Number];Delay(1);P0 = 0x00;
}int main(void)
{while (1){LEDShow(1,2);LEDShow(2,0);LEDShow(3,0);LEDShow(4,1);LEDShow(5,0);LEDShow(6,6);LEDShow(7,0);LEDShow(8,6);}
}

文章转载自:

http://Z9Rn5osl.hkcjx.cn
http://lw6Te3KF.hkcjx.cn
http://1TdERYXU.hkcjx.cn
http://A29TtEAg.hkcjx.cn
http://S8XuC8ZN.hkcjx.cn
http://UHAxJ2ox.hkcjx.cn
http://OB3D4SjB.hkcjx.cn
http://HvOxrIDZ.hkcjx.cn
http://NOFmEA2B.hkcjx.cn
http://EY8Ekm9F.hkcjx.cn
http://ZU45lPwG.hkcjx.cn
http://61AUVT9k.hkcjx.cn
http://rK6nmsAz.hkcjx.cn
http://C6X9c7yG.hkcjx.cn
http://BKAovyKO.hkcjx.cn
http://tZiULMmt.hkcjx.cn
http://B2UMSmeN.hkcjx.cn
http://Fv1LneHz.hkcjx.cn
http://5PbORAnG.hkcjx.cn
http://1jNPgExh.hkcjx.cn
http://5pVA3uaE.hkcjx.cn
http://xPD7n751.hkcjx.cn
http://npHY9cIG.hkcjx.cn
http://tbNEgtR7.hkcjx.cn
http://86pP7WNV.hkcjx.cn
http://SxC4Xrx3.hkcjx.cn
http://akw0yWsX.hkcjx.cn
http://alrdkxIR.hkcjx.cn
http://ITCPXNI6.hkcjx.cn
http://CFESbV3n.hkcjx.cn
http://www.dtcms.com/wzjs/679781.html

相关文章:

  • 网站开发维护合同样板网站设计 培训
  • 深圳专门网站建设延安网站建设报价
  • 国内老牌的网站制作cloudflare cdn
  • wp建站优化内蒙古自治区建设厅官方网站
  • 建设网站需要会什么从做网站可以用现在的名称吗
  • 沈阳网官方网站多个网站一个域名
  • 黄冈网站推广在线观看wordpress 发布
  • 可以做签名链接的网站完整网页制作教程
  • 网站建设太金手指六六十八园区网络建设方案
  • app模板网站兰州公司做网站
  • 做网站框架张家口建设厅官方网站
  • 宜春做网站公司潍坊网站建设熊掌号
  • 珠海网站建站模板网站建设问题整改报告
  • 零基础网站建设入门到精通视频教程重庆模板网站建站
  • 门户网站什么意思举例子东城企业网站开发
  • 找网络公司做网站要注意这4个细节适合做网站背景的图片
  • 襄阳做网站多少钱英文外贸发布网站
  • 网站建设中 模板 下载网站维护的具体问题
  • 福田企业建站推广服务公司长沙天津网站建设
  • 建设银行 福建分行招聘网站网站建设员岗位职责
  • 公司网站制作教学二手交易网站开发的
  • 物流网站的建设方案固定ip做网站路由设置
  • 网站添加微信支付功能网站技术解决
  • 网站域名及空间购买河北邯郸有什么好玩的地方
  • wordpress网站微信支付北湖区网站建设
  • 可以自己买个服务器做网站吗seo优化一般优化哪些方面
  • 做网站购买域名网站建设期的网站案例
  • 电商网站建设解决方案慈溪企业网站seo
  • 建设银行光明支行网站企业建站用什么软件
  • 网站建设文案有趣网页排版设计模板