1. #include 2. #define uchar unsigned char 3. #define uint unsigned int 4. #define ulint unsigned long int 5. sbit DIN=P3^4;//串行输入 6. sbit CLK=P3^3;//工作时钟 7. sbit CS=P3^2;//片选信号 低电平有效 8. sbit key1=P2^0; 9. sbit key2=P2^1; 10. sbit key3=P2^2; 11. sbit key4=P2^3; 12. unsigned char code table_duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98, 13. 0x88,0x83,0xc6,0xa1,0x86,0x8e, 14. 0xff,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x18, }; unsigned char code table_wei[]={0x1f,0x9f,0x5f,0xdf, 0x4f,0xcf,0x2f,0xaf,0x6f }; uchar x1,x2,x3,x4; uchar y1,y2,y3,y4,y5; uint xianshi_MV; ulint xianshi_MA; void delay(unsigned int z) { uchar i,j; 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. for(i=0;i } void display(void) { P2=table_wei[0]; P0=table_duan[x1+0x20]; delay(1); P0=table_duan[0x10]; P2=table_wei[1]; P0=table_duan[x2]; delay(1); 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. P0=table_duan[0x10]; P2=table_wei[2]; P0=table_duan[x3]; delay(1); P0=table_duan[0x10]; P2=table_wei[3]; P0=table_duan[x4]; delay(1); P0=table_duan[0x10]; P2=table_wei[4]; P0=table_duan[y1]; 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. delay(1); P0=table_duan[0x10]; P2=table_wei[5]; P0=table_duan[y2+0x20]; delay(1); P0=table_duan[0x10]; P2=table_wei[6]; P0=table_duan[y3]; delay(1); P0=table_duan[0x10]; P2=table_wei[7]; P0=table_duan[y4]; delay(1); 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. P0=table_duan[0x10]; P2=table_wei[8]; P0=table_duan[y5]; delay(1); P0=table_duan[0x10]; P2=0xef; P0=table_duan[0x11]; delay(1); P0=table_duan[0x10]; P2=0x8f; P0=table_duan[0x0a]; delay(1); P0=table_duan[0x10]; 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. } void DA_init(uint data1)//data1 待转换的数据 { uchar i; CS=1; DIN=0; CLK=0; CS=0; for(i=0;i<16;i++) { if((data1&0x8000)!=0) //0x0400==0001,0000,0000,0000 B DIN=1;//数据输出 else 92. DIN=0;//数据输出 93. CLK=1; //发生时钟 94. CLK=0; //发生时钟 95. data1<<=1;//逻辑左移 96. } 97. CLK=1; //发生时钟 98. CLK=0; //发生时钟 99. CS=1; 100. DIN=0; 101. CLK=0; 102. } 103. void shuju_fenli(void) 104. { 105. x1=xianshi_MV/1000; 106. x2=(xianshi_MV%1000)/100; 107. x3=(xianshi_MV%100)/10; 108. x4=xianshi_MV%10; 109. y1=xianshi_MA/10000; 110. y2=(xianshi_MA%10000)/1000; 111. y3=(xianshi_MA%1000)/100; 112. y4=(xianshi_MA%100)/10; 113. y5=xianshi_MA%10; 114. } 115. char code dx516[3] _at_ 0x003b; 116. void main() 117. { 118. uint a=0xc800,b=0x4800,c; 119. float d,shang; 120. 121. while(1) 122. { 123. P2=0x4f; 124. if(key1==0) 125. { 126. delay(20); 127. if(key1==0) 128. { 129. a=a+0x0333; 130. if(a>0xcfff) 131. { 132. a=a-0x0fff; 133. } 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. while(key1==0) if(key2==0) if(key2==0) {;} } } { delay(20); { a=a+0x0052; 144. if(a>0xcfff) 145. { 146. a=a-0x0fff; 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. while(key2==0) if(key3==0) if(key3==0) } {;} } } { delay(20); { 157. a=a+0x0008; 158. if(a>0xcfff) 159. { 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. while(key3==0) if(key4==0) if(key4==0) a=a-0x0fff; } {;} } } { delay(20); 170. { 171. a=a+0x0001; 172. if(a>0xcfff) 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. while(key4==0) { a=a-0x0fff; } {;} } } DA_init(a); delay(10); DA_init(b); 183. delay(10); 184. c=a; 185. c=c&0x0fff; 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. if(xianshi_MV>0&xianshi_MV<10000) else if(xianshi_MV>10000&xianshi_MV<20000) d=c; shang=d/0x1000; xianshi_MV=2*2492.3*shang; xianshi_MV=xianshi_MV+2; xianshi_MA=xianshi_MV*10; xianshi_MA=xianshi_MA*10; xianshi_MA=xianshi_MA*10; xianshi_MA=xianshi_MA/237.8; 196. xianshi_MA=xianshi_MA/238.5; 197. else if(xianshi_MV>20000&xianshi_MV<30000) 198. xianshi_MA=xianshi_MA/238.8; 199.200.201.202.203.204.205.206. else if(xianshi_MV>30000&xianshi_MV<40000) xianshi_MA=xianshi_MA/239; else if(xianshi_MV>40000&xianshi_MV<50000) xianshi_MA=xianshi_MA/239.1; shuju_fenli(); display(); } } 因篇幅问题不能全部显示,请点此查看更多更全内容