| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #ifndef __DIGITRON_H__
- #define __DIGITRON_H__
- sbit led0=P2^7; //LED位选,因为布线不是按顺序布的,程序定义一下就可以了,下同
- sbit led1=P2^6;
- sbit led2=P2^5;
- sbit led3=P2^4;
- sbit COL=P1^3;
- #define DataLED P0 //定义LED数据口
- unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- void delay(unsigned char k) //延时函数
- {
- unsigned char i,j;
- for(i=0;i<k;i++)
- for(j=0;j<50;j++);
- }
- #if 1
- extern void DisDIG_quiet(unsigned char post, unsigned char num) //忽略P0^7
- {
- if(num < 10)
- {
- P0_0 = tab[num]&(1<<0)?1:0; //数据
- P0_1 = tab[num]&(1<<1)?1:0;
- P0_2 = tab[num]&(1<<2)?1:0;
- P0_3 = tab[num]&(1<<3)?1:0;
- P0_4 = tab[num]&(1<<4)?1:0;
- P0_5 = tab[num]&(1<<5)?1:0;
- P0_6 = tab[num]&(1<<6)?1:0;
- if(post == 0) led0 = led1 = led2 = led3 = 1; //全关
- else if(post == 1) led0 = 0; //选择
- else if(post == 2) led1 = 0;
- else if(post == 3) led2 = 0;
- else if(post == 4) led3 = 0;
- }
- else if(num == 0xFF)
- {
- if(post == 0) led0 = led1 = led2 = led3 = 1; //全开
- else if(post == 1) led0 = 1; //选择
- else if(post == 2) led1 = 1;
- else if(post == 3) led2 = 1;
- else if(post == 4) led3 = 1;
- }
- }
- extern void DisDIG_act(unsigned int num) //动态显示四位函数 数字
- {
- DisDIG_quiet(1,(num/1000)%10);delay(10);DisDIG_quiet(1,0xFF);
- DisDIG_quiet(2,(num/100)%10);delay(10);DisDIG_quiet(2,0xFF);
- DisDIG_quiet(3,(num/10)%10);delay(10);DisDIG_quiet(3,0xFF);
- DisDIG_quiet(4,(num/1)%10);delay(10);DisDIG_quiet(4,0xFF);
- }
- #else
- extern void DisDIG_act(unsigned int num) //动态显示四位函数 数字
- {
- led0=0;DataLED = (tab[(num/1000)%10]&0x7F)|((P0_7?1:0)<<7);delay(10);led0=1;
- led1=0;DataLED = (tab[(num/100)%10]&0x7F)|((P0_7?1:0)<<7);delay(10);led1=1;
- led2=0;DataLED = (tab[(num/10)%10]&0x7F)|((P0_7?1:0)<<7);delay(10);led2=1;
- led3=0;DataLED = (tab[(num/1)%10]&0x7F)|((P0_7?1:0)<<7);delay(10);led3=1;
- }
- extern void DisDIG_quiet(unsigned char post, unsigned char num) //静态显示一位函数 0显示 1关闭 ; 数字
- {
- if(post == 0) led0 = led1 = led2 = led3 = 0;
- else if(post == 1) led0 = 0;
- else if(post == 2) led1 = 0;
- else if(post == 3) led2 = 0;
- else if(post == 4) led3 = 0;
- DataLED = (tab[num%10]&0x7F)|((P0_7?1:0)<<7);
- delay(10);
- }
- extern void ClearDIG(void) //显示函数
- {
- led0=0;DataLED=0x7f|((P0_7?1:0)<<7);delay(10);led0=1;
- }
- #endif
- #endif
|