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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1132|回復: 0
打印 上一主題 下一主題
收起左側

STC15單片機+MCP4017+Proteus仿真代碼

[復制鏈接]
跳轉到指定樓層
樓主
MCP4017的仿真。


單片機源程序如下:
  1. #include <STC15Fxxxx.h>
  2. #include <intrins.h>

  3. #define uint unsigned int
  4. #define uchar unsigned char

  5. //#define FOSC 24000000L


  6. #define IIC_SDA_H P32=1 //BIT2 P3.2為SDA輸出高電平

  7. #define IIC_SDA_L P32=0 //BIT2 P3.2為SDA輸出低電平

  8. #define IIC_SDA P32

  9. #define IIC_SCL_H P31=1 //BIT1 P3.1為SCL輸出高電平

  10. #define IIC_SCL_L P31=0 //BIT1 P3.1為SCL輸出低電平


  11. void delay_5us(unsigned int bus) // 2US
  12. {
  13.         unsigned int a;
  14.         while (bus)
  15.         {
  16.                 a = 1;
  17.                 while (a--)
  18.                         ;
  19.                 bus--;
  20.         }
  21.         return;
  22. }


  23. /********IIC初始化************/

  24. void IIC_Init(void)

  25. {

  26. IIC_SDA_H; //SDA拉高

  27. IIC_SCL_H; //SCL拉高

  28. }

  29. /********IIC通訊開始************/

  30. void IIC_Start(void)

  31. {



  32. IIC_SCL_H;

  33. delay_5us(20);

  34. IIC_SDA_H;

  35. delay_5us(20);

  36. IIC_SDA_L;

  37. delay_5us(20);

  38. IIC_SCL_L;

  39. delay_5us(20);

  40. }



  41. /********IIC通訊結束************/

  42. void IIC_Stop(void)

  43. {



  44. IIC_SCL_L;

  45. delay_5us(1);

  46. IIC_SDA_L;

  47. delay_5us(2);

  48. IIC_SCL_H;

  49. delay_5us(10);

  50. IIC_SDA_H;

  51. delay_5us(10);

  52. }


  53. /********IIC從設備應答************/

  54. void IIC_Wait_ACK(void)

  55. {

  56. uchar i = 0;



  57. IIC_SCL_H;

  58. delay_5us(1);

  59. while ((IIC_SDA) && i < 240)

  60. i++;

  61. IIC_SCL_L;



  62. delay_5us(2);

  63. }

  64. /********主設備非應答************/

  65. void IIC_NACK(void)

  66. {

  67. IIC_SCL_H;

  68. delay_5us(1);

  69. IIC_SDA_H;

  70. delay_5us(1);

  71. IIC_SCL_L;

  72. delay_5us(2);

  73. }
  74. /********IIC發送一個字節************/

  75. void IIC_WriteByte(uchar byte)

  76. {

  77. uchar len = 0;

  78. IIC_SCL_L;

  79. delay_5us(10);

  80. for (len = 0; len < 8; len++)

  81. {

  82. if (byte & 0x80)

  83. {

  84. IIC_SDA_H;

  85. }

  86. else

  87. {

  88. IIC_SDA_L;

  89. }

  90. delay_5us(10);

  91. IIC_SCL_H;

  92. byte <<= 1;

  93. delay_5us(10);

  94. IIC_SCL_L;

  95. delay_5us(10);

  96. }

  97. IIC_SDA_H;

  98. delay_5us(1);

  99. IIC_SCL_L;

  100. delay_5us(2);

  101. }

  102. /*********************************************

  103. 功 能:向從設備接收一個字節

  104. 返回值:Byte--讀取到的字節

  105. **********************************************/

  106. uchar IIC_ReadByte(void)

  107. {

  108. uchar len = 0, Byte = 0;

  109. IIC_SDA_H;



  110. for (len = 0; len < 8; len++)

  111. {

  112. IIC_SCL_L;

  113. delay_5us(1);

  114. IIC_SCL_H;

  115. delay_5us(1);

  116. Byte <<= 1;

  117. Byte |= (IIC_SDA);

  118. delay_5us(1);

  119. IIC_SCL_L;

  120. delay_5us(1);

  121. }

  122. return Byte;

  123. }

  124. /*********************************************

  125. 函數名:IIC_ReceiveData

  126. 功 能:向從設備接收一個字節,并帶應答

  127. **********************************************/

  128. uchar IIC_ReceiveData(uchar Ack)

  129. {

  130. uchar i = 0, ReadValue = 0;



  131. IIC_SDA_H;



  132. IIC_SCL_L;

  133. for (i = 0; i < 8; i++)

  134. {

  135. IIC_SCL_H;

  136. delay_5us(1);

  137. ReadValue <<= 1;

  138. if ((IIC_SDA )!= 0)

  139. {

  140. ReadValue |= 0x01;

  141. }

  142. delay_5us(1);

  143. IIC_SCL_L;

  144. delay_5us(2);

  145. }

  146. if (Ack)

  147. {

  148. IIC_SCL_L;



  149. IIC_SDA_L;

  150. delay_5us(2);

  151. IIC_SCL_H;

  152. delay_5us(1);

  153. IIC_SCL_L;

  154. }

  155. else

  156. {

  157. IIC_SCL_L;



  158. IIC_SDA_H;

  159. delay_5us(2);

  160. IIC_SCL_H;

  161. delay_5us(1);

  162. IIC_SCL_L;

  163. }

  164. return ReadValue;

  165. }



  166. /******************************MCP4017*****************************************/

  167. void MCP4017_Init(void)

  168. {

  169. IIC_Init(); // I2C初始化

  170. }

  171. /*********************************************

  172. 函數名:MCP4017_Write_DATA

  173. 功 能:寫 地址 數據

  174. 形 參:addr 地址0x5E dat 數據

  175. **********************************************/

  176. void MCP4017_Write_DATA(const uchar addr, const char DATA)

  177. { IIC_Init();

  178. IIC_Start(); // 啟動

  179. IIC_WriteByte(addr); // 設備地址

  180. IIC_Wait_ACK(); // 等待數據響應

  181. // IIC_WriteByte(addr); // 發送寄存器地址

  182. // IIC_Wait_ACK(); // 等待數據響應

  183. IIC_WriteByte(DATA); // 發送數據

  184. IIC_Wait_ACK(); // 等待數據響應

  185. IIC_Stop(); // 停止

  186. }

  187. /*********************************************

  188. 函數名:PAJ7620U2_Read_DATA

  189. 功 能:讀地址數據

  190. 形 參:addr--寄存器地址_0x5E

  191. **********************************************/

  192. uchar MCP4017_Read_DATA(const uchar addr)

  193. {

  194. uchar GET_DATA = 0;

  195. // IIC_Start(); // 啟動

  196. // IIC_WriteByte(MCP4017.ADDR); // 發送地址

  197. // IIC_Wait_ACK(); // 等待數據響應

  198. // IIC_WriteByte(addr); // 發送地址

  199. // IIC_Wait_ACK(); // 等待數據響應

  200. IIC_Start(); // 啟動

  201. IIC_WriteByte(addr | 1); // 發送地址

  202. IIC_Wait_ACK(); // 等待數據響應

  203. GET_DATA = IIC_ReadByte(); // 獲取數據

  204. IIC_Wait_ACK(); // 等待數據響應

  205. IIC_Stop(); // 停止

  206. return GET_DATA;

  207. }

  208. /********************************************************
  209. 函數名稱:void main()
  210. 函數作用:主函數
  211. 參數說明:
  212. ********************************************************/

  213. /******************** 主函數 **************************/
  214. void main(void)
  215. {
  216.   // unsigned char value = 0x7F; // 設置初始值
  217.          unsigned char value = 0x00; // 設置初始值
  218.         P0M1 = 0;
  219.         P0M0 = 0xff; //設置為準雙向口
  220.         P1M1 = 0;
  221.         P1M0 = 0; //設置為準雙向口
  222.         P3M1 = 0;
  223.         P3M0 = 0; //設置為準雙向口
  224.        
  225.         P00=0;
  226.         while (1)
  227.         {
  228.        


  229.   
  230.        MCP4017_Write_DATA(0x5e,value); // 寫入值
  231.         delay_5us(2);
  232.         value++; // 增加值

  233.                 P00=0;
  234. delay_5us(50000);

  235.                 P00=1;
  236. delay_5us(50000);

  237.                 P00=0;
  238. delay_5us(50000);
  239.         }
  240. }

