找回密码
 立即注册

QQ登录

只需一步,快速开始

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

1602简易信号强度指示

[复制链接]
跳转到指定楼层
楼主
ID:76299 发表于 2015-4-10 01:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  1. //----0---6格信号强度指示----
  2. #include <reg52.h>
  3. #include "stdio.h"


  4. #define u8 unsigned char
  5. #define u16 unsigned int

  6. #define DATA P2  

  7. sbit RS=P0^5;  
  8. sbit RW=P0^6;   
  9. sbit EN=P0^7;   
  10. u8 code font[8]={0x04,0x0e,0x15,0x04,0x04,0x04,0x04,0x00};     

  11. u8 code sign_font[7][8]={{0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00},   
  12.                          {0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x00},
  13. {0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x00},
  14. {0x00,0x00,0x00,0x08,0x18,0x18,0x18,0x00},
  15. {0x00,0x00,0x04,0x0c,0x1c,0x1c,0x1c,0x00},
  16. {0x00,0x02,0x06,0x0e,0x1e,0x1e,0x1e,0x00},
  17. {0x01,0x03,0x07,0x0f,0x1f,0x1f,0x1f,0x1f},
  18.                          };
  19. u8 code clear_font[8]={0};   

  20. bit f_busy;   


  21. void delay(u16 x)  
  22. {
  23. while(x--);
  24. }

  25. void busy()   
  26. {
  27. u8 st;
  28. if(f_busy!=1)
  29. {
  30. return;
  31. }
  32.   else
  33. {
  34.    EN=0;
  35. RW=1;
  36. RS=0;   
  37. DATA=0xff;
  38. do
  39. {
  40. EN=0;
  41. EN=1;
  42. delay(10);
  43. st=DATA;
  44. }while(st&0x80);
  45. EN=0;
  46. delay(10);       
  47. }       
  48. }

  49. void write_ddram(u8 add)  
  50. {
  51.   busy();
  52. EN=0;
  53. RW=0;
  54. RS=0;
  55. DATA=add|0x80;
  56. EN=1;
  57. delay(10);
  58. EN=0;
  59. delay(10);

  60. }

  61. void write_dat(u8 dat)  
  62. {
  63. busy();
  64. EN=0;
  65. RW=0;
  66. RS=1;
  67. DATA=dat;
  68. EN=1;
  69. delay(10);
  70. EN=0;
  71. delay(10);       
  72. }

  73. void write_cmd(u8 cmd)   
  74. {
  75. busy();
  76. EN=0;
  77. RW=0;
  78. RS=0;
  79. DATA=cmd;
  80. EN=1;
  81. delay(10);
  82. EN=0;
  83. delay(10);
  84. }

  85. void show_string(u8 add,u8 *p)   
  86. {
  87. write_ddram(add);
  88. while(*p)
  89. {
  90.   write_dat(*p);
  91. p++;
  92. }         
  93. }

  94. void show_char(u8 add,u8 n)
  95. {
  96. write_ddram(add);
  97. write_dat(n);
  98. }

  99. void set_cgram(u8 add)   //设置cgram地址
  100. {
  101. busy();
  102. EN=0;
  103. RW=0;
  104. RS=0;
  105. DATA=add|0x40;    //设置地址时候用
  106. EN=1;
  107. delay(10);
  108. EN=0;
  109. delay(10);       
  110. }

  111. void set_code_cgram(u8 *font, u8 add)   
  112. {
  113. u8 i;
  114. set_cgram(add*8);     //一个字符8行
  115.   for(i=0;i<8;i++)
  116. {
  117. write_dat(font[i]);
  118. }
  119. }


  120. void show_strength(u8 add,u8 x)
  121. {
  122. if(x<2)
  123. {
  124. set_code_cgram(clear_font,6);
  125. show_char(add+1,6);
  126.   set_code_cgram(sign_font[x],x);
  127. show_char(add,x);
  128. }
  129. else
  130. {
  131.   set_code_cgram(sign_font[1],1);
  132. show_char(add,1);
  133. set_code_cgram(sign_font[x],x);
  134. show_char(add+1,x);       
  135. }
  136. if(x>6)x=0;       
  137. }

  138. void LCD_init()   //------------
  139. {
  140. f_busy=0;
  141. delay(15000);
  142. write_cmd(0x38);
  143. delay(5000);
  144. write_cmd(0x38);
  145. delay(5000);
  146. write_cmd(0x38);
  147. f_busy=1;
  148. write_cmd(0x38);  
  149. write_cmd(0x08);  
  150. write_cmd(0x01);
  151. write_cmd(0x06);  
  152. write_cmd(0x0f);       
  153. }

  154. void main()
  155. {
  156. u8 i;
  157. LCD_init();
  158. show_string(0," Sign test!!!");
  159.   show_string(40," Strength: ");

  160. while(1)
  161. {
  162. for(i=0;i<6;i++)
  163. {
  164. delay(60000);
  165. show_strength(50,i);
  166. }

  167. }       
  168. }
复制代码







分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:43383 发表于 2019-1-7 16:22 | 只看该作者
求教硬件怎么做?例如检测100MHZ
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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