简介:
通过 74hc595串行译码,利用3根线实现对数码管7段的控制,同时采用74hc138进行位译码,节省了单片机宝贵的端口资源。
具体程序分析如下。
相关论文下载:
![]() |
单片机从入门到精通系列讲座——数码管驱动方法.pdf |
1 /* 2 艾米电子工作室 3 4 实验七 数码管驱动应用 5 db :zliang 6 11/29/2007 8:00PM 7 网站:http://www.amy-studio.com/ 8 */ 9 10 #include <reg51.h> 11 12 sbit RCLK = P2^5; 13 sbit SCLK = P2^6; 14 sbit SDAT = P2^7; 15 16 sbit A_SEL = P2^2; 17 sbit B_SEL = P2^3; 18 sbit C_SEL = P2^4; 19 20 #define SM0 A_SEL = 0; B_SEL = 0; C_SEL = 0 21 #define SM1 A_SEL = 1; B_SEL = 0; C_SEL = 0 22 #define SM2 A_SEL = 0; B_SEL = 1; C_SEL = 0 23 #define SM3 A_SEL = 1; B_SEL = 1; C_SEL = 0 24 #define SM4 A_SEL = 0; B_SEL = 0; C_SEL = 1 25 #define SM5 A_SEL = 1; B_SEL = 0; C_SEL = 1 26 #define SM6 A_SEL = 0; B_SEL = 1; C_SEL = 1 27 #define SM7 A_SEL = 1; B_SEL = 1; C_SEL = 1 28 29 // 数码管显示 段码数组 30 unsigned char leddata[]={ 31 32 0x3F, //"0" 33 0x06, //"1" 34 0x5B, //"2" 35 0x4F, //"3" 36 0x66, //"4" 37 0x6D, //"5" 38 0x7D, //"6" 39 0x07, //"7" 40 0x7F, //"8" 41 0x6F, //"9" 42 0x77, //"A" 43 0x7C, //"B" 44 0x39, //"C" 45 0x5E, //"D" 46 0x79, //"E" 47 0x71, //"F" 48 0x76, //"H" 49 0x38, //"L" 50 0x37, //"n" 51 0x3E, //"u" 52 0x73, //"P" 53 0x5C, //"o" 54 0x40, //"-" 55 0x00, //熄灭 56 0x00 //自定义 57 58 }; 59 60 61 void send(unsigned char data_out) 62 { 63 unsigned char i; 64 RCLK = 0; 65 66 for(i=0;i<8;i++) 67 { 68 if( data_out & 0x80) 69 SDAT = 1; 70 else 71 SDAT = 0; 72 SCLK = 0; 73 74 SCLK = 1; 75 76 data_out = data_out<<1; 77 } 78 RCLK = 1; 79 } 80 81 #define delay 400 82 void main(void) 83 { 84 85 while(1) 86 { 87 unsigned int i; 88 89 SM0; 90 send(leddata[0]); 91 for(i = 0; i < delay; i++); 92 send(0x00); 93 94 SM1; 95 send(leddata[1]); 96 for(i = 0; i < delay; i++); 97 send(0x00); 98 SM2; 99 send(leddata[2]); 100 for(i = 0; i < delay; i++); 101 send(0x00); 102 SM3; 103 send(leddata[3]); 104 for(i = 0; i < delay; i++); 105 send(0x00); 106 107 SM4; 108 send(leddata[4]); 109 for(i = 0; i < delay; i++); 110 send(0x00); 111 112 SM5; 113 send(leddata[5]); 114 for(i = 0; i < delay; i++); 115 send(0x00); 116 SM6; 117 send(leddata[6]); 118 for(i = 0; i < delay; i++); 119 send(0x00); 120 SM7; 121 send(leddata[7]); 122 for(i = 0; i < delay; i++); 123 send(0x00); 124 125 } 126 }


