四位共阳数码管的使用_第1页
四位共阳数码管的使用_第2页
四位共阳数码管的使用_第3页
四位共阳数码管的使用_第4页
四位共阳数码管的使用_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、四位数码管的探究 1硬件准备 1软件准备 2控制思路: 2下面是实际的焊接之中,考虑到实际电路的连接顺序,采用下面的连接。 4两位数码管源程序:00-99 4异曲同工:00009999 5更进一步:四位数字时钟 7四位数码管的探究硬件准备四位共阳数码管一块,1K电阻4只。数码管的引脚图如下所示:使用的单片机是STC12C2052,位选可以使用P1接口控制。参照下面数据手册的内容,可以看出P3.5,3.4,3.3,3.2均能够作为I/O接口以推挽方式使用。由于数码管所能承受的电流较小,所以外加1K的限流电阻。单片机P3.5,3.4,3.3,3.2四个接口可以作为数码阳极一端,利用推挽方式输出高电

2、平,P1接口作为数码管的段选,输出低电平,驱动每一段数码管,这就为设想的实现取得了理论的基础。证明了使用20脚单片机控制数码管产生时钟的效果是切实可行的。下面关键的部分就成了数码管的编程阶段了。下面将使用单片机控制数码管产生时钟的效果。由于单片机的计时是由软件延时的方法产生,所以说误差会有很大。因此本作品仅供娱乐。初期的想法是加入闹钟的概念。但是由于闹钟的定时不易调整,只能通过计算机编写软件定闹,这样就不是时钟的简洁的目的。另外,由于当单片机控制蜂鸣器响的时候,单片机控制数码管的部分势必会停止,这样又会影响时钟的准确性。因此,首先要实现的只是单片机的简易时钟功能或者说只是一个最大为1小时的秒表

3、。软件准备将单片机的I/O接口设置成推挽输出。P1M0=0X00;P1M1=0XFF;P3M0=0X00;P3M1=0XFF;控制思路:第三四位作为秒表的秒针部分,每秒钟变化一次。当第四位由0变到9时,第四位自动清零,第三位由0变成1,实现加一。软件的实现分为两部分。首先先实现后两位的秒针功能,先将前两位置之。下面是编程的设想。由于数码管的引脚是共阳极,所有的阳极都是连接在一起的,因此不能同时给所有的阳极供电,如果那样的话,所有的数码管会有相同的显示方式。考虑到这一情况,只能采用和点阵屏类似的扫描方法,即将数码管分成四个一位的情况,然后每个4ms扫描一次的方法。P3.5P3.4P3.3P3.2

4、ABCD显示P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0十六引脚124571011Dp00001000111111010111D72001001012531000010185411000011C35100010018960000100109711010101D58000000010191000000181下面是对D位数码管的控制,以测试段选的有效性。#include #define weixuan P1sbit a= P35;sbit b =P34;sbit c =P33;sbit d= P32;void yanshi(unsigned int a unsigned int

