[DemoCode下载] 51单片机实现MAX517芯片的D/A转换 程序+电路图。按一次KO键...

[复制链接]
1174|2
 楼主| 芙蓉洞 发表于 2015-12-15 20:40 | 显示全部楼层 |阅读模式
  1. /*****************************************************************************/
  2. /*功能:实现MAX517芯片的D/A转换。没按一次KO键,数字量加一,******************/
  3. /*显示的模拟量增加一个单位*/
  4. /****************************************************************************/
  5. #include <reg51.h>
  6. #include<intrins.h>
  7. #define uchar unsigned char
  8. #define uint unsigned int
  9. sbit SCL=P1^0;
  10. sbit SDA=P1^1;
  11. sbit K0=P2^0;
  12. void start(void)
  13. {
  14. SDA=1;
  15. SCL=1;
  16. _nop_();
  17. SDA=0;
  18. _nop_();
  19. }
  20. void stop(void)
  21. {
  22. SDA=0;
  23. SCL=1;
  24. _nop_();
  25. SDA=1;
  26. _nop_();
  27. }
  28. void ack(void)
  29. {
  30. SDA=0;
  31. _nop_();
  32. SCL=1;
  33. _nop_();
  34. SCL=0;
  35. }


 楼主| 芙蓉洞 发表于 2015-12-15 20:41 | 显示全部楼层
  1. void send(uchar ch)
  2. {
  3. uchar BitCountter =8;
  4. uchar tmp;
  5. do
  6. {
  7. tmp=ch;
  8. SCL=0;
  9. _nop_();
  10. if((tmp&0x80)==0x80)
  11. SDA=1;
  12. else
  13. SDA=0;
  14. SCL=1;
  15. tmp=ch<<1;
  16. ch=tmp;
  17. BitCountter--;
  18. }
  19. while(BitCountter);
  20. SCL=0;
  21. }
  22. void DACout(uchar ch)
  23. {
  24. start();
  25. send(0x58);
  26. ack();
  27. send(0x00);
  28. ack();
  29. send(ch);
  30. ack();//
  31. stop();
  32. }
  33. void main(void)
  34. {
  35. uchar i;
  36. i=0xff;
  37. while(1)
  38. {
  39. if(!K0)
  40. {
  41. i++;
  42. while(!K0);
  43. }
  44. DACout(i);
  45. }
  46. }
 楼主| 芙蓉洞 发表于 2015-12-15 20:41 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

398

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部