四位数码管中文资料
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
接下来将会是对数码管的 A,B,C,D 四位的控制。由于上面的基础,相信四位控制显示 0000
——9999 的过程将不会很复杂。
异曲同工:0000——9999
#include<stc12c2052.h>
7
单片机,一个神奇的东西
#define weixuan P1
sbit a= P3^5;
sbit b =P3^4;
while(1)
{ for(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*55~~1045ms=1s
{
a=1;weixuan=shuzi[k];t0yanshi();a=0;//4ms
是真实有效的。接下来的任务就是对 ABC 位进行控制。
7
单片机,一个神奇的东西
下面是实际的焊接之中,考虑到实际电路的连接顺序,采用 下面的连接。
引脚 1.7
1.6
1.5 1.4 1.3
1.2
1.1
1.0
1
2
3
4
11
5
7
10
1
2
3
4
11
5
7
10
十六
0
0
0
1
0
0
1
0
0
0x24
1
1
1
1
0
1
1
0
1
0xed
软件准备
将单片机的 I/O 接口设置成推挽输出。 P1M0=0X00; P1M1=0XFF; P3M0=0X00; P3M1=0XFF;
控制思路:
第三四位作为秒表的秒针部分,每秒钟变化一次。当第四位由 0 变到 9 时,第四位自动清零, 第三位由 0 变成 1,实现加一。 软件的实现分为两部分。首先先实现后两位的秒针功能,先将前两位置之。下面是编程的设 想。 由于数码管的引脚是共阳极,所有的阳极都是连接在一起的,因此不能同时给所有的阳极供 电,如果那样的话,所有的数码管会有相同的显示方式。考虑到这一情况,只能采用和点阵 屏类似的扫描方法,即将数码管分成四个一位的情况,然后每个 4ms 扫描一次的方法。
} } } } } }
更进一步:1 小时定时器
#include<stc12c2052.h>
#define weixuan P1
sbit a= P3^5;
sbit b =P3^4;
sbit c =P3^3;
sbit d= P3^2;
void t0yanshi()//延时 4ms
{
TMOD=0X01;//十六位
P1M0=0X00;
P1M1=0XFF;//设置 P1,P3 接口的工作方式为推挽输出。
P3M0=0X00;
P3M1=0XFF;
/*****************************************************************/
7
单片机,一个神奇的东西
a=0;b=0;c=0;d=0;
b=1;weixuan=shuzi[l];t0yanshi();b=0;//4ms
//4ms*4=16ms;
c=1;weixuan=shuzi[m];t0yanshi();c=0;//4ms
d=1;weixuan=shuzi[n];t0yanshi();d=0;//4ms
}
6
四位数码管的探究 《凌晨电子设计》邮箱:873198565@qq.com
TL0 = 0x60;
//设置定时初值
TH0 = 0xF0;
//设置定时初值
TR0=1;
while(TF0==0) ;
TF0=0;
}
void t1yanshi()//1ms
{
TMOD=0X10;
TL1 = 0x18;
//设置定时初值
TH1 = 0xFC;
//设置定时初值
TR1=1;
while(TF1==0) ;
sbit c =P3^3;
sbit d= P3^2;
void t0yanshi()//延时 4ms
{
TMOD=0X01;//十六位
TL0 = 0x60;
//设置定时初值
TH0 = 0xF0;
//设置定时初值
TR0=1;
while(TF0==0) ;
TF0=0;
}
void main()
{
unsigned int j,k,l;
下面将使用单片机控制数码管产生时钟的效果。由于单片机的计时是由软件延时的方法产
7
单片机,一个神奇的东西
生,所以说误差会有很大。因此本作品仅供娱乐。初期的想法是加入闹钟的概念。但是由于 闹钟的定时不易调整,只能通过计算机编写软件定闹,这样就不是时钟的简洁的目的。另外, 由于当单片机控制蜂鸣器响的时候,单片机控制数码管的部分势必会停止,这样又会影响时 钟的准确性。因此,首先要实现的只是单片机的简易时钟功能或者说只是一个最大为 1 小时 的秒表。
b=1;weixuan=shuzi[l];t0yanshi();b=0;//4ms
c=1;weixuan=shuzi[m];t0yanshi();c=0;//4ms
d=1;weixuan=shuzi[n];t0yanshi();d=0;//4ms
if(i<25)
{
b=1;weixuan=~0x20;t1yanshi();b=0;//1ms c=1;weixuan=~0x20;t1yanshi();c=0;//1ms
//小数点闪 烁
d=1;weixuan=~0x20;t1yanshi();d=0;//1ms
}
}
}
}
}
}
}
} 小数点可能是由 3 位共同控制的,暂时还没有发现时那两位控制的,所以干脆使用三位控制。 如果小数点的控制也使用 4ms 的延时,那么每一位数码管显示的时间间隔将会是 28ms,经 过实际的测试发现能够明显感觉出闪烁来。由于小数点的显示是连续的,即连续亮 25 个周 期,灭 25 个周期,所以使用 1ms 的延时并不会有什么影响。
四位数码管的探究
《凌晨电子设计》邮箱:873198565@qq.com
四位数码管的探究
硬件准备
四位共阳数码管一块,1K 电阻 4 只。数码管的引脚图如下所示:
使用的单片机是 STC12C2052,位选可以使用 P1 接口控制。 参照下面数据手册的内容,可以看出 P3.5,3.4,3.3,3.2 均能够作为 I/O 接口以推挽方式使 用。由于数码管所能承受的电流较小,所以外加 1K 的限流电阻。 单片机 P3.5,3.4,3.3,3.2 四个接口可以作为数码阳极一端,利用推挽方式输出高电平, P1 接口作为数码管的段选,输出低电平,驱动每一段数码管,这就为设想的实现取得了理 论的基础。证明了使用 20 脚单片机控制数码管产生时钟的效果是切实可行的。下面关键的 部分就成了数码管的编程阶段了。
P1M0=0X00;
P1M1=0XFF;//设置 P1,P3 接口的工作方式为推挽输出。
P3M0=0X00;
P3M1=0XFF;
while(9)
{
unsigned int j;
d=1;
for(j=0;j<=9;j++)
{
weixuan=shuzi[j];
yanshi(1000);
}
}
} 这样的话,第 D 位会大约每一秒显示一个数字,从 0 到 9 不断地循环。证明了段选的设置
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(1)
{
for(k=0;k<10;k++)//千位
{
for(k=0;k<10;k++)//个位循环
{
for(l=0;l<125;l++)//125*8ms=1000ms=1s
{
c=1;weixuan=shuzi[j];t0yanshi();c=0;//4ms
d=1;weixuan=shuzi[k];t0yanshi();d=0;//4ms
}
}
}
}
}
2
0
0
1
1
0
0
0
1
0x31
3
1
0
1
0
0
0
0
1
0xa1
4
1
1
1
0
1
0
0
0
0xe8
5
1
0
1
0
0
0
1
0
0xa2
6
0
0
1
0
0
0
1
0
0x22
7
1
1
1
0
0
1
0
1
0xe5
8
0
0
1
0
0
0
0
0
0x20
9
1
0
1
0
0
0
0
0
0xa0
下面是通过动态扫描的方法,利用单片机控制数码管的后两位(C 和 D),来实现数码管从 00 显示到 99 的一个程序。单片机每 4ms 输出一个信号,控制数码管显示一个数字,利用人 眼的视觉暂停效果来实现显示变化的过程。由于外接电阻 1K,所以单片机在亮度上不是很 好,在以后的操作中还是需要改善的。
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};
/********************************推挽设置**************************/
{
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--------1s
{
a=1;weixuan=shuzi[k];t0yanshi();a=0;//4ms
sbit b =P3^4;
sbit c =P3^3;
sbit d= P3^2;
void yanshi(unsigned int a )
{
unsigned int i;
while(--a)
{
for(i=0;i<600;i++) ;
}
}
void main()
{
code unsigned char shuzi[]={0x11,0xd7,0x25,0x85,0xc3,0x89,0x09,0xd5,0x01,0x81};
sbit c =P3^3;
sbit d= P3^2;
void t0yanshi()//延时 4ms
{
TMOD=0X01;//十六位
TL0 = 0x60;
//设置定时初值
TH0 = 0xF0;
//设置定时初值
TR0=1;
while(TF0==0) ;
TF0=0;
}
void main()
{
unsigned char i, k,l,m,n;
P1M1=0XFF;//设置 P1,P3 接口的工作方式为推挽输出。
P3M0=0X00;
P3M1=0XFF;
/*****************************************************************/
a=0;b=0;c=0;d=0;
while(1)
{
for(j=0;j<10;j++)//十位循环
显示 引脚 0 1 2
P3.5
P3.4
P3.3
P3.2
A
B
C
D
P1.7 P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
十六
12
4
5
7
10
Hale Waihona Puke Baidu11
Dp
00
0
1
0
0
0
1
11
11
0
1
0
1
1
1
D7
00
1
0
0
1
0
1
25
2
四位数码管的探究 《凌晨电子设计》邮箱:873198565@qq.com
两位数码管源程序:00-99
#include<stc12c2052.h> #define weixuan P1 sbit a= P3^5; sbit b =P3^4;
4
四位数码管的探究 《凌晨电子设计》邮箱:873198565@qq.com
3
10
0
0
0
1
0
1
85
4
11
0
0
0
0
1
1
C3
5
10
0
0
1
0
0
1
89
6
00
0
0
1
0
0
1
09
7
11
0
1
0
1
0
1
D5
8
00
0
0
0
0
0
1
01
9
10
0
0
0
0
0
1
81
下面是对 D 位数码管的控制,以测试段选的有效性。
#include<stc12c2052.h>
#define weixuan P1
sbit a= P3^5;
code unsigned char shuzi[]={0x24,0xed,0x31,0xa1,0xe8,
0xa2,0x22,0xe5,0x20,0xa0};
/********************************推挽设置**************************/
P1M0=0X00;