17回答

1收藏

[原创] 自己焊的51小板板

 

51单片机 51单片机 7371 人阅读 | 17 人回复 | 2012-10-04

本帖最后由 幻灵 于 2012-10-4 16:11 编辑

      开始转学51咯,木钱买板子,就自己抽空焊了一个最小系统,怎么样,很酷吧!!!感觉很有成就感哦,呵呵!!!
  

  
   
  
STC下载器


手机充电器提供5V电压
  1. /*******************************************************************************
  2. * 描述: *
  3. * 12864标准字库液晶演示 数据p0,控制p2 *
  4. ********************************************************************************/
  5. #include <reg51.h>
  6. #include <intrins.h>
  7. #define uchar unsigned char
  8. #define uint unsigned int
  9. /************* 12864LCD引脚定义 *************/
  10. #define LCD_data P0 //数据口
  11. sbit LCD_RS = P2^6; //寄存器选择输入
  12. sbit LCD_RW = P2^5; //液晶读/写控制
  13. sbit LCD_EN = P2^7; //液晶使能控制
  14. sbit LCD_PSB = P3^2; //串/并方式控制
  15. sbit LCD_RST = P3^7; //液晶复位端口


  16. #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
  17. /*********************************************************/
  18. uchar code DIS1[] = {" 爱板乐园 "};
  19. uchar code DIS2[] = {"自学单片机第一站"};
  20. uchar code DIS3[] = {"www.eeboard.com "};
  21. uchar code DIS4[] = {" 幻灵 "};
  22. /*******************************************************************/
  23. /* */
  24. /* 延时函数 */
  25. /* */
  26. /*******************************************************************/
  27. void delay(int ms)
  28. {
  29. while(ms--)
  30. {
  31. uchar i;
  32. for(i=0;i<150;i++)
  33. {
  34. _nop_();
  35. _nop_();
  36. _nop_();
  37. _nop_();
  38. }
  39. }
  40. }
  41. /*******************************************************************/
  42. /* */
  43. /* 延时函数 */
  44. /* */
  45. /*******************************************************************/
  46. void delay1(int ms)
  47. {
  48. while(ms--)
  49. {
  50. uchar y;
  51. for(y=0;y<100;y++) ;
  52. }
  53. }
  54. /*******************************************************************/
  55. /* */
  56. /*检查LCD忙状态 */
  57. /*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */
  58. /* */
  59. /*******************************************************************/
  60. bit lcd_busy()
  61. {
  62. bit result;
  63. LCD_RS = 0;
  64. LCD_RW = 1;
  65. LCD_EN = 1;
  66. delayNOP();
  67. result = (bit)(P0&0x80);
  68. LCD_EN = 0;
  69. return(result);
  70. }
  71. /*******************************************************************/
  72. /* */
  73. /*写指令数据到LCD */
  74. /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */
  75. /* */
  76. /*******************************************************************/
  77. void lcd_wcmd(uchar cmd)
  78. {
  79. while(lcd_busy());
  80. LCD_RS = 0;
  81. LCD_RW = 0;
  82. LCD_EN = 0;
  83. _nop_();
  84. _nop_();
  85. P0 = cmd;
  86. delayNOP();
  87. LCD_EN = 1;
  88. delayNOP();
  89. LCD_EN = 0;
  90. }
  91. /*******************************************************************/
  92. /* */
  93. /*写显示数据到LCD */
  94. /*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */
  95. /* */
  96. /*******************************************************************/
  97. void lcd_wdat(uchar dat)
  98. {
  99. while(lcd_busy());
  100. LCD_RS = 1;
  101. LCD_RW = 0;
  102. LCD_EN = 0;
  103. P0 = dat;
  104. delayNOP();
  105. LCD_EN = 1;
  106. delayNOP();
  107. LCD_EN = 0;
  108. }
  109. /*******************************************************************/
  110. /* */
  111. /* LCD初始化设定 */
  112. /* */
  113. /*******************************************************************/
  114. void lcd_init()
  115. {
  116. LCD_PSB = 1; //并口方式

  117. LCD_RST = 0; //液晶复位
  118. delay(3);
  119. LCD_RST = 1;
  120. delay(3);

  121. lcd_wcmd(0x34); //扩充指令操作
  122. delay(5);
  123. lcd_wcmd(0x30); //基本指令操作
  124. delay(5);
  125. lcd_wcmd(0x0C); //显示开,关光标
  126. delay(5);
  127. lcd_wcmd(0x01); //清除LCD的显示内容
  128. delay(5);
  129. }
  130. /*********************************************************/
  131. /* */
  132. /* 设定显示位置 */
  133. /* */
  134. /*********************************************************/
  135. void lcd_pos(uchar X,uchar Y)
  136. {
  137. uchar pos;
  138. if (X==1)
  139. {X=0x80;}
  140. else if (X==2)
  141. {X=0x90;}
  142. else if (X==3)
  143. {X=0x88;}
  144. else if (X==4)
  145. {X=0x98;}
  146. pos = X+Y ;

  147. lcd_wcmd(pos); //显示地址
  148. }
  149. /*********************************************************
  150. * *
  151. * 闪烁函数 *
  152. * *
  153. *********************************************************/
  154. void lcdflag()
  155. {
  156. lcd_wcmd(0x08);
  157. delay(400);
  158. lcd_wcmd(0x0c);
  159. delay(400);
  160. lcd_wcmd(0x08);
  161. delay(400);
  162. lcd_wcmd(0x0c);
  163. delay(400);
  164. lcd_wcmd(0x08);
  165. delay(200);
  166. lcd_wcmd(0x0c);
  167. delay(5);
  168. lcd_wcmd(0x01);
  169. delay(5);
  170. }
  171. /*********************************************************
  172. * *
  173. * 图形显示 *
  174. * *
  175. *********************************************************/
  176. void photodisplay(uchar *bmp)
  177. {
  178. uchar i,j;

  179. lcd_wcmd(0x34); //写数据时,关闭图形显示

  180. for(i=0;i<32;i++)
  181. {
  182. lcd_wcmd(0x80+i); //先写入水平坐标值
  183. lcd_wcmd(0x80); //写入垂直坐标值
  184. for(j=0;j<16;j++) //再写入两个8位元的数据
  185. lcd_wdat(*bmp++);
  186. delay1(1);
  187. }

  188. for(i=0;i<32;i++)
  189. {
  190. lcd_wcmd(0x80+i);
  191. lcd_wcmd(0x88);
  192. for(j=0;j<16;j++)
  193. lcd_wdat(*bmp++);
  194. delay1(1);
  195. }
  196. lcd_wcmd(0x36); //写完数据,开图形显示
  197. }
  198. /*********************************************************
  199. * *
  200. * 清屏函数 *
  201. * *
  202. *********************************************************/
  203. void clr_screen()
  204. {
  205. lcd_wcmd(0x34); //扩充指令操作
  206. delay(5);
  207. lcd_wcmd(0x30); //基本指令操作
  208. delay(5);
  209. lcd_wcmd(0x01); //清屏
  210. delay(5);
  211. }
  212. /**********************************************************
  213. ; 显示字符表代码
  214. **********************************************************/
  215. void bytecode()
  216. {
  217. uchar s;
  218. clr_screen(); //清屏
  219. lcd_wcmd(0x80); //设置显示位置为第一行
  220. for(s=0;s<16;s++)
  221. {
  222. lcd_wdat(0x30+s);
  223. }
  224. lcd_wcmd(0x90); //设置显示位置为第二行
  225. for(s=0;s<16;s++)
  226. {
  227. lcd_wdat(0x40+s);
  228. }
  229. lcd_wcmd(0x88); //设置显示位置为第三行
  230. for(s=0;s<16;s++)
  231. {
  232. lcd_wdat(0x50+s);
  233. }
  234. lcd_wcmd(0x98); //设置显示位置为第四行
  235. for(s=0;s<16;s++)
  236. {
  237. lcd_wdat(0x60+s);
  238. }
  239. }
  240. /*********************************************************
  241. * *
  242. * 主函数 *
  243. * *
  244. *********************************************************/
  245. void main()
  246. {
  247. uchar i;
  248. delay(100); //上电,等待稳定
  249. lcd_init(); //初始化LCD
  250. while(1)
  251. {
  252. lcd_pos(1,0); //设置显示位置为第一行
  253. for(i=0;i<16;i++)
  254. {
  255. lcd_wdat(DIS1[i]);
  256. delay(30);
  257. }

  258. lcd_pos(2,0); //设置显示位置为第二行
  259. for(i=0;i<16;i++)
  260. {
  261. lcd_wdat(DIS2[i]);
  262. delay(30);
  263. }
  264. lcd_pos(3,0); //设置显示位置为第三行
  265. for(i=0;i<16;i++)
  266. {
  267. lcd_wdat(DIS3[i]);
  268. delay(30);
  269. }
  270. lcd_pos(4,0); //设置显示位置为第四行
  271. for(i=0;i<16;i++)
  272. {
  273. lcd_wdat(DIS4[i]);
  274. delay(30);
  275. }
  276. delay(1000);
  277. lcdflag();
  278. }
  279. }
