赞
踩
要理解数码管的显示,我们先理解其原理,我们先看它的原理图。
原理图中com引脚是表示选择数码管的位,a1- dp1是表示选择数码管的段。
- void ShowSMG(unsigned int value,unsigned int pos)
- {
- InitHC138(6);
- P0=0x01<<pos;
- InitHC138(7);
- P0=value;
- }
该段代码是表示要选择哪一位数码管亮,并且使其表示相应的数据。选通573锁存器6通道后,表示进行选择数码管的位操作,对P0口赋值0x01<<pos,是利用余辉效应使得人眼反应不过来,人眼看到的都是亮的。之后选通7,对相应的数码管进行段选赋值。
之后就可以随意让数码管表示数据了。例如,我们表示一个日期。
- void SMG()
- {
- ShowSMG(SMG_duanma[2],0);
- Delay(500);
- ShowSMG(SMG_duanma[0],1);
- Delay(500);
- ShowSMG(SMG_duanma[2],2);
- Delay(500);
- ShowSMG(SMG_duanma[3],3);
- Delay(500);
-
- ShowSMG(SMG_duanma[16],4);
- Delay(500);
- ShowSMG(SMG_duanma[16],5);
- Delay(500);
-
- ShowSMG(SMG_duanma[0],6);
- Delay(500);
- ShowSMG(SMG_duanma[4],7);
- Delay(500);
- }

接下来,看完整的代码。
- #include<stc15f2k60s2.h>
- sbit HC138_A=P2^5;
- sbit HC138_B=P2^6;
- sbit HC138_C=P2^7;
- unsigned char code SMG_duanma[18]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
- 0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,
- 0xbf,0x7f};
- void InitHC138(unsigned int n)
- {
- switch(n)
- {
- case 4:
- HC138_C=1;
- HC138_B=0;
- HC138_A=0;
- break;
- case 5:
- HC138_C=1;
- HC138_B=0;
- HC138_A=1;
- break;
- case 6:
- HC138_C=1;
- HC138_B=1;
- HC138_A=0;
- break;
- case 7:
- HC138_C=1;
- HC138_B=1;
- HC138_A=1;
- break;
- }
- }
- void Delay(unsigned int t)
- {
- while(t--);
- }
- void jing()
- {
- InitHC138(5);
- P0=0x00;
- }
- void ShowSMG(unsigned int value,unsigned int pos)
- {
- InitHC138(6);
- P0=0x01<<pos;
- InitHC138(7);
- P0=value;
- }
- void SMG()
- {
- ShowSMG(SMG_duanma[2],0);
- Delay(500);
- ShowSMG(SMG_duanma[0],1);
- Delay(500);
- ShowSMG(SMG_duanma[2],2);
- Delay(500);
- ShowSMG(SMG_duanma[3],3);
- Delay(500);
-
- ShowSMG(SMG_duanma[16],4);
- Delay(500);
- ShowSMG(SMG_duanma[16],5);
- Delay(500);
-
- ShowSMG(SMG_duanma[0],6);
- Delay(500);
- ShowSMG(SMG_duanma[4],7);
- Delay(500);
- }
- void main()
- {
- jing();
- while(1)
- {
- SMG();
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。