练习2
二、数码管显示原理及应用实现
1、数码管依次显示从0到F,时间间隔为500ms;
2、利用定时器1,定时60s让数码管第一位显示十位,第二位显示个位,到60s数码管关闭,让流水灯从左到右循环移动。
1 #include<reg52.h> 2 sbit du=P2^6; 3 sbit we=P2^7; 4 5 void delay(unsigned int x) 6 { 7 unsigned char i; 8 while(x--) 9 { 10 for(i=0;i<120;i++); 11 } 12 13 14 } 15 unsigned char leddata[]={ 16 17 0x3F, //"0" 18 0x06, //"1" 19 0x5B, //"2" 20 0x4F, //"3" 21 0x66, //"4" 22 0x6D, //"5" 23 0x7D, //"6" 24 0x07, //"7" 25 0x7F, //"8" 26 0x6F, //"9" 27 0x77, //"A" 28 0x7C, //"B" 29 0x39, //"C" 30 0x5E, //"D" 31 0x79, //"E" 32 0x71, //"F" 33 0x76, //"H" 34 0x38, //"L" 35 0x37, //"n" 36 0x3E, //"u" 37 0x73, //"P" 38 0x5C, //"o" 39 0x40, //"-" 40 0x00, //?? 41 0x00 //??? 42 43 }; 44 unsigned char array[8]={ 45 0xFE, 46 0xFD, 47 0xFB, 48 0xF7, 49 0xEF, 50 0xDF, 51 0xBF, 52 0x7F}; 53 void display(unsigned char i) 54 { 55 unsigned char shi,ge; 56 ge=i%10; 57 shi=i/10; 58 59 we=1; 60 P0=0xbb; 61 we=0; 62 63 du=1; 64 P0=leddata[shi]; 65 du=0; 66 delay(5); 67 68 we=1; 69 P0=0x77; 70 we=0; 71 72 du=1; 73 P0=leddata[ge]; 74 du=0; 75 delay(5); 76 77 78 } 79 void main() 80 { 81 unsigned char a,b; 82 unsigned char i; 83 84 TR1=1; 85 TMOD=0x10; 86 TH1=0x4b; 87 TL1=0xfc; 88 89 while(1) 90 { 91 if(TF1==1) 92 { 93 TH1=0x4b; 94 TL1=0xfc; 95 TF1=0; 96 a++; 97 98 } 99 if(a==20) 100 { 101 a=0; 102 b++; 103 104 } 105 display(b); 106 if(b==60) 107 { 108 TR1=0; 109 we=1; 110 P0=0xff; 111 we=0; 112 while(1){ 113 for(i=0;i<8;i++) 114 { 115 P1=array[i]; 116 delay(500); 117 118 } 119 } 120 121 } 122 123 124 125 } 126 127 }
一个二次元的生物

浙公网安备 33010602011771号