久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3843|回復: 1
收起左側

單片機數控電源設計,含源代碼,原理圖

[復制鏈接]
ID:890721 發表于 2021-3-11 13:19 | 顯示全部樓層 |閱讀模式
大學時期做的一個基于單片機的數控電源,實現利用顯示屏顯示電壓電流,并通過按鍵控制其大小。
附件里有源代碼,ad原理圖
G786UU1_O`UZAO0Y1$C7])N.png

單片機源程序如下:
  1. #include <reg51.h>
  2. #define SC P0
  3. void delay_ms(int n);
  4. void AN();
  5. void XSJ(unsigned char SJ);//寫數據
  6. void XZL(unsigned char ZL);//寫指令
  7. void CSH();//初始化
  8. void SZZH();//轉換
  9. void TLC_5651(int buf);
  10. unsigned int A_D();

  11. sbit key1 = P2^3; //左1
  12. sbit key2 = P2^4;
  13. sbit key3 = P2^5;
  14. sbit key4 = P2^6;

  15. sbit RS = P2^0; //數據h/命令L
  16. sbit RW = P2^1; //讀H/寫L
  17. sbit E = P2^2; //使能

  18. sbit CS_5615=P1^5; //定義片選信號IO口
  19. sbit CLK_5615=P1^6; //定義時鐘信號IO口
  20. sbit DAT_5615=P1^7; //定義數據輸入IO口

  21. sbit CS=P1^4; //定義片選信號IO口
  22. sbit CLK=P1^5; //定義時鐘信號IO口
  23. sbit DIO=P1^6; //定義數據輸入IO口

  24. unsigned int U = 0;//電壓
  25. unsigned int I = 0;//電流

  26. char uu[3];
  27. char ii[3];
  28. int main()
  29. {
  30. CSH();
  31. while(1)
  32. {
  33. AN();
  34. SZZH();
  35. XZL(0x82);
  36. XSJ(uu[0]);
  37. XZL(0x83);
  38. XSJ(uu[1]);
  39. XZL(0x84);
  40. XSJ('.');
  41. XZL(0x85);
  42. XSJ(uu[2]);
  43. XZL(0xc2);
  44. XSJ(ii[0]);
  45. XZL(0xc3);
  46. XSJ(ii[1]);
  47. XZL(0xc4);
  48. XSJ('.');
  49. XZL(0xc5);
  50. XSJ(ii[2]);
  51. TLC_5651(U);
  52. if(U>999)
  53. U=0;
  54. I=A_D();
  55. }
  56. }
  57. void CSH()//初始化
  58. {
  59. int wz =0x82,i;
  60. XZL(0X38);
  61. XZL(0X0F);
  62. //XZL(0X06);
  63. //XZL(0X80);
  64. XZL(0x80);
  65. XSJ('V');
  66. XZL(0x81);
  67. XSJ('=');
  68. XZL(0x8f);
  69. XSJ('V');
  70. XZL(0xc0);
  71. XSJ('I');
  72. XZL(0xc1);
  73. XSJ('=');
  74. XZL(0xCf);
  75. XSJ('A');
  76. for(i=0;i<13;i++)
  77. {
  78. XZL(wz++);
  79. XSJ(' ');
  80. }
  81. wz = 0xc2;
  82. for(i=0;i<13;i++)
  83. {

  84. delay_ms(5);
  85. XZL(wz++);
  86. XSJ(' ');
  87. }
  88. }
  89. void XZL(unsigned char ZL)//寫指令
  90. {
  91. E=0;
  92. RS=0;
  93. RW=0;
  94. SC = ZL;
  95. E=1;
  96. delay_ms(5);
  97. E=0;
  98. }
  99. void XSJ(unsigned char SJ)//寫數據
  100. {
  101. E=0;
  102. RS=1;
  103. RW=0;
  104. SC = SJ;
  105. E=1;
  106. delay_ms(5);
  107. E=0;
  108. }
  109. void AN() //按鈕控制電壓數
  110. {
  111. if(key1 == 0)
  112. {
  113. delay_ms(20);
  114. if(key1 == 0)
  115. U+=2;
  116. }
  117. if(key2 == 0)
  118. {
  119. delay_ms(20);
  120. if(key2 == 0)
  121. U-=2;
  122. }
  123. if(key3 == 0)
  124. {
  125. delay_ms(20);
  126. if(key3 == 0)
  127. U = 50;
  128. }
  129. if(key4 == 0)
  130. {
  131. delay_ms(20);
  132. if(key4 == 0)
  133. U = 0;
  134. }
  135. }
  136. void delay_ms(int n) //阻塞延時
  137. {
  138. int i = 0,j = 0;
  139. for(i = 0;i<n;i++)
  140. for(j = 0;j<123;j++);
  141. }
  142. void SZZH()//轉換
  143. {
  144. uu[0] = 0x30+U/100;
  145. uu[1] = 0x30+(U/10)%10;
  146. uu[2] = 0x30+U%10;
  147. ii[0] = 0x30+I/100;
  148. ii[1] = 0x30+(I/10)%10;
  149. ii[2] = 0x30+I%10;
  150. }
  151. void TLC_5651(int buf) //電壓
  152. {
  153. int a,c; //定義變量
  154. c=buf*2; //要輸出的數據賦值
  155. CS_5615=0; //引腳拉低
  156. for(a=16;a>0;a--) //循環16次
  157. {
  158. DAT_5615=c>>15; //把數據串行輸入進da芯片(把數據右移15位得到最高位數據,賦值給數據腳)
  159. c=c<<1; //將數據左移一位,下次循環時就是傳輸第二位數據了
  160. CLK_5615=1; //拉高
  161. CLK_5615=0; //拉低
  162. }
  163. CLK_5615=1;
  164. CLK_5615=0;
  165. CLK_5615=1;
  166. CLK_5615=0;
  167. CS_5615=1;
  168. }
  169. unsigned int A_D()
  170. {
  171. unsigned char i,dat;
  172. CS=1; //一個轉換周期開始
  173. CLK=0; //為第一個脈沖作準備
  174. CS=0; //CS置0,片選有效

  175. DIO=1; //DIO置1,規定的起始信號
  176. CLK=1; //第一個脈沖
  177. CLK=0; //第一個脈沖的下降沿,此前DIO必須是高電平
  178. DIO=1; //DIO置1, 通道選擇信號
  179. CLK=1; //第二個脈沖,第2、3個脈沖下沉之前,DI必須跟別輸入兩位數據用于選擇通道,這里選通道CH0
  180. CLK=0; //第二個脈沖下降沿
  181. DIO=0; //DI置0,選擇通道0
  182. CLK=1; //第三個脈沖
  183. CLK=0; //第三個脈沖下降沿
  184. DIO=1; //第三個脈沖下沉之后,輸入端DIO失去作用,應置1
  185. CLK=1; //第四個脈沖
  186. for(i=0;i<8;i++) //高位在前
  187. {
  188. CLK=1; //第四個脈沖
  189. CLK=0;
  190. dat<<=1; //將下面儲存的低位數據向右移
  191. dat|=(unsigned char)DIO; //將輸出數據DIO通過或運算儲存在dat最低位
  192. }
  193. CS=1; //片選無效
  194. return dat-25; //將讀出的數據返回
  195. }
復制代碼

新建文件夾 (2).zip

74.92 KB, 下載次數: 105, 下載積分: 黑幣 -5

回復

使用道具 舉報

無效樓層,該帖已經被刪除
ID:914746 發表于 2021-6-7 10:19 來自觸屏版 | 顯示全部樓層
樓主,請問有仿真圖嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人精品免费视频大全最热 | www.亚洲.com | 91电影院 | 国产9 9在线 | 中文 | 中文字幕在线精品 | 亚洲精品久久久一区二区三区 | 国产精品国产 | 操操操日日日 | 操人网 | 成人福利网 | 视频在线亚洲 | 国产亚洲成av人片在线观看桃 | 黄色免费网址大全 | av午夜电影 | 午夜精品一区二区三区在线视频 | 超碰免费在线观看 | 日韩第一页 | 国产成人精品一区二三区在线观看 | 国产一区二区 | 欧美日韩成人在线观看 | 亚洲电影一区 | 羞羞视频免费在线 | 国产精品一区二 | 亚洲国产成人精品一区二区 | 美女午夜影院 | 免费看av大片 | 福利视频网站 | 国产91在线观看 | 婷婷丁香在线视频 | 日韩欧美理论片 | 三极网站| 日韩中文字幕一区 | 国产乱码精品一区二区三区中文 | 国产一区二区三区日韩 | 91社区在线高清 | 久久精品亚洲国产 | 亚洲 欧美 日韩在线 | 浮生影院免费观看中文版 | 隔壁老王国产在线精品 | 黄色在线观看国产 | 天天拍天天操 |