5223|7

2781

帖子

419

TA的资源

五彩晶圆(中级)

楼主
 

msp430g2553诺基亚5110显示程序 [复制链接]

  1. #include
  2. #include "N5110.h"

  3. void main(void)
  4. {
  5. WDTCTL=WDTPW+WDTHOLD;
  6. N5110_init();
  7. while(1)
  8. {
  9.   draw_circle(20,20,10);
  10.   draw_dot(40,10);
  11. }
  12. }
  13. #include //#include
  14. #include "N5110.h"

  15. const uchar ASCALL[]=              // ASCII
  16. {
  17.             
  18. 0x00,0x00,0x00,0x00,0x00, // - -
  19. 0x00,0x00,0x5F,0x00,0x00, // -!-
  20. 0x00,0x07,0x00,0x07,0x00, // -"-
  21. 0x14,0x7F,0x14,0x7F,0x14, // -#-
  22. 0x24,0x2E,0x7B,0x2A,0x12, // -$-
  23. 0x23,0x13,0x08,0x64,0x62, // -%-
  24. 0x36,0x49,0x56,0x20,0x50, // -&-
  25. 0x00,0x04,0x03,0x01,0x00, // -'-
  26. 0x00,0x1C,0x22,0x41,0x00, // -(-
  27. 0x00,0x41,0x22,0x1C,0x00, // -)-
  28. 0x22,0x14,0x7F,0x14,0x22, // -*-
  29. 0x08,0x08,0x7F,0x08,0x08, // -+-
  30. 0x40,0x30,0x10,0x00,0x00, // -,-
  31. 0x08,0x08,0x08,0x08,0x08, // ---
  32. 0x00,0x60,0x60,0x00,0x00, // -.-
  33. 0x20,0x10,0x08,0x04,0x02, // -/-
  34. 0x3E,0x51,0x49,0x45,0x3E, // -0-
  35. 0x00,0x42,0x7F,0x40,0x00, // -1-
  36. 0x62,0x51,0x49,0x49,0x46, // -2-
  37. 0x21,0x41,0x49,0x4D,0x33, // -3-
  38. 0x18,0x14,0x12,0x7F,0x10, // -4-
  39. 0x27,0x45,0x45,0x45,0x39, // -5-
  40. 0x3C,0x4A,0x49,0x49,0x31, // -6-
  41. 0x01,0x71,0x09,0x05,0x03, // -7-
  42. 0x36,0x49,0x49,0x49,0x36, // -8-
  43. 0x46,0x49,0x49,0x29,0x1E, // -9-
  44. 0x00,0x36,0x36,0x00,0x00, // -:-
  45. 0x40,0x36,0x36,0x00,0x00, // -;-
  46. 0x08,0x14,0x22,0x41,0x00, // -<-
  47. 0x14,0x14,0x14,0x14,0x14, // -=-
  48. 0x00,0x41,0x22,0x14,0x08, // ->-
  49. 0x02,0x01,0x59,0x05,0x02, // -?-
  50. 0x3E,0x41,0x5D,0x55,0x5E, // -@-
  51. 0x7C,0x12,0x11,0x12,0x7C, // -A-
  52. 0x7F,0x49,0x49,0x49,0x36, // -B-
  53. 0x3E,0x41,0x41,0x41,0x22, // -C-
  54. 0x7F,0x41,0x41,0x41,0x3E, // -D-
  55. 0x7F,0x49,0x49,0x49,0x41, // -E-
  56. 0x7F,0x09,0x09,0x09,0x01, // -F-
  57. 0x3E,0x41,0x51,0x51,0x72, // -G-
  58. 0x7F,0x08,0x08,0x08,0x7F, // -H-
  59. 0x00,0x41,0x7F,0x41,0x00, // -I-
  60. 0x20,0x40,0x41,0x3F,0x01, // -J-
  61. 0x7F,0x08,0x14,0x22,0x41, // -K-
  62. 0x7F,0x40,0x40,0x40,0x40, // -L-
  63. 0x7F,0x02,0x0C,0x02,0x7F, // -M-
  64. 0x7F,0x04,0x08,0x10,0x7F, // -N-
  65. 0x3E,0x41,0x41,0x41,0x3E, // -O-
  66. 0x7F,0x09,0x09,0x09,0x06, // -P-
  67. 0x3E,0x41,0x51,0x21,0x5E, // -Q-
  68. 0x7F,0x09,0x19,0x29,0x46, // -R-
  69. 0x26,0x49,0x49,0x49,0x32, // -S-
  70. 0x01,0x01,0x7F,0x01,0x01, // -T-
  71. 0x3F,0x40,0x40,0x40,0x3F, // -U-
  72. 0x1F,0x20,0x40,0x20,0x1F, // -V-
  73. 0x7F,0x20,0x18,0x20,0x7F, // -W-
  74. 0x63,0x14,0x08,0x14,0x63, // -X-
  75. 0x03,0x04,0x78,0x04,0x03, // -Y-
  76. 0x61,0x51,0x49,0x45,0x43, // -Z-
  77. 0x7F,0x7F,0x41,0x41,0x00, // -[-
  78. 0x02,0x04,0x08,0x10,0x20, // -\-
  79. 0x00,0x41,0x41,0x7F,0x7F, // -]-
  80. 0x04,0x02,0x7F,0x02,0x04, // -^-
  81. 0x08,0x1C,0x2A,0x08,0x08, // -_-
  82. 0x00,0x00,0x01,0x02,0x04, // -`-
  83. 0x24,0x54,0x54,0x38,0x40, // -a-
  84. 0x7F,0x28,0x44,0x44,0x38, // -b-
  85. 0x38,0x44,0x44,0x44,0x08, // -c-
  86. 0x38,0x44,0x44,0x28,0x7F, // -d-
  87. 0x38,0x54,0x54,0x54,0x08, // -e-
  88. 0x08,0x7E,0x09,0x09,0x02, // -f-
  89. 0x98,0xA4,0xA4,0xA4,0x78, // -g-
  90. 0x7F,0x08,0x04,0x04,0x78, // -h-
  91. 0x00,0x00,0x79,0x00,0x00, // -i-
  92. 0x00,0x80,0x88,0x79,0x00, // -j-
  93. 0x7F,0x10,0x28,0x44,0x40, // -k-
  94. 0x00,0x41,0x7F,0x40,0x00, // -l-
  95. 0x78,0x04,0x78,0x04,0x78, // -m-
  96. 0x04,0x78,0x04,0x04,0x78, // -n-
  97. 0x38,0x44,0x44,0x44,0x38, // -o-
  98. 0xFC,0x24,0x24,0x24,0x18, // -p-
  99. 0x18,0x24,0x24,0x24,0xFC, // -q-
  100. 0x04,0x78,0x04,0x04,0x08, // -r-
  101. 0x48,0x54,0x54,0x54,0x24, // -s-
  102. 0x04,0x3F,0x44,0x44,0x24, // -t-
  103. 0x3C,0x40,0x40,0x3C,0x40, // -u-
  104. 0x1C,0x20,0x40,0x20,0x1C, // -v-
  105. 0x3C,0x40,0x3C,0x40,0x3C, // -w-
  106. 0x44,0x28,0x10,0x28,0x44, // -x-
  107. 0x9C,0xA0,0xA0,0x90,0x7C, // -y-
  108. 0x44,0x64,0x54,0x4C,0x44, // -z-
  109. 0x08,0x36,0x41,0x00,0x00, // -{-
  110. 0x00,0x00,0x77,0x00,0x00, // -|-
  111. 0x00,0x00,0x41,0x36,0x08, // -}-
  112. 0x06,0x09,0x09,0x06,0x00, // -°-
  113. 0x08,0x04,0x08,0x10,0x08, // -~-
  114. 0x55,0x2A,0x55,0x2A,0x55, // --

  115. };

  116. void N5110_sent_8bit(uchar num)
  117. {
  118. uchar n;
  119. for(n=0;n<8;n++)
  120. {
  121.   N5110_CLK_0();
  122.   if(num&0X80)
  123.    N5110_DIN_1();
  124.   else
  125.    N5110_DIN_0();
  126.   N5110_CLK_1();
  127.   num=num<<1;
  128. }
  129. }

  130. void N5110_sent_oder(uchar com)
  131. {
  132. N5110_RST_1();
  133. N5110_CE_1();
  134. N5110_CLK_0();
  135. N5110_CE_0();
  136. N5110_DC_0();
  137. N5110_sent_8bit(com);
  138. N5110_CE_1();
  139. }

  140. void N5110_sent_data(uchar num)
  141. {
  142. N5110_RST_1();
  143. N5110_CE_1();
  144. N5110_CLK_0();
  145. N5110_CE_0();
  146. N5110_DC_1();
  147. N5110_sent_8bit(num);
  148. N5110_CE_1();
  149. }

  150. void N5110_add_xy(uchar x,uchar y)
  151. {
  152. if(x>83)x=83;
  153. if(y>5) y=5;
  154. N5110_sent_oder(N5110_Address_Y|y);
  155. N5110_sent_oder(N5110_Address_X|x);
  156. }

  157. void N5110_clear_screen(void)
  158. {
  159. int n;
  160. N5110_sent_oder(N5110_Address_Y);
  161. N5110_sent_oder(N5110_Address_X);
  162. for(n=0;n<504;n++)
  163.   N5110_sent_data(0x00);
  164. }

  165. void N5110_init(void)
  166. {

  167.     N5110IOOUT;        //I/O配置为输出模式

  168. N5110_RST_0();
  169. N5110_RST_1();
  170. N5110_sent_oder(N5110_Expend_Commond);
  171. N5110_sent_oder(0x98);
  172. N5110_sent_oder(0x06);
  173. N5110_sent_oder(0x13);
  174. N5110_sent_oder(N5110_Bisic_Commond);
  175. N5110_clear_screen();
  176. N5110_sent_oder(N5110_Display_Normal);
  177. N5110_CE_0();
  178. N5110_LIGHT_ON();
  179. }

  180. void N5110_display_image(void)
  181. {
  182. N5110_sent_oder(N5110_Display_Image);
  183. }

  184. void N5110_led_ASCALLS(unsigned char *string)
  185. {
  186.   unsigned char i=0;
  187.   while(*(string+i))
  188.   {
  189.     N5110_led_ASCALL(*(string+i));
  190.     i++;
  191.   }
  192. }

  193. void N5110_led_ASCALL(uchar c)
  194. {
  195. char n;
  196. for(n=0;n<5;n++)
  197.   N5110_sent_data(*(ASCALL+5*(c-' ')+n));
  198. }

  199. void N5110_led_int(unsigned int dat)
  200. {
  201. unsigned char i=0;
  202. char string[10]={0};
  203. for(i=0;dat>0;i++)
  204. {
  205.   string[i]=dat;
  206.   dat/=10;
  207. }
  208. if(i==0)
  209. {
  210.   N5110_led_ASCALL('0');
  211.   return;
  212. }
  213. else
  214. {
  215.   for(i--;;)
  216.   {

  217.    N5110_led_ASCALL('0'+string[i]);
  218.    if(i>0)
  219.                           i--;
  220.    else
  221.                           return;
  222.   }
  223. }
  224. }



  225. const uchar HZ[]=           
  226. {
  227. 0x00,0x00,0x00,0x00,0x00,0xFF,0x10,0x10,0x10,0x10,0x00,0x00,0x04,0x04,0x04,0x04,
  228. 0x04,0x07,0x04,0x04,0x04,0x04,0x04,0x00,                                       
  229. 0xFF,0x81,0x99,0xE7,0x00,0xFF,0x25,0xE5,0x25,0xBF,0x40,0x00,0x07,0x00,0x00,0x00,
  230. 0x00,0x07,0x04,0x02,0x01,0x02,0x04,0x00,                                          
  231. 0x02,0x02,0x02,0x02,0x02,0xFE,0x12,0x12,0x22,0x43,0x02,0x00,0x00,0x00,0x00,0x00,
  232. 0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,                                         
  233. 0x11,0x15,0xFD,0x13,0x30,0x01,0xFD,0x07,0xF5,0x05,0xFD,0x00,0x04,0x04,0x07,0x00,
  234. 0x04,0x04,0x02,0x01,0x01,0x02,0x04,0x00,                                    
  235. 0x04,0x16,0xD2,0x12,0x12,0xF3,0x92,0x92,0x92,0x92,0x06,0x00,0x04,0x02,0x01,0x01,
  236. 0x02,0x03,0x04,0x04,0x04,0x04,0x04,0x00,                                       
  237. 0x22,0x44,0x00,0xC0,0x5F,0xD5,0x55,0xD5,0x5F,0xC0,0x00,0x00,0x04,0x02,0x09,0x0F,
  238. 0x08,0x0F,0x08,0x0F,0x08,0x0F,0x08,0x00,                                          
  239. 0x00,0xFE,0x0A,0x8A,0xBE,0xAA,0xAB,0xAA,0xBE,0x8A,0x0A,0x00,0x08,0x07,0x00,0x08,
  240. 0x09,0x0A,0x04,0x04,0x0A,0x09,0x08,0x00,                                         
  241. 0x0C,0x04,0x75,0x56,0x54,0xD7,0x54,0x56,0x75,0x04,0x0C,0x00,0x00,0x07,0x01,0x01,
  242. 0x01,0x0F,0x01,0x01,0x05,0x07,0x00,0x00,                                          
  243. 0x00,0x00,0xFC,0xA4,0xA4,0xA5,0xA6,0xA4,0xA4,0xA4,0xBC,0x00,0x08,0x06,0x01,0x0F,
  244. 0x04,0x04,0x04,0x04,0x04,0x04,0x0F,0x00,                                          
  245. 0x10,0xD2,0x32,0x92,0x10,0x00,0x08,0xFF,0x08,0x08,0xF8,0x00,0x03,0x02,0x02,0x02,
  246. 0x03,0x08,0x06,0x01,0x08,0x08,0x07,0x00,                                          
  247. 0x10,0x11,0xF2,0x00,0x50,0xCF,0x41,0x41,0x4F,0xD0,0x10,0x00,0x00,0x00,0x07,0x02,
  248. 0x08,0x08,0x05,0x02,0x05,0x08,0x08,0x00,                                          
  249. 0x2C,0x24,0xA4,0x24,0x25,0xE6,0x24,0x24,0x24,0x24,0x2C,0x00,0x08,0x04,0x03,0x04,
  250. 0x08,0x0F,0x09,0x09,0x09,0x09,0x08,0x00,                                          
  251. 0x11,0xF2,0x00,0x22,0xEA,0xAA,0xBF,0xAA,0xAA,0xEA,0x22,0x00,0x00,0x0F,0x04,0x00,
  252. 0x0F,0x02,0x02,0x02,0x0A,0x0F,0x00,0x00,                                          
  253. 0x10,0x11,0xF2,0x00,0x28,0x26,0xE4,0x3F,0xE4,0x24,0x20,0x00,0x08,0x04,0x03,0x04,
  254. 0x0A,0x09,0x08,0x08,0x09,0x0A,0x0B,0x00,                                          
  255. 0x88,0x88,0xFF,0x48,0x21,0xA3,0x95,0xE9,0x95,0xA3,0x20,0x00,0x00,0x08,0x0F,0x00,
  256. 0x02,0x02,0x02,0x0F,0x02,0x02,0x02,0x00,                                          
  257. 0x22,0x44,0x00,0xC0,0x5F,0xD5,0x55,0xD5,0x5F,0xC0,0x00,0x00,0x04,0x02,0x09,0x0F,
  258. 0x08,0x0F,0x08,0x0F,0x08,0x0F,0x08,0x00,                                          
  259. 0x00,0xFE,0x0A,0x8A,0xBE,0xAA,0xAB,0xAA,0xBE,0x8A,0x0A,0x00,0x08,0x07,0x00,0x08,
  260. 0x09,0x0A,0x04,0x04,0x0A,0x09,0x08,0x00,                                          
  261. 0x34,0x2C,0xF7,0xA4,0xE8,0xA4,0xEA,0x09,0xCA,0x04,0xE8,0x00,0x01,0x01,0x0F,0x00,
  262. 0x0F,0x02,0x0F,0x00,0x03,0x08,0x0F,0x00,                                          
  263. 0x00,0x00,0x01,0x81,0x72,0x0C,0x70,0x80,0x00,0x00,0x00,0x00,0x08,0x04,0x02,0x01,
  264. 0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x00,                                          
  265. 0x40,0x42,0x42,0xFE,0x42,0x42,0x42,0xFE,0x42,0x42,0x40,0x00,0x00,0x08,0x06,0x01,
  266. 0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,                                          
  267. 0x88,0x68,0xFF,0x28,0x40,0xFE,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x00,0x0F,0x08,
  268. 0x04,0x03,0x00,0x00,0x07,0x08,0x0E,0x00,                                          
  269. 0x46,0x32,0x82,0xB2,0x46,0x6B,0x52,0x4A,0x62,0x12,0x66,0x00,0x00,0x0E,0x08,0x08,
  270. 0x08,0x0F,0x08,0x08,0x08,0x0E,0x00,0x00,                                          
  271. 0x42,0xF2,0x2E,0xE2,0x01,0x3D,0x21,0x21,0x21,0x3F,0xE0,0x00,0x00,0x07,0x02,0x07,
  272. 0x01,0x01,0x01,0x01,0x09,0x08,0x07,0x00,                                          
  273. 0x98,0xF7,0x94,0x84,0x10,0xD4,0x5F,0x54,0x54,0x5F,0xD4,0x00,0x00,0x0F,0x04,0x02,
  274. 0x00,0x0F,0x05,0x05,0x05,0x05,0x0F,0x00,                                          
  275. 0x11,0xF2,0x80,0xA0,0xAF,0xA9,0xE9,0xA9,0xAF,0xA0,0x80,0x00,0x00,0x07,0x02,0x08,
  276. 0x04,0x02,0x01,0x02,0x04,0x08,0x08,0x00,                                          
  277. 0x20,0xA4,0x24,0xFF,0x24,0x20,0xD2,0x4E,0x42,0x52,0xDE,0x00,0x08,0x07,0x04,0x0F,
  278. 0x09,0x09,0x0B,0x0A,0x0A,0x0A,0x0B,0x00,                                          
  279. 0x10,0x11,0xF2,0x00,0x08,0x28,0xC8,0x08,0x08,0xFF,0x08,0x00,0x08,0x04,0x03,0x04,
  280. 0x08,0x08,0x08,0x0A,0x0A,0x0B,0x08,0x00,                                          
  281. 0x02,0x04,0x80,0x20,0x18,0x87,0x74,0x84,0x04,0x14,0x0C,0x00,0x02,0x01,0x08,0x04,
  282. 0x02,0x01,0x00,0x01,0x02,0x04,0x08,0x00,                                          
  283. 0x02,0xFA,0xAA,0xAA,0xAA,0xFE,0xAA,0xAA,0xAA,0xFA,0x02,0x00,0x08,0x09,0x0A,0x04,
  284. 0x04,0x0B,0x08,0x08,0x08,0x08,0x08,0x00,                                          
  285. 0xE2,0x22,0x22,0x3E,0x20,0x10,0xEF,0x08,0x88,0x78,0x08,0x00,0x0F,0x04,0x02,0x01,
  286. 0x08,0x04,0x02,0x01,0x02,0x04,0x08,0x00,                                          
  287. 0x20,0xAA,0xB2,0xE3,0xB2,0xAA,0x00,0xFE,0x12,0xF2,0x11,0x00,0x04,0x02,0x08,0x0F,
  288. 0x00,0x0A,0x04,0x03,0x00,0x0F,0x00,0x00,                                          
  289. 0x00,0xFC,0x24,0x24,0xE4,0x04,0xFF,0x04,0x85,0x66,0x04,0x00,0x08,0x07,0x00,0x02,
  290. 0x0B,0x04,0x02,0x01,0x02,0x04,0x0F,0x00,                                          
  291. 0x04,0x04,0xFC,0x04,0x04,0x08,0xFF,0x08,0x08,0x08,0xF8,0x00,0x02,0x02,0x01,0x09,
  292. 0x05,0x03,0x00,0x00,0x08,0x08,0x07,0x00,                                          
  293. 0x04,0x05,0xF5,0x55,0x55,0xFF,0x55,0x55,0xF5,0x05,0x04,0x00,0x04,0x05,0x05,0x05,
  294. 0x05,0x07,0x05,0x05,0x05,0x05,0x04,0x00,           
  295. };



  296. void N5110_led_HZ(uchar x,uchar y,uchar line,uchar byte,uchar length)
  297. {
  298. char n,i,j;
  299. if(line%8==0) j=line/8;
  300. else j=line/8+1;
  301. for(i=0;i
  302. {
  303. N5110_add_xy(x,y+i);
  304. for(n=0;n<12;n++)
  305. {
  306.   N5110_sent_data(*(HZ+24*(byte-'0')+n+12*i));
  307. }
  308. }
  309. }

  310. void N5110_led_HZS(uchar x,uchar y,uchar line,uchar *string,uchar length)
  311. {
  312. uchar i=0;
  313. while(*(string+i))
  314. {
  315.   N5110_led_HZ(x+12*i,y,line,*(string+i),length);
  316.   i++;
  317. }
  318. }


  319. void N5110_Clear_Line(uchar _X)
  320. {
  321.    unsigned char i = 0;

  322.    for (i = 0; i <= 83; i++ )
  323.    {
  324.       N5110_add_xy(_X,i);
  325.       N5110_sent_data(0x00);                    //写数据0x00
  326.    }
  327. }

  328. void N5110_led_double(double dat,int point_n)
  329. {
  330. int i = 0;
  331. int double_int = 0;
  332. int double_point = 0;
  333. // int double_length = 0;
  334. int data_length = 0;
  335. int temp = 0;
  336. int extern_length = 0;
  337. long base = 1;

  338. if ((dat - 0) < EPSILON)
  339. {
  340.   dat = 0 - dat;
  341.   data_length++;
  342.   double_int = -(int)dat;

  343. }
  344. else
  345. {
  346.   double_int = (int)dat;
  347. }

  348. N5110_led_int(double_int);

  349. N5110_led_ASCALL('.');

  350. for (i = 0; i < point_n; i++)
  351. {
  352.   base = base * 10;
  353. }

  354. double_point = (int)((dat - double_int) * base);
  355. temp = double_point;

  356. while(temp < (base / 10))
  357. {
  358.   N5110_led_ASCALL('0');
  359.   temp = temp * 10;
  360.   extern_length++;
  361.   if(extern_length > (point_n - 1) )
  362.   {
  363.    break;
  364.   }
  365. }

  366. N5110_led_int(double_point);

  367. }

  368. /
  369.    if(di<0)
  370.    di +=4*a+6;
  371.    else
  372.    {
  373.   di +=10+4*(a-b);
  374.   b--;
  375.    }
  376.    draw_dot(x0+a,y0+b);
  377.    }
  378. }



  379. void draw_lineX(uchar x,uchar y1,uchar y2)
  380. {
  381.      uchar temp;
  382.      if(y1>y2)//y1>y2交换这两个数
  383.      {
  384.           temp=y1;
  385.           y1=y2;
  386.           y2=temp;
  387.      }
  388.      for(y1=y1;y1
  389.        draw_dot(x,y1); //将这些点显示出来
  390. }

  391. void draw_lineY(uchar x1,uchar x2,uchar y)
  392. {
  393.      uchar temp;
  394.      if(x1>x2)//若x1>x2交换两数
  395.      {
  396.         temp=x1;
  397.         x1=x2;
  398.         x2=temp;
  399.      }
  400.      for(;x1
  401.        draw_dot(x1,y);
  402. }

  403. void draw_line(int x1,int y1,int x2,int y2) //两点之间画任意直线
  404. {
  405.      int x,y,dx,dy,s1,s2,temp,status,p,i;
  406.      x=x1;
  407.      y=y1;
  408.      if(x1>x2) //判断x1,x2的大小
  409.      {
  410.           dx=x1-x2; //
  411.           s1=-1; //x的增量为-1
  412.      }
  413.      else
  414.      {
  415.           dx=x2-x1;
  416.           s1=1; //x的增量为1
  417.      }
  418.      if(y1>y2)
  419.      {
  420.           dy=y1-y2;
  421.           s2=-1;//y的增量为-1
  422.      }
  423.      else
  424.      {
  425.           dy=y2-y1;
  426.           s2=1; //y的增量为1
  427.      }
  428.      if(dx
  429.      {
  430.           temp=dx;
  431.           dy=dx;//x是y的函数
  432.           dx=temp;
  433.           status=1;//表示靠近Y轴
  434.      }
  435.      else
  436.        status=0;//表示靠近x轴

  437.      p=2*dy-dx; //使用Bresenhan算法

  438.      for(i=1;i
  439.      {
  440.           draw_dot(x,y); //画起点
  441.           if(p>0)
  442.           {
  443.               if(status==0)//靠近x轴
  444.                   y+=s2;
  445.               else
  446.                   x+=s1;
  447.               p=p-2*dx;
  448.           }
  449.           if(status==0)
  450.               x=x+s1;
  451.           else
  452.               y=y+s2;
  453.           p=p+2*dy;
  454.      }

  455. }




  456. #ifndef _N5110_H
  457. #define _N5110_H

  458. #define uchar unsigned char
  459. #define uint unsigned int

  460. #define EPSILON 0.00001   //显示double时的精度定义
  461. #define POINT_NUM  5   //double型小数点后的位数


  462. #define TRUE       1
  463. #define FLASE      0



  464. #define N5110_DC_1()  P2OUT |=BIT3 //数据
  465. #define N5110_DC_0()  P2OUT &=~BIT3//命令
  466. #define N5110_RST_1() P2OUT |=BIT5
  467. #define N5110_RST_0() P2OUT &=~BIT5//低电平复位
  468. #define N5110_CE_1()  P2OUT |=BIT4
  469. #define N5110_CE_0()  P2OUT &=~BIT4//输入使能
  470. #define N5110_DIN_0() P2OUT &=~BIT2
  471. #define N5110_DIN_1() P2OUT |=BIT2
  472. #define N5110_CLK_0() P2OUT &=~BIT1
  473. #define N5110_CLK_1() P2OUT |=BIT1
  474. #define N5110_BL_0()  P2OUT &=~BIT0
  475. #define N5110_BL_1()  P2OUT |=BIT0
  476. #define N5110_LIGHT_ON()  N5110_BL_1()
  477. #define N5110_LIGHT_OFF() N5110_BL_0()

  478. #define N5110IOOUT    P2DIR  |= (BIT0+BIT1+BIT2+BIT3+BIT4+BIT5)



  479. #define N5110_Display_Blank      0x08//白屏
  480. #define N5110_Display_Normal     0x0C//正常显示
  481. #define N5110_Display_Whole      0x09//全显
  482. #define N5110_Display_Image      0x0D//翻转
  483. #define N5110_Address_Y          0x40//设置Y地址
  484. #define N5110_Address_X          0x80//设置X地址
  485. #define N5110_Temperature_0      0x04//温度系数1
  486. #define N5110_Temperature_1      0x05//温度系数2
  487. #define N5110_Temperature_2      0x06//温度系数3
  488. #define N5110_Temperature_3      0x07//温度系数4
  489. #define N5110_Bisic_Commond   0x20//基本指令集
  490. #define N5110_Expend_Commond     0x21//扩展指令集(用来设置工作电压)
  491. #define N5110_Low_Power          0x24//节能模式
  492. #define N5110_Level_Addressing   0x20//水平寻址
  493. #define N5110_Verti_Addressing   0x22//垂直寻址
  494. #define N5110_Work_Voltage       0x80//工作电压(在扩展指令集模式下)





  495. extern void N5110_init(void);




  496. void N5110_sent_8bit(uchar num);




  497. void N5110_sent_oder(uchar num);




  498. void N5110_sent_data(uchar num);




  499. void N5110_add_xy(uchar x,uchar y);


  500. void N5110_Clear_Line(uchar _X);



  501. void N5110_clear_screen(void);



  502. void N5110_display_image(void);



  503. void N5110_led_ASCALL(uchar c);



  504. void N5110_led_ASCALLS(unsigned char *string);


  505. void N5110_led_int(unsigned int dat);



  506. void N5110_led_HZ(uchar x,uchar y,uchar line,uchar byte,uchar length);





  507. void N5110_led_HZS(uchar x,uchar y,uchar line,uchar *string,uchar length);


  508. void N5110_led_double(double dat,int point_n);

  509. //**************************************************
  510. //函数名称:void N5110_Write_Char (uchar _Litter,uchar _X, uchar _Num, uchar Is_Set_XY_Flag)
  511. //功能:显示英文字符,每个英文字母占5列
  512. //参数:uchar _Litter---要显示的英文字符;uchar _X——行坐标(0--5), uchar _Num--第几个字母(0--15),多出4列, uchar Is_Set_XY_Flag---是否要定位
  513. //返回值:无
  514. //**************************************************
  515. void N5110_Write_Char (uchar _Litter, uchar _X, uchar _Num, uchar Is_Set_XY_Flag);

  516. //**************************************************
  517. //函数名称:void N5110_Write_Litter_Str (uchar *Star, uchar _X, uchar _Y, uchar Is_Set_XY_Flag)
  518. //功能:N5110显示一行字符串
  519. //参数:uchar *Str---要显示的字符串, uchar _X——行坐标(0--5), uchar _Yuchar_Y---列坐标(0--83), uchar Is_Set_XY_Flag---是否要定位
  520. //返回值:无
  521. //**************************************************
  522. void N5110_Write_Litter_Str (char *Str, uchar _X, uchar _Y, uchar Is_Set_XY_Flag);

  523. //***********************************************
  524. //函数名称:int N5110_Print_Int (int data, uchar *Add_Str, uchar _X, uchar _Y, uchar Is_Set_XY_Flag)
  525. //功能:把整型转换为字符串,可以加单位
  526. //参数:int data--------要转换的整型数据,  uchar *Add_Str-----增加的字符串, uchar _X----行坐标(0--5), uchar _Y---列坐标(0--83), uchar Is_Set_XY_Flag---是否要定位
  527. //返回值:data_length-----字符串长度,不包括单位
  528. //***********************************************
  529. int N5110_Print_Int (int dat, char *Add_Str, uchar _X, uchar _Y, uchar Is_Set_XY_Flag);

  530. //***********************************************
  531. //函数名称:int N5110_Print_Double (double data, uchar *Add_Str, uchar _X, uchar _Y, uchar Is_Set_XY_Flag)
  532. //功能:把浮点型数据double转换为字符串,并返回数据长度
  533. //参数:double data------要转换的double型数据,uchar *Add_Str-----增加的字符串, uchar _X----行坐标(0--5), uchar _Y---列坐标(0--83), uchar Is_Set_XY_Flag---是否要定位
  534. //返回值:data_length----字符串的长度,不包括单位
  535. //***********************************************
  536. int N5110_Print_Double (double dat, char *Add_Str, uchar _X, uchar _Y, uchar Is_Set_XY_Flag);

  537. void draw_dot(uchar x,uchar y); //打点函数
  538. extern void draw_circle(uchar x0,uchar y0,uchar r);
  539. void draw_lineX(uchar x,uchar y1,uchar y2);
  540. void draw_lineY(uchar x1,uchar x2,uchar y);
  541. void draw_line(int x1,int y1,int x2,int y2);

  542. extern const uchar ASCALL[];
  543. extern const uchar HZ[];


  544. #endif
复制代码

分享自:http://t.cn/8kMZFHf
                                                    

最新回复

楼主辛苦了  详情 回复 发表于 2014-8-23 08:27
 
点赞 关注(1)
个人签名

回复
举报

2781

帖子

419

TA的资源

五彩晶圆(中级)

沙发
 
msp430g2553单片机AD采集12864LCD显示nRF2401无线模块传输程序
  1. //接收程序

  2. #include
  3. #include "NRF24L01.h"
  4. #include "12864.h"

  5. static unsigned int count,data_out1,data_out2;
  6. static int step_index;
  7. void delay_s(unsigned int endcount);
  8. void gorun(char turn, unsigned int speedlevel);
  9. unsigned char cache,b,c;



  10. void main(void)
  11. {
  12.   count = 0;
  13.   unsigned char temp_buf[8]={0}; //  秒 分 时 日 月 星期 年
  14.   unsigned char data_buf[6]={0}; //  秒 分 时 日 月 星期 年

  15. step_index = 0;
  16.   WDTCTL = WDT_MDLY_8 ;//WDT_MDLY_0_5  0.5ms WDT_MDLY_8  ACLK
  17.   IE1 |= WDTIE;

  18. BCSCTL1 = CALBC1_16MHZ;      //设置DCO频率
  19.   DCOCTL =  CALDCO_16MHZ;     //设置DCO频率
  20.   BCSCTL3 |= LFXT1S_2;               // LFXT1 = VLO



  21.   P2DIR |=BIT0;
  22.   P2DIR |=BIT1;
  23.   P2DIR |=BIT2;
  24.   P2DIR |=BIT3;
  25.   P2OUT&=~BIT0;
  26.   P2OUT&=~BIT1;
  27.   P2OUT&=~BIT2;
  28.   P2OUT&=~BIT3;


  29.   lcdinit();

  30. _EINT();
  31.   NRF24L01_RX_Mode_Init();          // nRF24L01初始化为发送模式

  32. while(1)
  33.   {
  34.    //LCD_12864_draw_clear();
  35.    //__delay_cycles(1000);
  36.    LCD_12864_string( 1,1, "等待连接..." );

  37. if(NRF24L01_Read_Data(temp_buf))//接受成功
  38.     {

  39. LCD_12864_string(2,1,"连接成功!");
  40.      // __delay_cycles(1000);
  41.      

  42. }

  43. }
  44. }

  45. #pragma vector=WDT_VECTOR                      // TIMER0_A1_VECTOR
  46. __interrupt void WDTVECTOR(void)
  47. {
  48. ++count;
  49. }

  50. void delay_s(unsigned int endcount)
  51. {
  52. count = 0;
  53. do{}
  54. while(count < endcount);
  55. }

  56. void gorun(char turn,unsigned int speedlevel)
  57. {
  58.   switch(step_index)
  59.    {
  60.    case 0:
  61.      P2OUT |= BIT0;
  62.      P2OUT &= ~BIT1;
  63.      P2OUT &= ~BIT2;
  64.      P2OUT &= ~BIT3;
  65.      break;
  66.    case 1:
  67.      P2OUT |= BIT0;
  68.      P2OUT |= BIT1;
  69.      P2OUT &= ~BIT2;
  70.      P2OUT &= ~BIT3;
  71.      break;
  72.    case 2:
  73.      P2OUT &= ~BIT0;
  74.      P2OUT |= BIT1;
  75.      P2OUT &= ~BIT2;
  76.      P2OUT &= ~BIT3;
  77.      break;
  78.    case 3:
  79.      P2OUT &= ~BIT0;
  80.      P2OUT |= BIT1;
  81.      P2OUT |= BIT2;
  82.      P2OUT &= ~BIT3;
  83.      break;
  84.    case 4:
  85.      P2OUT &= ~BIT0;
  86.      P2OUT &= ~BIT1;
  87.      P2OUT |= BIT2;
  88.      P2OUT &= ~BIT3;
  89.      break;
  90.    case 5:
  91.      P2OUT &= ~BIT0;
  92.      P2OUT &= ~BIT1;
  93.      P2OUT |= BIT2;
  94.      P2OUT |= BIT3;
  95.      break;
  96.    case 6:
  97.      P2OUT &= ~BIT0;
  98.      P2OUT &= ~BIT1;
  99.      P2OUT &= ~BIT2;
  100.      P2OUT |= BIT3;
  101.      break;
  102.    case 7:
  103.      P2OUT |= BIT0;
  104.      P2OUT &= ~BIT1;
  105.      P2OUT &= ~BIT2;
  106.      P2OUT |= BIT3;
  107.      break;
  108.    }

  109. delay_s(speedlevel);
  110.   if (turn==0)
  111.   {
  112.    step_index++;
  113.    if
  114.    (
  115.    step_index>7
  116.    )
  117.       step_index=0;
  118.   }
  119.   else
  120.   {
  121.    step_index--;
  122.    if (step_index<0)
  123.    step_index=7;
  124.   }
  125. }


  126. //发送程序

  127. #include

  128. #include "NRF24L01.h"
  129. #include "12864.h"

  130. int i=0,j=0,Vo;
  131. unsigned int a[8]={0x01,0x16,0x19,0x30,0x08,0x46,0x12,0x01};
  132. unsigned char b[6];

  133. void main(void)
  134. {
  135.   unsigned char temp_buf[8]={0xaa,0x55,0,0,0,0,0,0}; //  秒 分 时 日月星期 年
  136.   //unsigned char temp_buf1[10]={0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01};

  137. //WDTCTL = WDTPW + WDTHOLD;        // 关闭看门狗

  138. WDTCTL = WDT_MDLY_8 ;//WDT_MDLY_0_5  0.5ms WDT_MDLY_8  ACLK
  139.   IE1 |= WDTIE;


  140.   BCSCTL1 = CALBC1_16MHZ;     //设置DCO频率
  141.   DCOCTL =  CALDCO_16MHZ;     //设置DCO频率


  142.   ADC10CTL1|=CONSEQ_3+INCH_0;//序列通道单次转换+最大通道为A1
  143.   ADC10CTL0|=ADC10SHT_2+MSC+ADC10ON+ADC10IE;
  144.   ADC10DTC1|=0x08;//一共采样8次
  145.   ADC10AE0|=BIT0;//+BIT1;//打开A0和A1的模拟输入通道


  146.   P2SEL = 0x00;
  147.   P2DIR = 0x33;  //24l01设置IO口方向。

  148. P1DIR |=BIT5;   //led灯I/O方向

  149. P1SEL |=BIT0;//+BIT1;//P1.1和P1.2设置为ADC功能A1和A2

  150. lcdinit();
  151.   NRF24L01_TX_Mode_Init();          // nRF24L01初始化为发送模式

  152. while(1)
  153.   {
  154.      ADC10CTL0&=~ENC;//关闭采样使能
  155.      while(ADC10CTL1&BUSY);//检测AD是否繁忙
  156.      ADC10CTL0|=ENC+ADC10SC;//启动ADC
  157.      ADC10SA=(unsigned int)a;//获取a[]的首地址。首先对A1、A0采样,放入a[0]和a[1]中。再对A1、A0采样,放入a[2]和a[3]中,如此循环下去。
  158.      _BIS_SR(LPM0_bits+GIE);//低功耗模式0,开中断
  159.      Vo=0;
  160.      for(i=0;i<8;i++)
  161.      Vo+=a[i];
  162.      Vo/=8;

  163. LCD_12864_4num(2,1,Vo);
  164.      temp_buf[2]  = ((Vo00)/100);
  165.      temp_buf[3]  = (((Vo00)0)/10);
  166.      temp_buf[4]  = (((Vo00)0));
  167.      temp_buf[5]  = ((Vo00)/100);
  168.      temp_buf[6]  = (((Vo00)0)/10);
  169.      temp_buf[7]  = (((Vo00)0));



  170. NRF24L01_Send_Data(temp_buf);


  171.   }
  172. }

  173. // ADC10 interrupt service routine
  174. #pragma vector=ADC10_VECTOR
  175. __interrupt void ADC10_ISR (void)
  176. {
  177.   __bic_SR_register_on_exit(CPUOFF);        // Clear CPUOFF bit from 0(SR)
  178. }

  179. #pragma vector=WDT_VECTOR                      // TIMER0_A1_VECTOR
  180. __interrupt void WDTVECTOR(void)
  181. {
  182.   P1OUT^=BIT5;
  183. }


  184. //NRF24L01.h

  185. #ifndef _NRF24L01_H
  186. #define _NRF24L01_H



  187. #define NRF24L01_MISO     2
  188. #define NRF24L01_IRQ     3

  189. #define NRF24L01_CE_1()  P2OUT|=BIT0
  190. #define NRF24L01_CE_0()  P2OUT&=~BIT0
  191. #define NRF24L01_CSN_1() P2OUT|=BIT5
  192. #define NRF24L01_CSN_0() P2OUT&=~BIT5
  193. #define NRF24L01_SCLK_1() P2OUT|=BIT1
  194. #define NRF24L01_SCLK_0() P2OUT&=~BIT1
  195. #define NRF24L01_MOSI_1() P2OUT|=BIT4
  196. #define NRF24L01_MOSI_0() P2OUT&=~BIT4

  197. #define NRF24L01_MISO_IN() ((P2IN&(1<<NRF24L01_MISO))>>NRF24L01_MISO)
  198. #define NRF24L01_IRQ_IN() ((P2IN&(1<<NRF24L01_IRQ))>>NRF24L01_IRQ)

  199. //////////////////////////////////////////////////////////////////////////////////////////////////////////
  200. //NRF24L01发送接收数据宽度定义
  201. #define TX_ADR_WIDTH    5   //5字节的地址宽度
  202. #define RX_ADR_WIDTH    5   //5字节的地址宽度
  203. #define TX_PLOAD_WIDTH  32  //32字节的用户数据宽度
  204. #define RX_PLOAD_WIDTH  32  //32字节的用户数据宽度



  205. //////////////////////////////////////////////////////////////////////////////////////////////////////////
  206. //NRF24L01寄存器操作指令
  207. #define NRF24L01_READ_REG        0x00  //读配置寄存器,低5位为寄存器地址
  208. #define NRF24L01_WRITE_REG       0x20  //写配置寄存器,低5位为寄存器地址
  209. #define NRF24L01_RD_RX_PLOAD     0x61  //读RX有效数据,1-32字节
  210. #define NRF24L01_WR_TX_PLOAD     0xA0  //写TX有效数据,1-32字节
  211. #define NRF24L01_FLUSH_TX        0xE1  //清除TX FIFO寄存器.发射模式下用
  212. #define NRF24L01_FLUSH_RX        0xE2  //清除RX FIFO寄存器.接收模式下用
  213. #define NRF24L01_REUSE_TX_PL     0xE3  //重新使用上一包数据,CE为高,数据包被不断发送.
  214. #define NRF24L01_NOP             0xFF  //空操作,可以用来读状态寄存器





  215. //////////////////////////////////////////////////////////////////////////////////////////////////////////
  216. //NRF24L01寄存器地址
  217. #define CONFIG          0x00  //配置寄存器地址
  218. #define EN_AA           0x01  //使能自动应答功能
  219. #define EN_RXADDR       0x02  //接收地址允许
  220. #define SETUP_AW        0x03  //设置地址宽度(所有数据通道)
  221. #define SETUP_RETR      0x04  //建立自动重发
  222. #define RF_CH           0x05  //RF通道频率,F0 = 2400 + RF_CH(MHz)
  223. #define RF_SETUP        0x06  //RF寄存器
  224. #define STATUS          0x07  //状态寄存器
  225. #define OBSERVE_TX  0x08  //发送检测寄存器
  226. #define CD              0x09  //载波检测寄存器
  227. #define RX_ADDR_P0      0x0A  //数据通道0接收地址,最大长度5个字节,低字节在前(复位值:0xE7E7E7E7E7)
  228. #define RX_ADDR_P1      0x0B  //数据通道1接收地址,最大长度5个字节,低字节在前(复位值:0xC2C2C2C2C2)
  229. #define RX_ADDR_P2      0x0C  //数据通道2接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;
  230. #define RX_ADDR_P3      0x0D  //数据通道3接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;
  231. #define RX_ADDR_P4      0x0E  //数据通道4接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;
  232. #define RX_ADDR_P5      0x0F  //数据通道5接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;
  233. #define TX_ADDR         0x10  //发送地址(低字节在前),ShockBurstTM模式下,RX_ADDR_P0与此地址相等
  234. #define RX_PW_P0        0x11  //接收数据通道0有效数据宽度(1-32字节),设置为0则非法
  235. #define RX_PW_P1        0x12  //接收数据通道1有效数据宽度(1-32字节),设置为0则非法
  236. #define RX_PW_P2        0x13  //接收数据通道2有效数据宽度(1-32字节),设置为0则非法
  237. #define RX_PW_P3        0x14  //接收数据通道3有效数据宽度(1-32字节),设置为0则非法
  238. #define RX_PW_P4        0x15  //接收数据通道4有效数据宽度(1-32字节),设置为0则非法
  239. #define RX_PW_P5        0x16  //接收数据通道5有效数据宽度(1-32字节),设置为0则非法
  240. #define FIFO_STATUS     0x17  //FIFO状态寄存器






  241. //////////////////////////////////////////////////////////////////////////////////////////////////////////
  242. //NRF24L01寄存器位操作



  243. #define MASK_RX_DR  0x40  // 可屏蔽中断RX_RD,1——IRQ引脚不显示RX_RD中断,0——RX_RD中断产生时IRQ引脚电平为低
  244. #define MASK_TX_DR  0x20  // 可屏蔽中断TX_RD,1——IRQ引脚不显示TX_RD中断,0——TX_RD中断产生时IRQ引脚电平为低
  245. #define MASK_MAX_RT  0x10  // 可屏蔽中断MAX_RT,1——IRQ引脚不显示MAX_RT中断,0——MAX_RT中断产生时IRQ引脚电平为低
  246. #define EN_CRC   0x08  // CRC使能,如果EN_AA中任意一位为高则EN_CRC强迫为高
  247. #define CRCO   0x04  // CRC模式,0——8位CRC校验,1——16位CRC校验
  248. #define PWR_UP   0x02  // 1——上电,0——掉电
  249. #define PRIM_RX   0x01  // 1——接收模式,0——发射模式


  250. #define DIS_IT_RX_DR 0x40  // IRQ引脚不显示RX_RD中断
  251. #define EN_IT_RX_DR  0x00  // RX_RD中断产生时IRQ引脚电平为低

  252. #define DIS_IT_TX_DR 0x20  // IRQ引脚不显示TX_RD中断
  253. #define EN_IT_TX_DR  0x00  // TX_RD中断产生时IRQ引脚电平为低

  254. #define DIS_IT_MAX_RT 0x10  // IRQ引脚不显示MAX_RT中断
  255. #define EN_IT_MAX_RT 0x00  // MAX_RT中断产生时IRQ引脚电平为低

  256. #define EN_CRC   0x08  // 使能CRC校验
  257. #define DIS_CRC   0x00  // 关闭CRC校验

  258. #define CRC_16bit  0x04  // 16位CRC校验
  259. #define CRC_8bit  0x00  // 8位CRC校验

  260. #define PWR_ON   0x02  // 上电
  261. #define PWR_OFF   0x00  // 掉电

  262. #define PRIM_RXD  0x01  // 接收模式
  263. #define PRIM_TXD  0x00  // 发射模式





  264. #define ENAA_P5   0x20  // 数据通道5自动应答允许
  265. #define ENAA_P4   0x10  // 数据通道4自动应答允许
  266. #define ENAA_P3   0x08  // 数据通道3自动应答允许
  267. #define ENAA_P2   0x04  // 数据通道2自动应答允许
  268. #define ENAA_P1   0x02  // 数据通道1自动应答允许
  269. #define ENAA_P0   0x01  // 数据通道0自动应答允许





  270. #define ERX_P5   0x20  // 接收数据通道5允许
  271. #define ERX_P4   0x10  // 接收数据通道4允许
  272. #define ERX_P3   0x08  // 接收数据通道3允许
  273. #define ERX_P2   0x04  // 接收数据通道2允许
  274. #define ERX_P1   0x02  // 接收数据通道1允许
  275. #define ERX_P0   0x01  // 接收数据通道0允许





  276. #define AW          0x03  // 接收/发射地址宽度

  277. #define AW_NA   0x00  // 无效
  278. #define AW_3byte  0x01  // 3字节宽度
  279. #define AW_4byte  0x02  // 4字节宽度
  280. #define AW_5byte  0x03  // 5字节宽度





  281. #define ARD          0xF0  // 自动重发延时
  282. #define ARC                0x0F  // 自动重发计数

  283. #define ARD_336us  0x00  // 等待336us
  284. #define ARD_586us  0x10  // 等待586us
  285. #define ARD_836us  0x20  // 等待836us
  286. #define ARD_1086us  0x30  // 等待1086us
  287. #define ARD_1336us  0x40  // 等待1336us
  288. #define ARD_1586us  0x50  // 等待1586us
  289. #define ARD_1836us  0x60  // 等待1836us
  290. #define ARD_2086us  0x70  // 等待2086us
  291. #define ARD_2336us  0x80  // 等待2336us
  292. #define ARD_2586us  0x90  // 等待2586us
  293. #define ARD_2836us  0xA0  // 等待2836us
  294. #define ARD_3086us  0xB0  // 等待3086us
  295. #define ARD_3336us  0xC0  // 等待3336us
  296. #define ARD_3586us  0xD0  // 等待3586us
  297. #define ARD_3836us  0xE0  // 等待3836us
  298. #define ARD_4086us  0xF0  // 等待4086us

  299. #define ARC_DISABLE  0x00  // 禁止自动重发
  300. #define ARC_1time  0x01  // 自动重发1次
  301. #define ARC_2time  0x02  // 自动重发2次
  302. #define ARC_3time  0x03  // 自动重发3次
  303. #define ARC_4time  0x04  // 自动重发4次
  304. #define ARC_5time  0x05  // 自动重发5次
  305. #define ARC_6time  0x06  // 自动重发6次
  306. #define ARC_7time  0x07  // 自动重发7次
  307. #define ARC_8time  0x08  // 自动重发8次
  308. #define ARC_9time  0x09  // 自动重发9次
  309. #define ARC_10time  0x0A  // 自动重发10次
  310. #define ARC_11time  0x0B  // 自动重发11次
  311. #define ARC_12time  0x0C  // 自动重发12次
  312. #define ARC_13time  0x0D  // 自动重发13次
  313. #define ARC_14time  0x0E  // 自动重发14次
  314. #define ARC_15time  0x0F  // 自动重发15次





  315. #define PLL_LOCK  0x10  // PLL_LOCK允许,仅应用于测试模式
  316. #define RF_DR   0x08  // 数据传输速率,0——1Mbps,1——2Mbps
  317. #define RF_PWR   0x06  // 发射功率
  318. #define LNA_HCURR  0x01  // 低噪声放大器增益


  319. #define RF_DR_1Mbps  0x00  // 数据传输速率为1Mbps
  320. #define RF_DR_2Mbps  0x08  // 数据传输速率为2Mbps

  321. #define RF_PWR__18dBm 0x00  // 发射功率为-18dBm
  322. #define RF_PWR__12dBm 0x02  // 发射功率为-12dBm
  323. #define RF_PWR__6dBm 0x04  // 发射功率为-6dBm
  324. #define RF_PWR_0dBm  0x06  // 发射功率为0dBm





  325. #define RX_DR   0x40  // 接收数据中断标志位
  326. #define TX_DS   0x20  // 数据发送完成中断标志位
  327. #define MAX_RT   0x10  // 达到最多次重发中断标志位,如果MAX_RT中断产生则必须清除后系统才能进行通讯
  328. #define RX_P_NO   0x0E  // 接收数据通道号(只读)
  329. #define TX_FULL   0x01  // TX FIFO寄存器满标志(只读)

  330. #define RX_P_NO_0  0x00  // 接收数据通道0
  331. #define RX_P_NO_1  0x02  // 接收数据通道1
  332. #define RX_P_NO_2  0x04  // 接收数据通道2
  333. #define RX_P_NO_3  0x06  // 接收数据通道3
  334. #define RX_P_NO_4  0x08  // 接收数据通道4
  335. #define RX_P_NO_5  0x0A  // 接收数据通道5





  336. #define PLOS_CNT  0xF0  // 数据包丢失计数器(只读)
  337. #define ARC_CNT   0x0F  // 重发计数器,发送新数据包时此寄存器复位(只读)





  338. #define TX_REUSE  0x40  // 若TX_REUSE=1则当CE位高电平状态时不断发送上一数据包
  339. //#define TX_FULL   0x20  // TX FIFO寄存器满标志(只读),1——TX FIFO寄存器满
  340. #define TX_EMPTY  0x10  // TX FIFO寄存器空标志(只读),1——TX FIFO寄存器空
  341. #define RX_FULL   0x02  // RX FIFO寄存器满标志(只读),1——RX FIFO寄存器满
  342. #define RX_EMPTY  0x10  // RX FIFO寄存器空标志(只读),1——RX FIFO寄存器空







  343. void SPI_Write_8bit(unsigned char dat);
  344. unsigned char SPI_Read_8bit(void);
  345. void NRF24L01_Write_Reg(unsigned char reg_name,unsigned char dat);
  346. unsigned char NRF24L01_Read_Reg(unsigned char reg_name);
  347. void NRF24L01_Write_Str(unsigned char reg_name,unsigned char *pBuf,unsigned char bytes);
  348. void NRF24L01_Read_Str(unsigned char reg_name,unsigned char *pBuf,unsigned char bytes);
  349. unsigned char NRF24L01_Read_Data(unsigned char *rx_buf);
  350. unsigned char NRF24L01_Send_Data(unsigned char *tx_buf);
  351. void NRF24L01_RX_Mode_Init(void);
  352. void NRF24L01_TX_Mode_Init(void);



  353. #endif


  354. //NRF2401.h文件

  355. #include
  356. #include "NRF24L01.h"


  357. unsigned char TX_ADDRESS[5]={0x34,0x43,0x10,0x10,0x01};//发送地址
  358. unsigned char RX_ADDRESS[5]={0x34,0x43,0x10,0x10,0x01};//接收地址



  359. void SPI_Write_8bit(unsigned char dat)
  360. {
  361.   unsigned char i;

  362.   for(i=0;i<8;i++)
  363.   {
  364.     if(dat&0x80)
  365.     {
  366.       NRF24L01_MOSI_1();
  367.     }
  368.     else
  369.     {
  370.       NRF24L01_MOSI_0();
  371.     }
  372.     NRF24L01_SCLK_1();
  373.     NRF24L01_SCLK_0();
  374.     dat = dat<<1;
  375.   }
  376. }




  377. unsigned char SPI_Read_8bit(void)
  378. {
  379.   unsigned char i,inData=0x00;

  380.   NRF24L01_SCLK_0();
  381.   for(i=0;i<8;i++)
  382.   {
  383.     inData  = inData<<1;
  384.     NRF24L01_SCLK_0();
  385.     NRF24L01_SCLK_1();
  386.     inData |= NRF24L01_MISO_IN();
  387.   }

  388.   return inData;
  389. }





  390. void NRF24L01_Write_Reg(unsigned char reg_name,unsigned char dat)
  391. {
  392.   NRF24L01_CSN_0();
  393.   SPI_Write_8bit(NRF24L01_WRITE_REG|reg_name);
  394.   SPI_Write_8bit(dat);
  395.   NRF24L01_CSN_1();
  396. }






  397. unsigned char NRF24L01_Read_Reg(unsigned char reg_name)
  398. {
  399.   unsigned char inData;

  400.   NRF24L01_CSN_0();
  401.   SPI_Write_8bit(NRF24L01_READ_REG|reg_name);
  402.   inData = SPI_Read_8bit();
  403.   NRF24L01_CSN_1();

  404.   return inData;
  405. }





  406. void NRF24L01_Write_Str(unsigned char reg_name,unsigned char *pBuf,unsigned char bytes)
  407. {
  408.   unsigned char i;

  409.   NRF24L01_CSN_0();
  410.   SPI_Write_8bit(NRF24L01_WRITE_REG|reg_name);
  411.   for(i=0;i
  412.   {
  413.     SPI_Write_8bit(pBuf[i]);
  414.   }
  415.   NRF24L01_CSN_1();
  416. }





  417. void NRF24L01_Read_Str(unsigned char reg_name,unsigned char *pBuf,unsigned char bytes)
  418. {
  419.   unsigned char i;

  420.   NRF24L01_CSN_0();
  421.   SPI_Write_8bit(NRF24L01_WRITE_REG|reg_name);
  422.   for(i=0;i
  423.   {
  424.     pBuf[i] = SPI_Read_8bit();
  425.   }
  426.   NRF24L01_CSN_1();
  427. }





  428. unsigned char NRF24L01_Read_Data(unsigned char *rx_buf)
  429. {
  430.   unsigned char Sta=0;

  431.   Sta = NRF24L01_Read_Reg(STATUS);
  432.   NRF24L01_Write_Reg(STATUS,Sta);  //必须写在if中的两条语句之前(不知道什么原因)

  433.   if(Sta & RX_DR)
  434.   {
  435.     NRF24L01_Read_Str(NRF24L01_RD_RX_PLOAD,rx_buf,RX_PLOAD_WIDTH);
  436.     NRF24L01_Write_Reg(NRF24L01_FLUSH_RX,0xFF);
  437.     NRF24L01_Write_Reg(STATUS,Sta); //用于清除RX_DR
  438.     return 1;
  439.   }
  440.   return 0;
  441. }






  442. unsigned char NRF24L01_Send_Data(unsigned char *tx_buf)
  443. {
  444.   unsigned char Sta;

  445.   NRF24L01_CE_0();
  446.   NRF24L01_Write_Str(NRF24L01_WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH);
  447.   NRF24L01_Write_Reg(CONFIG,0x0E);
  448.   NRF24L01_CE_1();

  449.   while(NRF24L01_IRQ_IN());
  450.   Sta = NRF24L01_Read_Reg(STATUS);

  451.   if(Sta & MAX_RT)
  452.   {
  453.     NRF24L01_Write_Reg(NRF24L01_FLUSH_TX,0xFF);   //必须写在NRF24L01_Write_Reg(STATUS,Sta);之前
  454.     NRF24L01_Write_Reg(STATUS,Sta);
  455.     return MAX_RT;
  456.   }
  457.   if(Sta & TX_DS)
  458.   {
  459.     return TX_DS;
  460.   }
  461.   return 0xFF;
  462. }


  463. void NRF24L01_RX_Mode_Init(void)
  464. {

  465.   P1SEL = 0x00;
  466.   P1DIR = 0xcc;  //(24l01)设置IO口方向

  467.   NRF24L01_CE_1();
  468.   NRF24L01_CSN_1();
  469.   NRF24L01_SCLK_0();
  470.   NRF24L01_CE_0();

  471.   NRF24L01_Write_Str(RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);   //写接收通道地址+有效数据+有效数据宽度

  472.   NRF24L01_Write_Reg(EN_AA,ENAA_P0);           //使能通道0的自动应答   
  473.   NRF24L01_Write_Reg(EN_RXADDR,ERX_P0);       //使能通道0的接收地址   
  474.   NRF24L01_Write_Reg(RF_CH,40);            //设置RF通信频率   
  475.   NRF24L01_Write_Reg(RX_PW_P0,RX_PLOAD_WIDTH);     //选择通道0的有效数据宽度     
  476.   NRF24L01_Write_Reg(RF_SETUP,RF_DR_2Mbps|RF_PWR_0dBm|LNA_HCURR); //设置发射功率为0db增益,传输速率为2Mbps,低噪声增益开启  
  477.   NRF24L01_Write_Reg(CONFIG,EN_CRC|CRC_16bit|PWR_ON|PRIM_RXD); //配置基本工作模式的参数

  478.   NRF24L01_CE_1();
  479. }




  480. void NRF24L01_TX_Mode_Init(void)
  481. {
  482.   NRF24L01_CE_1();
  483.   NRF24L01_CSN_1();
  484.   NRF24L01_SCLK_0();
  485.   NRF24L01_CE_0();

  486.   NRF24L01_Write_Str(TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);   //写寄存器指令+接收节点地址+地址宽度
  487.   NRF24L01_Write_Str(RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);   //为了接收设备应答信号,接收通道0地址与发送地址相同

  488.   NRF24L01_Write_Reg(EN_AA,ENAA_P0);        //使能通道0的自动应答
  489.   NRF24L01_Write_Reg(EN_RXADDR,ERX_P0);       //使能通道0的接收地址
  490.   NRF24L01_Write_Reg(SETUP_RETR,ARD_586us|ARC_10time);   //等待586us,自动重发10次
  491.   NRF24L01_Write_Reg(RF_CH,40);         //设置RF通信频率
  492.   NRF24L01_Write_Reg(RF_SETUP,RF_DR_2Mbps|RF_PWR_0dBm|LNA_HCURR); //设置发射功率为0db增益,传输速率为2Mbps,低噪声增益开启
  493.   NRF24L01_Write_Reg(CONFIG,EN_CRC|CRC_16bit|PWR_ON|PRIM_TXD); //配置基本工作模式的参数

  494.   NRF24L01_CE_1();
  495. }
复制代码
 
个人签名
 

回复

2781

帖子

419

TA的资源

五彩晶圆(中级)

板凳
 
msp430g2553超声波模块程序
  1. #include
  2. #include "12864.h"

  3. unsigned int result_start,result_end;
  4. unsigned char index=0;
  5. unsigned int temp;
  6. double distance;

  7. void send_15us()
  8. {
  9. P2OUT&=~BIT0;
  10. __delay_cycles(15);
  11. P2OUT|=BIT0;
  12. __delay_cycles(15);
  13. P2OUT&=~BIT0;

  14. }
  15. void main(void)
  16. {
  17.   WDTCTL = WDTPW + WDTHOLD;
  18.   BCSCTL1 = CALBC1_1MHZ;     // Set range
  19.   DCOCTL = CALDCO_1MHZ;    // Set DCO step + modulation*/

  20.   P1DIR&=~BIT2;//P1.2设置为输入引脚
  21.   P1SEL|=BIT2;
  22.   P2DIR|=BIT0;

  23.   TACCTL1=CAP+CCIS_0+CM_3+CCIE+SCS;
  24.   TACTL|=TASSEL_2+ID_0+MC_2+TAIE+TACLR;
  25.   TACCR1=0;

  26.    lcdinit();

  27.      _EINT();  //使能中断,这是一个C编译器支持的内部过程。
  28.      while(1)
  29.      {
  30.       send_15us();
  31.       LCD_12864_string(2,1,"距离");

  32.      }

  33. }

  34. #pragma vector=TIMER0_A1_VECTOR   //Timer0_A CC1  的中断向量
  35. __interrupt void Timer_A(void)
  36. {
  37.   switch(TA0IV)    //如果是Timer0_A CC1产生的中断
  38.   {
  39.   case 2:
  40.    {
  41.     if(TACCTL1&CCI)
  42.     {
  43.     result_start=CCR1;
  44.     index=0;
  45.     break;
  46.     }
  47.     else
  48.     {
  49.      result_end=CCR1;
  50.      if(result_end > result_start)
  51.      {
  52.       temp=result_end-result_start;
  53.      }
  54.      else
  55.      {
  56.       temp=result_end + index*65535-result_start;
  57.      }
  58.      distance=temp*0.0172;
  59.      LCD_12864_4num(1,1,distance);

  60.     }

  61.    LPM1_EXIT;      //退出低功耗模式
  62.    break;
  63.    }
  64.   case 4: break;
  65.   case 10:break;
  66.   }
  67. }
复制代码
 
个人签名
 
 

回复

2781

帖子

419

TA的资源

五彩晶圆(中级)

4
 
MSP430 2路 定时器产生PWM
  1. #include <msp430g2553.h>
  2. unsigned  int num=80,pwm=512-1,num1=40;
  3. void main (void)
  4. {
  5.   WDTCTL = WDTPW + WDTHOLD;

  6.   P1DIR |= BIT6;
  7.   P1SEL |= BIT6;
  8.   CCR0 = pwm;      //TACCR0 装载值
  9.   CCTL1 = OUTMOD_7;     //输出模式复位
  10.   CCR1 = num;
  11.   TACTL |= TASSEL_2 + TACLR + MC_1 + ID_3;  // SMCLK ;clear Timer_A;Put in /8

  12.   P2DIR |= BIT2;
  13.   P2SEL |= BIT2;
  14.   TA1CCR0 = pwm;
  15.   TA1CCTL1 = OUTMOD_6;
  16.   TA1CCR1 = num1;
  17.   TA1CTL |= TASSEL_2 + TACLR + MC_1 + ID_3;

  18.   //CCTL0=CCIE;          //捕获中断允许
  19.   _EINT();                          //使能所有中断
  20.   while(1);
  21. }
复制代码
 
个人签名
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 
代码有问题怎么破
 
 
 

回复

2781

帖子

419

TA的资源

五彩晶圆(中级)

6
 
gg丝米大 发表于 2014-4-21 02:33
代码有问题怎么破

NOKIA 5110显示器模块.zip (9.63 MB, 下载次数: 143)

G2553 nokia5110.zip (3.61 KB, 下载次数: 62)

 
个人签名
 
 

回复

12

帖子

0

TA的资源

一粒金砂(初级)

7
 
 
 
 

回复

161

帖子

0

TA的资源

一粒金砂(中级)

8
 
楼主辛苦了
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表