4位共阴极数码管单片机驱动
宏晶12系列单片机单片机驱动4位数码管计数显示。
操作方法
(01)1、共阴极数码管引脚分析共阴极数码管 是指每一位数码管的阴极,连接到电源的负极上。也就是图中所指1,2,3,4公共端。如果不知道是共阴极和共阳极可以用万用表,或者直接找一个电源试一试。电源测试的话最好串一个限流电阻,否则容易烧坏数码管。
(02)2、电路原理图P0:控制显示段P2:控制显示相应的位由于单片机的I/O驱动电流有限所以P0口需要加上拉电阻。P2口直接连接数码管的选择位即可。
软件的编写
(01)1、编写的方式:(1)、驱动方式P2口相应的位置0 即选择要显示的数码管位P0口相应的位置1即可显示相应的数码管段(2)、 采用动态扫描的方式进行显示4位即每隔一段时间显示一位,循环扫 描,由于辉光效应,肉眼观察到的是4位同时显示。下面编写相应的函数。
(02)2、数码管显示函数void Dig_OutPut(int i){unsigned char a , b ,c ,d;a = i%10; //提取个位b = (i/10)%10; //提取十位c = (i/100)%10; //提取百位d = (i/1000)%10; //提取千位if(i<=9){P2 = 0x07;P0 = DIG4_TABLE[a];Delay1ms();Delay1ms();Delay1ms();}if((i<=99)&&(i>9)){P2 = 0x07;P0 = DIG4_TABLE[a];Delay1ms();Delay1ms();P2 = 0x0b;P0 = DIG4_TABLE[b];Delay1ms();Delay1ms();}if((i<=999)&&(i>99)){P2 = 0x07;P0 = DIG4_TABLE[a];Delay1ms();Delay334us();P2 = 0x0b;P0 = DIG4_TABLE[b];Delay1ms();Delay334us();P2 = 0x0d;P0 = DIG4_TABLE[c];Delay1ms();Delay334us();}if((i<=9999)&&(i>999)){P2 = 0x07;P0 = DIG4_TABLE[a];Delay1ms();P2 = 0x0b;P0 = DIG4_TABLE[b];Delay1ms();P2 = 0x0d;P0 = DIG4_TABLE[c];Delay1ms();P2 = 0x0e;P0 = DIG4_TABLE[d];Delay1ms();}}函数分析:(1)、首先定义了4无符号类型的char数据,用于保存要显示数据的相应位。(2)、判断数据的大小来判断需要点亮的数码管位数。(3)、观察每个每个if判断语句里的延时都是4ms,这样做的原因是 保证再循环显示的过程中,每一位的数码管亮度一样。注意事项:延时的选择不宜过大也不宜过小,过小循环的太快,数据显示不正确;过大显示闪频,看不到4位同时显示的效果
(03)3、主函数void main(){int i,j;P0M0 = 0xff;P0M1 = 0x00;P2M0 = 0x00;P2M1 = 0x00;while(1){i++;j = 99;while(j--){Dig_OutPut(i);}}函数分析:(1)、定义两个整数型变量,i作为要显示的数,j延时技术。(2)、STC12系列单片机的使用IO口的时候需要进行设置io的工作模式,上面设置位传统51工作模式,即若上拉。(3)、while(1)重复执行这个函数里的内容,也就是动态显示。(4)、while(j--)的作用是间隔性的对i增加,如果直接执行的话,数字跑的太快我们根本就看不清。现在程序到单片机后:数码管会从0开始计数,间隔略小于1s。最大值是9999过了9999后就会显示乱码,可以添加函数对于大于9999的数进行处理。
(04)源代码#include<STC12C5A60S2.H>unsigned char DIG4_TABLE[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};void Delay10ms()//@11.0592MHz{unsigned char i, j;i = 108;j = 145;do{while (--j);} while (--i);}void Delay1ms()//@11.0592MHz{unsigned char i, j;i = 11;j = 190;do{while (--j);} while (--i);}void Delay334us()//@11.0592MHz{unsigned char i, j;i = 4;j = 148;do{while (--j);} while (--i);}void Dig_OutPut(int i){unsigned char a , b ,c ,d;a = i%10;b = (i/10)%10;c = (i/100)%10;d = (i/1000)%10;if(i<=9){P2 = 0x07;P0 = DIG4_TABLE[a];Delay1ms();Delay1ms();Delay1ms();}if((i<=99)&&(i>9)){P2 = 0x07;P0 = DIG4_TABLE[a];Delay1ms();Delay1ms();P2 = 0x0b;P0 = DIG4_TABLE[b];Delay1ms();Delay1ms();}if((i<=999)&&(i>99)){P2 = 0x07;P0 = DIG4_TABLE[a];Delay1ms();Delay334us();P2 = 0x0b;P0 = DIG4_TABLE[b];Delay1ms();Delay334us();P2 = 0x0d;P0 = DIG4_TABLE[c];Delay1ms();Delay334us();}if((i<=9999)&&(i>999)){P2 = 0x07;P0 = DIG4_TABLE[a];Delay1ms();P2 = 0x0b;P0 = DIG4_TABLE[b];Delay1ms();P2 = 0x0d;P0 = DIG4_TABLE[c];Delay1ms();P2 = 0x0e;P0 = DIG4_TABLE[d];Delay1ms();}}void main(){int i,j;P0M0 = 0xff;P0M1 = 0x00;P2M0 = 0x00;P2M1 = 0x00;while(1){i++;j = 99;while(j--){Dig_OutPut(i);}}没有找到添加源代码的位置,所以将整个代码放在了一个文件内。实际操作中,可以分成多个文件便于管理调用。
(05)实际的执行效果。后面的跳线有点乱。
特别提示
硬件部分 ,最好自己动手做一下。软件模拟还是有所差别的。
软件部分在于 循环扫描的延时
-
stdole32.tlb丢失或损坏怎么办
Excel是我们办公时候最常用的办公软件之一,但是有些win7专业版用户在使用Excel的过程中出现了“某个对象程序库丢失或损坏”的警告,这究竟是怎么回事呢?虽然有这个错误提示,但是Excel大部分功能还是可以正常使用的。下面由小编给大家介绍一下丢失或损坏的解决方法...
-
Excel中身份证号计算年龄公式是什么
Excel是一款电子表格软件,直观的界面、出色的计算功能和图表工具,再加上成功的市场营销,使Excel成为最流行的个人计算机数据处理软件。那么EXCEL中身份证号计算年龄公式是什么呢,下面我们就来了解一下。操作方法(01)在单元格中输入“=2018-MID(D4,7,)”。(02)D4表示身份证...
-
显卡位宽有哪些,有什么区别
为了更好的兼容,更好的DIY,我们需要了解一下显卡的位宽有哪些,有什么区别。操作方法(01)显卡位宽,主流有128bit还有64bit、128bit、256bit,显存的位宽越高,显卡的性能也就越好。(02)主流显卡采用128bit位宽,128位的显存能够适应大多数游戏。(03)显存的带宽=显存频率*显存位...
-
如何使用QQ云盘呢?怎么使用微云呢?
现在云盘比较流行,随着网络的发展,以前的U盘现在逐步减少,网络云盘可以通过网络盘帮我们保存资料,不需要再随身携带U盘了。下面和大家谈下如何使用qq云盘?操作方法(01)在电脑上登录QQ。(02)点击微云图标进入微云。(03)日常笔记可以在“笔记”栏打开,然后点击新建一个文件。...