51单片机学习(五)数码管显示
如有大佬发现我文章里的错误希望多多指出或者有缺少的也欢迎告诉我我会尽快补充上去的感谢各位的支持要互三的d我哦一.数码管数码管显示屏和U4 74HC245U574H138译码器一位数码管引脚定义一个数码管由八个LED组成连接方式共阴阴角都连在一起共阳阳极都接在一起就近原则如何显示数字假设需要显示6共阴极则需要将AFEDGC点亮首先公共端接地10111110为段码共阳极公共端选中位选段给相应数字四位一体数码管每一位的公共端分别引出来所有相同的位选段连在一起在第三位上显示数字1如何驱动共阴首先确定位码共阴接1不通接0导通再给段码要点亮一就是点亮BC段共用引脚静态数码管显示的缺点节省了引脚但是在同一时刻只有位数码管被点亮就算点亮多个显示的也是相同的数字这边就是数电的知识C51数组超过范围有可能不会报错但是结果不对C51子函数二.程序编写数码管显示任意数字让第三个数码管显示6注意顺序从下往上读#include REGX52.H void main() { //第三个是LED6接在Y5上 P2_41; P2_30; P2_21; //5的二进制为101 P00x7D;//acdefg亮则对应0111 1101转为十六进制就是0x7D while(1) { } }如果要换成第四位显示6改成P2_20即可运用子函数数组大括号后面的分号别忘了我就是因为忘了报了一堆错找了半天原因#include REGX52.H unsigned char SgnTable[]{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F}; void Sgn(unsigned char Location,unsigned char Number) { switch(Location) { case 1:P2_41;P2_31;P2_21;break; case 2:P2_41;P2_31;P2_20;break; case 3:P2_41;P2_30;P2_21;break; case 4:P2_41;P2_30;P2_20;break; case 5:P2_40;P2_31;P2_21;break; case 6:P2_40;P2_31;P2_20;break; case 7:P2_40;P2_30;P2_21;break; case 8:P2_40;P2_30;P2_20;break; } P0SgnTable[Number]; } void main() { Sgn(7,2); while(1) { } }结果就是第7个数码管显示2动态数码管显示需要加消影因为数码管在工作时是先位选再段选之后就是循环先选位置但是位置还残留着上一个函数的数字上一个段选通过新的段选数据改变但在改变之前先进行了位选所以需要在段选之后加一个清零步骤对下一位就没有影响了#include REGX52.H unsigned char SgnTable[]{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F}; typedef unsigned int u16; void delay(u16 i) { while(i--); } void Sgn(unsigned char Location,unsigned char Number) { switch(Location) { case 1:P2_41;P2_31;P2_21;break; case 2:P2_41;P2_31;P2_20;break; case 3:P2_41;P2_30;P2_21;break; case 4:P2_41;P2_30;P2_20;break; case 5:P2_40;P2_31;P2_21;break; case 6:P2_40;P2_31;P2_20;break; case 7:P2_40;P2_30;P2_21;break; case 8:P2_40;P2_30;P2_20;break; } P0SgnTable[Number]; delay(1000); P00x00; //清0 } void main() { while(1) { Sgn(1,1); delay(20000); Sgn(2,2); delay(20000); Sgn(3,3); delay(20000); } }右下角74h595
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2468280.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!