- 打卡等级:以坛为家I
- 打卡总天数:367
- 最近打卡:2025-09-18 12:23:39
已绑定手机
中级会员
- 积分
- 339
|
#include "STC8H.h"/*单片机:STC8G1K08-TSSOP20*/
unsigned char xs[3]/*显示*/;
unsigned char code dm[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x76,0x00};/*共阴段码,1亮,0灭*/
void delayms(unsigned int i){while(i--);}/*延时函数*/
//6 个IO 可以驱动 30 个LED 这种数码管是由单片机I/O口直接驱动,I/O口要在工作在3态(高、低电平和高阻),驱动程序有点复杂。
//P37 1:A1+,B1+,E1+,H1+, C1-,D1-,F1-,G1-,D3-;
//P36 2:F1+,A2+,B2+,D2+,E2+, A1-,C2-,F2-,G2-;
//P35 3:G1+,F2+,H2+,B3+, B1-,A2-,E3-,F3-,G3-;
//P34 4:C1+,G2+,C3+,F3+,H3+, E1-,B2-,A3-;
//P33 5:D1+,C2+,A3+,G3+, E2-,B3-,C3-;
//P32 6:D3+,E3+, H1-,D2-,H2-,H3-;
void smg()/*单排6脚数码管*/
{
P3M0=0xfc;P3M1=0x7c;/*正极强推挽,负极开漏*/P37=1;/*1+*/
P36=~(xs[0]>>0)&1;/*A1-*/P35=~(xs[0]>>1)&1;/*B1-*/P34=~(xs[0]>>4)&1;/*E1-*/
P32=~(xs[0]>>7)&1;/*H1-*/delayms(4);/*亮度*/P3=0xfc;/*消影*/
P3M0=0xfc;P3M1=0xbc;/*正极强推挽,负极开漏*/P36=1;/*2+*/
P37=~(xs[0]>>5)&1;/*F1-*/P35=~(xs[1]>>0)&1;/*A2-*/P34=~(xs[1]>>1)&1;/*B2-*/
P32=~(xs[1]>>3)&1;/*D2-*/P33=~(xs[1]>>4)&1;/*E2-*/ delayms(5);/*亮度*/P3=0xfc;/*消影*/
P3M0=0xfc;P3M1=0xdc;/*正极强推挽,负极开漏*/P35=1;/*3+*/
P37=~(xs[0]>>6)&1;/*G1-*/P36=~(xs[1]>>5)&1;/*F2-*/P32=~(xs[1]>>7)&1;/*H2-*/
P33=~(xs[2]>>1)&1;/*B3-*/delayms(4);/*亮度*/P3=0xfc;/*消影*/
P3M0=0xfc;P3M1=0xec;/*正极强推挽,负极开漏*/P34=1;/*4+*/
P37=~(xs[0]>>2)&1;/*C1-*/P36=~(xs[1]>>6)&1;/*G2-*/P33=~(xs[2]>>2)&1;/*C3-*/
P35=~(xs[2]>>5)&1;/*F3-*/P32=~(xs[2]>>7)&1;/*H3-*/ delayms(5);/*亮度*/P3=0xfc;/*消影*/
P3M0=0xfc;P3M1=0xf7;/*正极强推挽,负极开漏*/P33=1;/*5+*/
P37=~(xs[0]>>3)&1;/*D1-*/P36=~(xs[1]>>2)&1;/*C2-*/P34=~(xs[2]>>0)&1;/*A3-*/
P35=~(xs[2]>>6)&1;/*G3-*/delayms(4);/*亮度*/P3=0xfc;/*消影*/
P3M0=0xfc;P3M1=0xfb;/*正极强推挽,负极开漏*/P32=1;/*6+*/
P37=~(xs[2]>>3)&1;/*D3-*/P35=~(xs[2]>>4)&1;/*E3-*/delayms(2);/*亮度*/P3=0xfc;/*消影*/
}
void main()
{
unsigned int i;unsigned char b,s,g;i=b=s=g=0;
P1M0=0; P1M1=0; P3M0=0xfc; P3M1=0xfc;P5M0=0; P5M1=0;/*端口模式*/
while(1)
{
i++;if(i==5000){g++;i=0;}if(g>17){s++;g=0;}if(s>9){b++;s=0;}if(b>9){b=0;}
xs[0]=dm[b];xs[1]=dm[s];xs[2]=dm[g];
smg();
}
}
//效果还行,初步驱动成功,暂未发觉BUG
|
|