前几年制作过一个“直连”方式的数码管测试器,最近突发奇想,想用单片机再次制作一个数码管测试器,这个测试器要充分利用单片机功能,用多种方式对数码管进行测试,比如,先逐段点亮,然后再从0~9分别显示,周而复始。
用“Proteus 8”设计了电路原理图(PNP管驱动共阴数码管)。
考虑到库存有大量的拆机P-MOS管(型号为:A7SHB),所以,又设计了采用P-MOS管驱动的电路。
NPN管驱动共阳LED数码管电路原理图:
经实验,共阳数码管不需要三极管放大,直接通过I/O口驱动即可。由于单片机有多余的I/O口,所以共阴、共阳数码管合并在一起,共阴由P2口驱动,共阳由P3口驱动。
单片机采用“STC15F2K08S2”,该单片机有内部RC振荡器,可以省略外部晶振。
用面包板搭电路,运行正常。
用“立创”的EDA设计了PCB板:
焊接完成后的成品:
局部展示:
第一次焊接0402的电阻,这可能是我能焊接的最小电阻了。
LED数码管测试实例(0.56寸共阴数码管)。
LED数码管测试实例(1寸共阳数码管)。
代码:
- #include <STC15.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- void Delay1ms( uint k );
- uchar da = 0xFE; //11111110
- uchar code table[] ={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //共阳段码
- void main()
- {
- while(1)
- {
- uchar i = 0;
- for( i=0; i<8; i++ ) //依次显示各段:a~h
- {
- P2 = da; //共阴
- P3 = da; //共阳 Delay1ms(500);
- da = _crol_( da,1 );
- }
-
- for( i=0; i<10; i++ ) //依次显示数字:0~9
- {
- P2 = table[i];
- P3 = table[i];
- Delay1ms(500);
- }
- }
- }
- void Delay1ms( uint n ) <a>//@12.000MHz</a>
- {
- uint k;
- for( k=0; k<n; k++ )
- {
- unsigned char data i, j;
- i = 12;
- j = 169;
- do
- {
- while (--j);
- } while (--i);
- }
- }
复制代码
|