复制代码

分享到:
回复

使用道具 举报

回答|共 17 个

倒序浏览

沙发

幻灵_3000624

发表于 2012-10-4 16:22:10 | 只看该作者

wyzamazon 发表于 2012-10-4 16:15
帖子好长   怎么没秀秀板子背面呢

背面惨不忍睹啊
板凳

幻灵_3000624

发表于 2012-10-4 16:29:33 | 只看该作者

wyzamazon 发表于 2012-10-4 16:15
帖子好长   怎么没秀秀板子背面呢

   

背面很烂其实不是我的错,都是烙铁惹的祸,它不热我也没办法
地板

E08610225

发表于 2012-10-4 22:32:12 | 只看该作者

嘿嘿~ 不错~!继续努力!

①人生最重要的三件事:一孝顺;二行善;三学习。
②人欲立业,首要立德。做自己想做的人,一个用心听事、用心做事的人。
③树欲静而风不止,子欲养而亲不待。父母养我育我,他们能够再等多久?
④切记戒骄戒躁。
5#

幻灵_3000624

发表于 2012-10-5 16:14:16 | 只看该作者

E08610225 发表于 2012-10-4 22:32
嘿嘿~ 不错~!继续努力!

                                         
6#

翔宇

发表于 2012-10-5 19:59:26 | 只看该作者

幻灵 发表于 2012-10-4 16:29
背面很烂其实不是我的错,都是烙铁惹的祸,它不热我也没办法

嗯,其实挺不错的了,如果加上流水灯、蜂鸣器、数码管等器件可能会更好些。做东西要使其能够循环利用,自己用完之后,让它的价值继续体现、延续下去。
世代意志的传承,我的梦必将实现!
7#

幻灵_3000624

发表于 2012-10-7 20:39:38 | 只看该作者

翔宇 发表于 2012-10-5 19:59
嗯,其实挺不错的了,如果加上流水灯、蜂鸣器、数码管等器件可能会更好些。做东西要使其能够循环利用,自 ...

正在不断扩充中······
8#

翔宇

发表于 2012-10-8 16:08:04 | 只看该作者

幻灵 发表于 2012-10-7 20:39
正在不断扩充中······

嗯嗯,加油哦~
世代意志的传承,我的梦必将实现!
9#

小菜儿

发表于 2012-10-9 10:28:42 | 只看该作者

楼主给力啊!!!
10#

shamowangzi

发表于 2012-10-13 16:28:00 | 只看该作者

介个太强最!LZ拿苹果的东东给他供电吗?
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条