Digitron.H 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #ifndef __DIGITRON_H__
  2. #define __DIGITRON_H__
  3. sbit led0=P2^7; //LED位选,因为布线不是按顺序布的,程序定义一下就可以了,下同
  4. sbit led1=P2^6;
  5. sbit led2=P2^5;
  6. sbit led3=P2^4;
  7. sbit COL=P1^3;
  8. #define DataLED P0 //定义LED数据口
  9. unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  10. void delay(unsigned char k) //延时函数
  11. {
  12. unsigned char i,j;
  13. for(i=0;i<k;i++)
  14. for(j=0;j<50;j++);
  15. }
  16. #if 1
  17. extern void DisDIG_quiet(unsigned char post, unsigned char num) //忽略P0^7
  18. {
  19. if(num < 10)
  20. {
  21. P0_0 = tab[num]&(1<<0)?1:0; //数据
  22. P0_1 = tab[num]&(1<<1)?1:0;
  23. P0_2 = tab[num]&(1<<2)?1:0;
  24. P0_3 = tab[num]&(1<<3)?1:0;
  25. P0_4 = tab[num]&(1<<4)?1:0;
  26. P0_5 = tab[num]&(1<<5)?1:0;
  27. P0_6 = tab[num]&(1<<6)?1:0;
  28. if(post == 0) led0 = led1 = led2 = led3 = 1; //全关
  29. else if(post == 1) led0 = 0; //选择
  30. else if(post == 2) led1 = 0;
  31. else if(post == 3) led2 = 0;
  32. else if(post == 4) led3 = 0;
  33. }
  34. else if(num == 0xFF)
  35. {
  36. if(post == 0) led0 = led1 = led2 = led3 = 1; //全开
  37. else if(post == 1) led0 = 1; //选择
  38. else if(post == 2) led1 = 1;
  39. else if(post == 3) led2 = 1;
  40. else if(post == 4) led3 = 1;
  41. }
  42. }
  43. extern void DisDIG_act(unsigned int num) //动态显示四位函数 数字
  44. {
  45. DisDIG_quiet(1,(num/1000)%10);delay(10);DisDIG_quiet(1,0xFF);
  46. DisDIG_quiet(2,(num/100)%10);delay(10);DisDIG_quiet(2,0xFF);
  47. DisDIG_quiet(3,(num/10)%10);delay(10);DisDIG_quiet(3,0xFF);
  48. DisDIG_quiet(4,(num/1)%10);delay(10);DisDIG_quiet(4,0xFF);
  49. }
  50. #else
  51. extern void DisDIG_act(unsigned int num) //动态显示四位函数 数字
  52. {
  53. led0=0;DataLED = (tab[(num/1000)%10]&0x7F)|((P0_7?1:0)<<7);delay(10);led0=1;
  54. led1=0;DataLED = (tab[(num/100)%10]&0x7F)|((P0_7?1:0)<<7);delay(10);led1=1;
  55. led2=0;DataLED = (tab[(num/10)%10]&0x7F)|((P0_7?1:0)<<7);delay(10);led2=1;
  56. led3=0;DataLED = (tab[(num/1)%10]&0x7F)|((P0_7?1:0)<<7);delay(10);led3=1;
  57. }
  58. extern void DisDIG_quiet(unsigned char post, unsigned char num) //静态显示一位函数 0显示 1关闭 ; 数字
  59. {
  60. if(post == 0) led0 = led1 = led2 = led3 = 0;
  61. else if(post == 1) led0 = 0;
  62. else if(post == 2) led1 = 0;
  63. else if(post == 3) led2 = 0;
  64. else if(post == 4) led3 = 0;
  65. DataLED = (tab[num%10]&0x7F)|((P0_7?1:0)<<7);
  66. delay(10);
  67. }
  68. extern void ClearDIG(void) //显示函数
  69. {
  70. led0=0;DataLED=0x7f|((P0_7?1:0)<<7);delay(10);led0=1;
  71. }
  72. #endif
  73. #endif