找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 681|回复: 0
打印 上一主题 下一主题
收起左侧

单片机程序求助,为什么lcd不显示频率

[复制链接]
跳转到指定楼层
楼主

代码如下
  1. #include<reg52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit P00 = P0^0;
  6. sbit P01 = P0^1;
  7. sbit P02 = P0^2;
  8. sbit P03 = P0^3;
  9. sbit P04 = P0^4;
  10. sbit P05 = P0^5;
  11. sbit P06 = P0^6;
  12. sbit P07 = P0^7;
  13. sbit P10 = P1^0;
  14. sbit P11 = P1^1;
  15. sbit P12 = P1^2;
  16. sbit P13 = P1^3;
  17. sbit P14 = P1^4;
  18. sbit P15 = P1^5;
  19. sbit P16 = P1^6;
  20. sbit P17 = P1^7;
  21. sbit P20 = P2^0;
  22. sbit P21 = P2^1;
  23. sbit P22 = P2^2;
  24. sbit P23 = P2^3;
  25. sbit P24 = P2^4;
  26. sbit P25 = P2^5;
  27. sbit P26 = P2^6;
  28. sbit P27 = P2^7;
  29. sbit P30 = P3^0;
  30. sbit P31 = P3^1;
  31. sbit P32 = P3^2;
  32. sbit P33 = P3^3;
  33. sbit P34 = P3^4;
  34. sbit P35 = P3^5;
  35. sbit P36 = P3^6;
  36. sbit P37 = P3^7;

  37. /*********** LCD  ************/
  38. #define RS P22
  39. #define RW P21
  40. #define LCDEN P20
  41. #define LCD_DATA P0
  42. #define LCD_BUSY P0
  43. uchar idata lcd_code[10];
  44. //*****************************************???????***************************************//
  45. void delayus(uint us)
  46. {
  47. for(;us >0;us--)
  48. {
  49.   _nop_();
  50. }
  51. }
  52. void delayms(uint ms)//??????? ms
  53. {
  54.     uchar a,b,c;
  55. while(ms--)
  56. {
  57.    for(c=1;c>0;c--)
  58.         for(b=142;b>0;b--)
  59.             for(a=2;a>0;a--);
  60. }
  61. }
  62. //**********????????????**********
  63. void string_copy(uchar *target,uchar *source)//????????? target:??? source???
  64. {
  65. uchar i = 0;
  66. for(i = 0;source[i] != '\0';i++)//???target????? ??????????
  67. {
  68.   target[i] = source[i];
  69. }
  70. target[i] = '\0';
  71. }
  72. //**********???????????**********
  73. uchar string_cmp(uchar *target,uchar *source)//???????? target:??? source???
  74. {
  75. uchar revalue;
  76. uchar i = 0;
  77. for(i = 0;target[i] != '\0' && source[i] != '\0';i++)  //????????????'\0'????? ???????????'\0'??????
  78. {
  79.   if(target[i] == source[i])
  80.   {
  81.    revalue = 1;
  82.   }
  83.   else
  84.   {
  85.    revalue = 0;
  86.    break;
  87.   }  
  88. }
  89. if(revalue == 1)
  90. {
  91.   if(target[i] == '\0' && source[i] == '\0')
  92.    revalue = 1;
  93.   else
  94.    revalue = 0;
  95. }
  96. return(revalue);
  97. }
  98. //****************    LCD    ********************
  99. //LCD??????????
  100. void busy_check()  //?μ???
  101. {
  102. RW = 1;  //??
  103. RS = 0; //???????
  104. LCD_DATA = 0xFF;//??????????????I/O?????1  
  105. LCDEN = 0;
  106. _nop_();
  107. _nop_();
  108. _nop_();
  109. _nop_();
  110. LCDEN = 1;// EN????????? ????????????
  111. _nop_();
  112. _nop_();
  113. _nop_();
  114. _nop_();
  115. while(1)
  116. {
  117.   if(LCD_BUSY == 0)//P07 == 0???????
  118.    break;
  119. }  
  120. delayms(2);//????????????
  121. }
  122. void lcdwrcom(uchar command)//д???
  123. {
  124. busy_check();
  125. RW = 0;//д
  126.     RS = 0;//???????
  127.     LCD_DATA = command;
  128. LCDEN = 1;//??????д?????
  129. _nop_();
  130. _nop_();
  131. _nop_();
  132. _nop_();
  133. LCDEN = 0;
  134. }
  135. void lcdwrdata(uchar lcd_data)//д???? ???????????????????????
  136. {
  137. busy_check();
  138. RW = 0;//д
  139.     RS = 1;//????????
  140.     LCD_DATA = lcd_data;
  141. LCDEN = 1;//??????д?????
  142. _nop_();
  143. _nop_();
  144. _nop_();
  145. _nop_();
  146. LCDEN = 0;
  147. }
  148. void lcd_init()
  149. {
  150. delayms(15);//??? lcd1602??絽????????????   
  151. RW = 0;//д
  152. RS = 0;//???????
  153.     LCD_DATA = 0x38;// 0x38????????????16X2 ???,5X7 ????,8 λ??????'
  154. LCDEN = 1;
  155. _nop_();
  156. _nop_();
  157. _nop_();
  158. _nop_();
  159. LCDEN = 0;
  160. delayms(5);
  161. lcdwrcom(0x0c);//????? ???? ?????
  162. lcdwrcom(0x06);//???3 ??????? ????????????????Ч
  163. lcdwrcom(0x01);// ??????????λ?????00Hλ?á?
  164. }
  165. //LCD?????????
  166. void address(uchar x,uchar y)  //??λ??????д??????
  167. {
  168. uchar location;
  169. if(x == 0)
  170.      location = 0x80|y;
  171. else
  172.   location = 0xC0|y;
  173.   lcdwrcom(location);  
  174. }
  175. void printchar(uchar x,uchar y,uchar letter)//???????????????
  176. {
  177. address(x,y);
  178. lcdwrdata(letter);
  179. }
  180. void printword(uchar x,uchar y,uchar *word) //??????????????飩
  181. {
  182. uchar i = 0;
  183. for(i = 0;word[i] != '\0';i++)
  184. {
  185.   address(x,y + i);
  186.   lcdwrdata(word[i]);
  187. }
  188. }
  189. void printuint(uchar x,uchar y,uchar num_ws_max,uint num)//???????????? 0~65535 x:?? y???? num_ws_max ?????????λ??
  190. {
  191. uchar i = 0;
  192. uchar str[5] = {0x20,0x20,0x20,0x20,0x20};
  193. if(num >= 10000)
  194. {
  195.   str[0] = num/10000 + '0';
  196.   str[1] = num%10000/1000 + '0';
  197.   str[2] = num%1000/100 + '0';
  198.   str[3] = num%100/10 + '0';
  199.   str[4] = num%10 + '0';
  200. // str[5] = '\0';  //?????????????????
  201. }
  202. else if(num >= 1000)
  203. {
  204.   str[0] = num/1000 + '0';
  205.   str[1] = num%1000/100 + '0';
  206.   str[2] = num%100/10 + '0';
  207.   str[3] = num%10 + '0';
  208.   str[4] ='\0';
  209. }
  210. else if(num >= 100)
  211. {
  212.   str[0] = num/100 + '0';
  213.   str[1] = num%100/10 + '0';
  214.   str[2] = num%10 + '0';
  215.   str[3] = '\0';
  216. }
  217. else if(num >=10)
  218. {
  219.   str[0] = num/10 + '0';
  220.   str[1] = num%10 + '0';
  221.   str[2] = '\0';
  222. }
  223. else if(num >= 0)
  224. {
  225.   str[0] = num + '0';
  226.   str[1] = '\0';
  227. }
  228.   
  229. for(i = 0;i <= 5;i++) //uint???? ????65535 ?5λ??
  230. {
  231.   if(str[i] != '\0' && i < num_ws_max)
  232.   {
  233.    address(x,y + i);
  234.    lcdwrdata(str[i]);
  235.   }
  236.   else if(str[i] == '\0' && i < num_ws_max)
  237.   {
  238.    address(x,y+i);
  239.    lcdwrdata(' ');//???        // ???????????????λ????Χ???????????λ??0x20?????
  240.                //???磺?????3λ??999 ?????99??????9+'0' 9+'0' 0x20
  241.   }     
  242. }
  243. }
  244. void printvolt(uchar x,uchar y,uint v) //?????3λ??????100 ??????λС?? ???????????? 0.00~5.00V
  245. {            
  246. uchar str[4] = "0";
  247. uchar i = 0;
  248. str[0] = v/100 + '0';
  249. str[1] = '.';
  250. str[2] = v%100/10 + '0';
  251. str[3] = v%10 + '0';
  252. printword(x,y,str);

  253. }
  254. //************ ????? *************
  255. uint t0_flag = 0;
  256. uchar t1_flag = 0;
  257. uint fre = 0;
  258. void timer_init()
  259. {
  260. ET0 = 1;
  261. ET1 = 1;
  262. TMOD = 0x15; //?????0???????? , ?????1???????1
  263. TH0 = 255;
  264. TL0 = 255;
  265. TH1 = 0x3C;
  266. TL1 = 0xB0;//50MS
  267. }
  268. void timer0() interrupt 1
  269. {
  270. TH0 = 255;
  271. TL0 = 255;
  272. t0_flag++;
  273. }
  274. void timer1() interrupt 3
  275. {
  276. TH1 = 0x3C;
  277. TL1 = 0xB0;
  278. t1_flag++;
  279. if(t1_flag == 20)
  280. {
  281.   fre = t0_flag;
  282.   TR0 = 0;
  283.   TR1 = 0;
  284.   t1_flag = 0;
  285. }
  286. }
  287. void main()
  288. {
  289. EA = 1;
  290. lcd_init();
  291. timer_init();
  292. while(1)
  293. {
  294.   if(P10 == 0)
  295.   {
  296.    TH0 = 255;
  297.    TL0 = 255;
  298.    TH1 = 0x3C;
  299.    TL1 = 0xB0;
  300.    t0_flag = 0;
  301.    t1_flag = 0;
  302.    TR0 = 1;
  303.    TR1 = 1;
  304.   }
  305.   
  306.   printword(0,0,"PL:");
  307.   printuint(0,4,5,t0_flag);
  308.   printword(1,0,"t1_flag:");
  309.   printuint(1,8,3,t1_flag);  
  310.   
  311. }
  312. }
复制代码

这是程序,乱码的地方原来是注释。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表