5、 i;while(-afor(i=0;i<600;i+ ;void main(code unsigned char shuzi=0x11,0xd7,0x25,0x85,0xc3,0x89,0x09,0xd5,0x01,0x81;P1M0=0X00;P1M1=0XFF;/设置P1,P3接口的工作方式为推挽输出。P3M0=0X00;P3M1=0XFF;while(9unsigned int j;d=1;for(j=0;j<=9;j+weixuan=shuzij;yanshi(1000;这样的话,第D位会大约每一秒显示一个数字,从0到9不断地循环。证明了段选的设置是真实有效的。接下来的任

6、务就是对ABC位进行控制。下面是实际的焊接之中,考虑到实际电路的连接顺序,采用下面的连接。引脚1.71.61.51.41.31.21.11.012341157101234115710十六0001001000x241111011010xed2001100010x313101000010xe85101000100xa26001000100x227111001010xe58001000000x209101000000xa0下面是通过动态扫描的方法,利用单片机控制数码管的后两位(C和D),来实现数码管从00显示到99的一个程序。单片机每4ms输出一个信号,控制数码管显示一个数

7、字,利用人眼的视觉暂停效果来实现显示变化的过程。由于外接电阻1K,所以单片机在亮度上不是很好,在以后的操作中还是需要改善的。两位数码管源程序:00-99#include #define weixuan P1sbit a= P35;sbit b =P34;sbit c =P33;sbit d= P32;void t0yanshi(/延时4msTMOD=0X01;/十六位TL0 = 0x60; /设置定时初值TH0 = 0xF0; /设置定时初值TR0=1;while(TF0=0 ;TF0=0;void main(unsigned int j,k,l;code unsigned char shuz

8、i=0x24,0xed,0x31,0xa1,0xe8,0xa2,0x22,0xe5,0x20,0xa0;/*推挽设置*/P1M0=0X00;P1M1=0XFF;/设置P1,P3接口的工作方式为推挽输出。P3M0=0X00;P3M1=0XFF;/*/ a=0;b=0;c=0;d=0;while(1for(j=0;j<10;j+/十位循环for(k=0;k<10;k+/个位循环for(l=0;l<125;l+/125*8ms=1000ms=1sc=1;weixuan=shuzij;t0yanshi(;c=0;/4msd=1;weixuan=shuzik;t0yanshi(;d=0

9、;/4ms接下来将会是对数码管的A,B,C,D四位的控制。由于上面的基础,相信四位控制显示00009999的过程将不会很复杂。异曲同工:00009999#include #define weixuan P1sbit a= P35;sbit b =P34;sbit c =P33;sbit d= P32;void t0yanshi(/延时4msTMOD=0X01;/十六位TL0 = 0x60; /设置定时初值TH0 = 0xF0; /设置定时初值TR0=1;while(TF0=0 ;TF0=0;void main(unsigned char i, k,l,m,n;code unsigned cha

10、r shuzi=0x24,0xed,0x31,0xa1,0xe8,0xa2,0x22,0xe5,0x20,0xa0;/*推挽设置*/P1M0=0X00;P1M1=0XFF;/设置P1,P3接口的工作方式为推挽输出。P3M0=0X00;P3M1=0XFF;/*/ a=0;b=0;c=0;d=0;while(1for(k=0;k<10;k+/千位for(l=0;l<10;l+/百位for(m=0;m<10;m+/十位for(n=0;n<10;n+/个位for(i=0;i<62;i+/62ms*16=992ms-1sa=1;weixuan=shuzik;t0yanshi

11、(;a=0;/4msb=1;weixuan=shuzil;t0yanshi(;b=0;/4ms /4ms*4=16ms;c=1;weixuan=shuzim;t0yanshi(;c=0;/4msd=1;weixuan=shuzin;t0yanshi(;d=0;/4ms更进一步:1小时定时器#include #define weixuan P1sbit a= P35;sbit b =P34;sbit c =P33;sbit d= P32;void t0yanshi(/延时4msTMOD=0X01;/十六位TL0 = 0x60; /设置定时初值TH0 = 0xF0; /设置定时初值TR0=1;wh

12、ile(TF0=0 ;TF0=0;void t1yanshi(/1msTMOD=0X10;TL1 = 0x18; /设置定时初值TH1 = 0xFC; /设置定时初值TR1=1;while(TF1=0 ;TF1=0;void main(unsigned char i, k,l,m,n;code unsigned char shuzi=0x24,0xed,0x31,0xa1,0xe8,0xa2,0x22,0xe5,0x20,0xa0;/*推挽设置*/P1M0=0X00;P1M1=0XFF;/设置P1,P3接口的工作方式为推挽输出。P3M0=0X00;P3M1=0XFF;/*/ a=0;b=0;c

13、=0;d=0;while(1for(k=0;k<6;k+/千位for(l=0;l<10;l+/百位for(m=0;m<6;m+/十位for(n=0;n<10;n+/个位for(i=0;i<55;i+/19*551045ms=1sa=1;weixuan=shuzik;t0yanshi(;a=0;/4msb=1;weixuan=shuzil;t0yanshi(;b=0;/4msc=1;weixuan=shuzim;t0yanshi(;c=0;/4msd=1;weixuan=shuzin;t0yanshi(;d=0;/4msif(i<25b=1;weixuan=0

14、x20;t1yanshi(;b=0;/1msc=1;weixuan=0x20;t1yanshi(;c=0;/1ms /小数点闪烁d=1;weixuan=0x20;t1yanshi(;d=0;/1ms小数点可能是由3位共同控制的,暂时还没有发现时那两位控制的,所以干脆使用三位控制。如果小数点的控制也使用4ms的延时,那么每一位数码管显示的时间间隔将会是28ms,经过实际的测试发现能够明显感觉出闪烁来。由于小数点的显示是连续的,即连续亮25个周期,灭25个周期,所以使用1ms的延时并不会有什么影响。欲穷千里目下面是24h定时器的源程序。由于实验板的面积有限,不能加入两个调整时间的开关,因此不能实现

15、调整时间,在未来的实验中将会解决这一问题。增加调节小时,分钟的程序。#include #define weixuan P1sbit a= P35;sbit b =P34;sbit c =P33;sbit d= P32;void t0yanshi(/延时1msTMOD=0X01;/十六位TL0 = 0x18; /设置定时初值TH0 = 0xFC; /设置定时初值TR0=1;while(TF0=0 ;TF0=0;void t1yanshi(/1msTMOD=0X10;TL1 = 0xB4; /设置定时初值TH1 = 0xFE; /设置定时初值TR1=1;while(TF1=0 ;TF1=0;voi

16、d main(unsigned char k,l,m,n;int i;code unsigned char shuzi=0x24,0xed,0x31,0xa1,0xe8,0xa2,0x22,0xe5,0x20,0xa0;/*推挽设置*/P1M0=0X00;P1M1=0XFF;/设置P1,P3接口的工作方式为推挽输出。P3M0=0X00;P3M1=0XFF;/*/ a=0;b=0;c=0;d=0;while(1for(k=0;k<2;k+/千位for(l=0;l<10;l+/百位if(k=2&&k=4 break;for(m=0;m<6;m+/十位for(n=0;n<10;n+/个位for(i=0;i<12000;i+/5ms*12000=1mina=1;weixuan=shuzik;t0yanshi(;a=0;/1msb=1;weixuan=shuzil;t0yanshi(;b=0;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论