復制代碼

仿真程序: MCP4017.7z (278.21 KB, 下載次數: 19)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久久久99 | 国产精品地址 | 搞av.com | 国产午夜精品一区二区三区四区 | 亚洲在线免费观看 | 久久香蕉精品视频 | 日本小视频网站 | 91九色在线观看 | 日韩图区 | 一区二区精品视频 | 欧美中文字幕 | 欧美视频在线看 | 欧美日韩在线视频一区二区 | 国产成人精品一区二区三区 | 日本一二三区在线观看 | 国产精品免费一区二区三区四区 | 欧美日本在线观看 | 有码在线 | 日本特黄a级高清免费大片 国产精品久久性 | 国产精品一区二区无线 | 亚洲欧美日韩精品久久亚洲区 | 羞羞在线视频 | 久久偷人| av一区二区三区四区 | 中文字幕 欧美 日韩 | 农村真人裸体丰满少妇毛片 | 国产男女精品 | 亚洲人人舔人人 | 99久久视频| 国产一区不卡 | 亚洲国产成人av好男人在线观看 | 天天射视频 | 91精品国产777在线观看 | 91精品国产综合久久香蕉922 | 天堂av资源 | 中文字幕第一页在线 | 中文字幕国产一区 | 色综合99 | 久久久亚洲一区 | 久久福利电影 | av一级毛片 |