找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4376|回复: 2
收起左侧

STC15F2K16S2单片机驱动12位DAC MCP4726测试程序

[复制链接]
ID:68356 发表于 2019-7-9 14:56 | 显示全部楼层 |阅读模式
使用STC15单片机驱动12位DAC MCP4726芯片的测试程序,实机测试通过,proteus元件库没有这个元件,所以没做仿真

单片机源程序如下:
  1. #include"mcp.h"
  2. #include"lcd.h"
  3. char *num="0123456789ABCDEF";
  4. extern uchar vh,vl,eph,epl;
  5. sbit k=P1^0;
  6. uint n=0;
  7. //测试使用的单片机型号:STC15F2K16S2,频率选择5.5296MHz,理论上STC15系列单片机通用
  8. //必要的话请自行修改改引脚定义
  9. //测试加入了LCD1602和按键功能来显示调整部分参数用于调试,实际使用时可以去掉
  10. //代码通过实机测试
  11. //MCP4726的VOUT脚串接一个LED和102电阻,用于粗略显示电压
  12. void delayms()
  13. {
  14.    uchar a,b,c;
  15.    for(c=1;c;c--)
  16.       for(b=38;b;b--)
  17.              for(a=130;a;a--);
  18. }
  19. void vup()
  20. {
  21.    if(k==0)
  22.    {
  23.           delayms();
  24.           if(k==0)
  25.           {
  26.              uchar m=0;
  27.              n+=100;
  28.                  while(k==0&&m<200)
  29.                  {
  30.                     delayms();
  31.                         ++m;
  32.                  }
  33.           }
  34.    }
  35. }
  36. void main()
  37. {
  38.    uchar count=0;
  39.    uchar temp=0;
  40.    while(!(temp&0x40))
  41.    temp=mcpread();
  42.    lcdinit();
  43.    //mcpwriteall(2400);        //这个函数测试时没用到
  44.    while(1)
  45.    {
  46.       
  47.           temp=mcpread();
  48.           vup();
  49.           if(n>4095)
  50.           n=0;
  51.           mcpwrite(n);
  52.           writecom(0x80);
  53.           writedata(num[temp/100]);
  54.           writedata(num[temp%100/10]);
  55.           writedata(num[temp%10]);
  56.           writedata(' ');
  57.           writedata(num[count/100]);
  58.           writedata(num[count%100/10]);
  59.           writedata(num[count%10]);
  60.           ++count;
  61.           writedata(' ');
  62.           writedata(num[vh/100]);
  63.           writedata(num[vh%100/10]);
  64.           writedata(num[vh%10]);
  65.           writedata(' ');
  66.           writedata(num[vl/100]);
  67.           writedata(num[vl%100/10]);
  68.           writedata(num[vl%10]);
  69.           writecom(0xc0);
  70.           writedata(num[eph/100]);
  71.           writedata(num[eph%100/10]);
  72.           writedata(num[eph%10]);
  73.           writedata(' ');
  74.           writedata(num[epl/100]);
  75.           writedata(num[epl%100/10]);
  76.           writedata(num[epl%10]);
  77.    }
  78. }
复制代码
  1. #include"mcp.h"
  2. uchar vh,vl,eph,epl;
  3. void mcpwrite(uint dat)
  4. {
  5.   uchar datl,dath;
  6.   datl=dat&0x00ff;
  7.   dath=((dat&0x0f00)>>8);
  8.   i2cstart();
  9.   i2cwrite(0xc0,1);
  10.   i2cwrite(dath,1);
  11.   i2cwrite(datl,1);
  12.   i2cstop();
  13. }
  14. void mcpwriteall(uint dat)
  15. {
  16.   uchar datl,dath;
  17.   datl=dat&0x00ff;
  18.   dath=(dat&0xff00)>>8;
  19.   i2cstart();
  20.   i2cwrite(0xc0,1);
  21.   i2cwrite(0x61,1);
  22.   i2cwrite(dath,1);
  23.   i2cwrite(datl,1);
  24.   i2cstop();
  25. }
  26. uchar mcpread()
  27. {
  28.    uchar temp,config;
  29.    i2cstart();
  30.    i2cwrite(0xc1,1);
  31.    config=i2cread(0);
  32.    vh=i2cread(0);
  33.    vl=i2cread(0);
  34.    temp=i2cread(0);
  35.    eph=i2cread(0);
  36.    epl=i2cread(0);
  37.    i2cstop();
  38.    return config;
  39. }
复制代码

所有资料51hei提供下载:
MCP4726.zip (43.46 KB, 下载次数: 99)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:579958 发表于 2019-7-10 09:26 | 显示全部楼层
新手弱弱的问一下仿真是干嘛的?
回复

使用道具 举报

ID:337813 发表于 2020-4-16 13:42 | 显示全部楼层
非常感谢您的无私分享!!!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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