📄 max544.c
字号:
//max544 14位串行DA程序
#include <INTRINS.H>
#include <AT89X51.H>
#define uchar unsigned char
#define unint unsigned int
//#################################################
bdata unint Bcc; //定义一个可位寻址的全局变量
sbit B0=Bcc^0; sbit B1=Bcc^1; sbit B2=Bcc^2; sbit B3=Bcc^3;
sbit B4=Bcc^4; sbit B5=Bcc^5; sbit B6=Bcc^6; sbit B7=Bcc^7;
sbit B8=Bcc^8; sbit B9=Bcc^9; sbit B10=Bcc^10;sbit B11=Bcc^11;
sbit B12=Bcc^12;sbit B13=Bcc^13;sbit B14=Bcc^14;sbit B15=Bcc^15;
//#################################################
#define CS P1_2
#define SCK P1_0
#define SDA P1_1
//*************************************************
void Delayl(uchar T) {uchar S;while (T--) //延时子程序
{for (S=200;S>0;S--){_nop_();_nop_();_nop_();} } }
//*************************************************
void Max544(unint d){ CS=1;SCK=0;Bcc=d;CS=0;//Max544 D/A转换子程序
SDA=B13;SCK=1;_nop_();_nop_();SCK=0;//占空比必须为40%到60%
SDA=B12;SCK=1;_nop_();_nop_();SCK=0;
SDA=B11;SCK=1;_nop_();_nop_();SCK=0;
SDA=B10;SCK=1;_nop_();_nop_();SCK=0;
SDA=B9; SCK=1;_nop_();_nop_();SCK=0;
SDA=B8; SCK=1;_nop_();_nop_();SCK=0;
SDA=B7; SCK=1;_nop_();_nop_();SCK=0;
SDA=B6; SCK=1;_nop_();_nop_();SCK=0;
SDA=B5; SCK=1;_nop_();_nop_();SCK=0;
SDA=B4; SCK=1;_nop_();_nop_();SCK=0;
SDA=B3; SCK=1;_nop_();_nop_();SCK=0;
SDA=B2; SCK=1;_nop_();_nop_();SCK=0;
SDA=B1; SCK=1;_nop_();_nop_();SCK=0;
SDA=B0; SCK=1;_nop_();_nop_();SCK=0;CS=1;}
//************************************************* 串行口初始化、发送接收子程序
void Comstart(void){ TMOD=0X20;TL1=0xfd;TH1=0xfd; //256-11059200/384/9600=0xfd
SCON=0x40;PCON=0x00;TR1=1; //方式1,波特率不加倍,计数器开
IE=0x00;} //禁止中断
//*************************************************
void Txd2(uchar z) //串口发送子程序
{ SBUF=z; while(TI==1); TI=0; }//为0等待
//*************************************************
void Pc_com(unint a){ unint m,n; uchar w;
m=a/10000;w=(uchar)(m+0x0030);Txd2(w); //万位
m=a%10000;n=m/1000;w=(uchar)(n+0x0030);Txd2(w); //千位
n=m%1000;m=n/100;w=(uchar)(m+0x0030);Txd2(w); //百位
m=n%100;n=m/10;w=(uchar)(n+0x0030);Txd2(w); //十位
m=n%10;w=(uchar)(m+0x0030);Txd2(w);Txd2(0x0d);Txd2(0x0a);}//个位 回车
//*************************************************
main(){ unint a;Comstart();
while(1){
for(a=0;a<0x3fff;a++){
Max544(a);Pc_com(a);Delayl(0x1f);}
Pc_com(12345);Delayl(0x40);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -