使用STC15单片机驱动12位DAC MCP4726芯片的测试程序,实机测试通过,proteus元件库没有这个元件,所以没做仿真
单片机源程序如下:
- #include"mcp.h"
- #include"lcd.h"
- char *num="0123456789ABCDEF";
- extern uchar vh,vl,eph,epl;
- sbit k=P1^0;
- uint n=0;
- //测试使用的单片机型号:STC15F2K16S2,频率选择5.5296MHz,理论上STC15系列单片机通用
- //必要的话请自行修改改引脚定义
- //测试加入了LCD1602和按键功能来显示调整部分参数用于调试,实际使用时可以去掉
- //代码通过实机测试
- //MCP4726的VOUT脚串接一个LED和102电阻,用于粗略显示电压
- void delayms()
- {
- uchar a,b,c;
- for(c=1;c;c--)
- for(b=38;b;b--)
- for(a=130;a;a--);
- }
- void vup()
- {
- if(k==0)
- {
- delayms();
- if(k==0)
- {
- uchar m=0;
- n+=100;
- while(k==0&&m<200)
- {
- delayms();
- ++m;
- }
- }
- }
- }
- void main()
- {
- uchar count=0;
- uchar temp=0;
- while(!(temp&0x40))
- temp=mcpread();
- lcdinit();
- //mcpwriteall(2400); //这个函数测试时没用到
- while(1)
- {
-
- temp=mcpread();
- vup();
- if(n>4095)
- n=0;
- mcpwrite(n);
- writecom(0x80);
- writedata(num[temp/100]);
- writedata(num[temp%100/10]);
- writedata(num[temp%10]);
- writedata(' ');
- writedata(num[count/100]);
- writedata(num[count%100/10]);
- writedata(num[count%10]);
- ++count;
- writedata(' ');
- writedata(num[vh/100]);
- writedata(num[vh%100/10]);
- writedata(num[vh%10]);
- writedata(' ');
- writedata(num[vl/100]);
- writedata(num[vl%100/10]);
- writedata(num[vl%10]);
- writecom(0xc0);
- writedata(num[eph/100]);
- writedata(num[eph%100/10]);
- writedata(num[eph%10]);
- writedata(' ');
- writedata(num[epl/100]);
- writedata(num[epl%100/10]);
- writedata(num[epl%10]);
- }
- }
复制代码- #include"mcp.h"
- uchar vh,vl,eph,epl;
- void mcpwrite(uint dat)
- {
- uchar datl,dath;
- datl=dat&0x00ff;
- dath=((dat&0x0f00)>>8);
- i2cstart();
- i2cwrite(0xc0,1);
- i2cwrite(dath,1);
- i2cwrite(datl,1);
- i2cstop();
- }
- void mcpwriteall(uint dat)
- {
- uchar datl,dath;
- datl=dat&0x00ff;
- dath=(dat&0xff00)>>8;
- i2cstart();
- i2cwrite(0xc0,1);
- i2cwrite(0x61,1);
- i2cwrite(dath,1);
- i2cwrite(datl,1);
- i2cstop();
- }
- uchar mcpread()
- {
- uchar temp,config;
- i2cstart();
- i2cwrite(0xc1,1);
- config=i2cread(0);
- vh=i2cread(0);
- vl=i2cread(0);
- temp=i2cread(0);
- eph=i2cread(0);
- epl=i2cread(0);
- i2cstop();
- return config;
- }
复制代码
所有资料51hei提供下载:
MCP4726.zip
(43.46 KB, 下载次数: 105)
|