单片机的课程设计NO.4
程序功能
1、ADC0808采集一路0~5V的直流信号
2、生成频率100Hz的PWM信号,占空比与采集到的直流信号电压成正比
3、LCD1602显示当前采集到的电压值与输出PWM的占空比
4、DAC0832输出一路0~5V正弦信号,频率值(1~9)/10Hz
5、向上位机传输当前采集到的电压值与PWM占空比
6、由上位机控制输出正弦信号的频率
项目代码
/*上位机操作指令*/
/*
指令 作用
0 单片机停止发送
1
2 显示实时测量值
3 改变DAC0832产生正弦信号的频率(在此之后输入频率)
*/
/* ----------------------------
程序功能
1、ADC0808采集一路0~5V的直流信号
2、生成频率100Hz的PWM信号,占空比与采集到的直流信号电压成正比
3、LCD1602显示当前采集到的电压值与输出PWM的占空比
4、DAC0832输出一路0~5V正弦信号,频率值(1~9)/10Hz
5、向上位机传输当前采集到的电压值与PWM占空比
6、由上位机控制输出正弦信号的频率
----------------------------*/
#include<reg52.h>
#include<intrins.h> //包含_nop_()空函数指令的头文件
#include<string.h>
#define uchar unsigned char
#define uint unsigned int
#define out P2
sbit CS=P1^1; //DAC0832片选端
sbit WR1=P1^2; //DAC0832WR1端
sbit PWM=P1^4; //PWM信号输出端
sbit RS = P1^5; //LCD1602寄存器选择
sbit RW = P1^6; //LCD1602读写操作选择
sbit E = P1^7; //LCD1602使能信号
sbit START = P3^3; //ADC0808启动信号
sbit Clock = P3^4; //74HC595移位信号
sbit Data = P3^5; //74HC595数据输出
sbit Lock = P3^6; //74HC595锁存信号
sbit OE=P3^7; ///ADC0808转换结果输出允许端
bit flag_timer=0; //当flag_timer=0时,中断程序T0调用timer[0]~timer[3],change_timer函数重装timer[4]~timer[7],反之调换
bit flag_volt=0; //ADC测量结束标志
bit flag_fre=0; //DAC频率输入标志
uchar code seg[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
uchar const code await_f[]="Please enter frequency(n/10Hz):(1~9)\n";
uchar Sin[]="sin:0.00V ",Pwm[]="PWM:00%",measure[20];
uchar send_mode=0;
uchar ac_data=0; //数字量
uint ac_volt=0; //电压值
uchar Fre = 1; //DA正弦频率
uchar timer[8]; //timer[0]=HighTH0,timer[1]=HighTL0
//timer[2]=LowTH0,timer[3]=LowTL0
//timer[4]=HighTH1,timer[5]=HighTL1
//timer[6]=Lo