📄 sanjiaobo.txt
字号:
用DAC0832 产生三角波
程序 注释:
1.程序中设置了标志位 upFlag 来表示三角波的上坡和下坡,=1表示在上坡而=0则表示下坡,当数字量
达到上限255或下限0时要改变标志位upFlag.
2.根据标志位upFlag来确定数字量是应该加1还是减1,上坡就加1,下坡则减1.
#include <reg51.h>
#include<stdio.h>
#define DAC0832Addr 0x7FFFF //0832地址
#define uchar unsigned char //uchar代表单个字节无符号数
#define uint unsigned int //uint无符号字
Uart_Init(); //输出口初始化
sbit P26=0xA6; //P2.6位
sbit P27=0xA7; //P2.7位
void TransformData(uchar c0832data);//转换数据
void Delay() ; //延时子程序
main()
{ bit upFlag=1;
xdata cDigital=1; //待转换的数字量
Uart_Init(); //
P0=0XFF; //端口初始化为0xFF
P1=0XFF; //
P2=0XFF;
P3=0XFF;
Delay(); //调用延时程序
while(1)
{
TransformData(cDigital);//进行数模转换
if((cDigital==255)|(cDigital==0))
upFlag=~upFlag; //标志位取反
if(upFlag==1)
{cDigital++; //数字量加1
}
else
{cDigital--; //数字量减1
}
Delay(); //调用延时程序
printf("digital is %d \n",cDigital);
}
}
void TransformData(uchar c0832data)
{
*((uchar xdata *)DAC0832Addr)=c0832data;
//向DAC0832输出待转换数字量c0832data
}
Uart_Init()
{SCON = 0x52; /* 设置串行口控制寄存器SCON*/
TMOD = 0x21; /* 12M时钟时波特率为2400 */
TCON = 0x69; /* TCON */
TH1 = 0xf3; /* TH1 */
}
void Delay() //延时程序
{
uint i;
for(i=0;i<200;i++);
}
Interrupt_Flag=1;
}
void Serial_Port() interrupt 4 using 0
{ if(RI==1)
{
nRxByte=SBUF;
GetKeyFromRxByte();
}
TI=0;
RI=0;
}
void GetKeyFromRxByte()
{int i,ntemp;
for(i=0;i<8;i++)
if(((nRxByte>>i)&0x01)==0)
{ntemp=i;
nKeyNumber=ntemp+8*Interrupt_Flag;
return;
}
}
Uart_Init()
{SCON = 0x52; /* 设置串行口控制寄存器SCON*/
TMOD = 0x20; /* 12M时钟时波特率为2400 */
TCON = 0x69; /* TCON */
TH1 = 0xf3; /* TH1 */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -