智能仪器课程设计
报 告 书
题目号:22
题目:智能数字显示仪表设计 班级:自动化XXX 学号:XXX 姓名:XX
2012年12月
摘要
智能仪表是含有微型计算机或者微型处理器的测量仪器,拥有对数据的存储运算逻辑判断及自动化操作等功能。它的出现,极大的扩充了传统仪器的应用范围。智能仪器凭借其体积小、功能强、低功耗等优势,迅速的在家用电器、科研单位和工业企业中得到了广泛的使用。
智能电子系统,其单片机硬件部分都是相似的,一般是由如下硬件电路组成: 单片机最小系统(单片机、电源、晶振、复位、编程调试接口等)。开关量输入与输出电路。模数与数模转换电路。通信接口(UART(SCI)、SPI、I2C(SMBus)、CAN、USB、TCP/IP、ZigBee等)。显示电路(LED数码管、LCD等)。控制电路(继电器、晶闸管等功率输出电路)。
而软件部分就是使单片机中运行的程序(算法),程序通过单片机与单片机的引脚指挥各个硬件电路部分,进而控制各种各样的对象,实现对象控制的自动化与智能化。
单片机技术的落脚点就是实现电子系统智能化,换句话说,就是开发控制各种对象的智能电子产品。本课程设计以工业控制中使用的温度监测智能仪表为例,介绍单片机在电子系统智能化方面的应用。
一、 设计的目的和原理
设计题目:
实现智能数字显示仪表。要求8位数码管显示(4位显示测量值,4位显示设定值),4输入按钮(功能选择、数码管选择、数字增加、数字减少),可设定上下限报警(蜂鸣器报警)。适配E型(镍铬-铜镍)热电偶,测温范围为0℃~700℃。采用比例控制、并用晶闸管移相驱动1000W电加热器(电源电压为AC220V)。
设计目的:
单片机综合练习是一项综合性的专业实践,目的是让学生在所学知识的基础上,结合工程实际,加以消化和巩固,培养学生的综合运用知识的能力、动手实际的能力和工程实践能力,为以后的工作实践打好良好的基础。
设计原理:
由热电偶送来的电信号一方面通过AD转换成数字信号供单片机处理后进行数字显示,另一方面传输到调节器比较运算,输出一个需要的控制信号与给定匹配。
二、 硬件设计
本设计采用STC89C51单片机实现智能测温仪表。由题目可知,该测温仪表需要如下电路模块:
(1)单片机电路(包括单片机最小系统、ADC、数码显示、按键、LED灯、电源等)。
(2)E型(镍铬-铜镍)热电偶信号调理电路 (3)加热功率驱动电路。
原理框图:
智能仪表单片机电路由STC89C51单片机电路、按钮、数码管、LED显示、串行通讯口、电源、ADC、DAC、E2PROM、热电偶、功率输出等电路组成。
控制板面图:
上排数码管显示设定值,下排数码管显示测量值。第一个按钮选择功能设置,第二个数码管选择,第三个数值加,第四个数值减。四个LED显示灯显示系统的各个运行状态。
基本电路模块:
总框图
单片机最小系统:
STC89C51单片机最小系统包含51单片机、晶振电路、复位电路、电源电路。单片机可采用11.0592MHz或12MHz的晶振,外置电源可以采用市售开关电源12V直流,稳压模块采用7805芯片,采用单片机上电复位的方式,还有上电指示灯。
蜂鸣器电路:
NPN型三极管驱动蜂鸣器产生报警提示,单片机P1.6口控制
串行存储器电路:
串行存储器芯片24C02用于保存设定值。该芯片具有I2C接口,连接单片机P0.0与P0.1引脚,采用软件方法模拟I2C接口。
数码管电路:
NPN型三极管驱动蜂鸣器产生报警提示,单片机P1.6口控制
串行存储器电路:
串行存储器芯片24C02用于保存设定值。该芯片具有I2C接口,连接单片机P0.0与P0.1引脚,采用软件方法模拟I2C接口。
数码管电路:
具有两排各四个数码管显示,采用四位一体数码管,分别显示测量值和设定值,数码管由2块74HC595串入并出锁存器驱动,因此只需要3个单片机引脚,采用动态扫描数码管驱动法。
按键电路:
根据需要接按键于单片机相关引脚上,低电平有效。可用作功能选择按钮、数值加一按钮、数值减一按钮等。
LED电路:
LED显示灯用于显示报警、动作等,直接连接到单片机相关引脚,低电平有效。
ADC电路:
由于51单片机内部没有AD资源,因此扩展了10位ADC芯片TLC1549,TLC1549与单片机的P1.0、P1.1、P1.2引脚连接,连接器J1用于模拟信号的输入。
DAC电路:
同样,系统扩展了DAC芯片TLC5615,该芯片采用+5V模拟电压分压作为参考电压,DAC输出范围可达0.25~4.75V,单片机采用3个引脚与该芯片连接,软件模拟芯片时序,将数据输出到TLC5615.
通讯电路:
使用MAX232组成电平变换电路,可以实现在系统编程(ISP)或实现单片机与PC机之间的通讯。P3.0与P3.1连接有交叉 开关,可以实现端口复用。
热电偶调理电路:
E型热电偶信号调理电路如上图所示。
镍铬—铜镍热电偶、压簧固定式热电偶,
工业用装配式热电偶作为测量温度的传感器,通常和显示仪表、记录仪表和电子调节器配套使用。它可以直接测量各种生产过程中从0℃~1800℃范围内的液体、蒸汽和气体介质以及固体的表面温度。
分度表:
该电路利用1N4148的负温度系数实现热电偶冷端补偿。为保证0℃时输出电压为0V,电路中采用了负电源。第一个运放组成的电路实现冷端温度补偿,其中RP0调节电路零点,由于二极管在反馈通路中,运放输出电压随温度升高而上升,温度系数为2mV/℃,经过R5与R6分压后的温度系数为0.017mV/℃,正好与R13热电偶温度系数近似。第二个运放用于信号方法,发达倍数约为160。74HC14组成的多谐振荡器、二极管和电容构成负电源电路,该电路向LM258提供负电源。
0℃~700℃对应线性输出0~1.9V。
电加热器电路:
单片机引脚为低电平时,在交流220V电压移相时,MOC3022触发双向晶闸管接通1000W电加热电源。
控制器方案:
比例控制(P)是一种控制算法,其输出量out与温度偏差e=SV-PV成比例关系,写成数学公式是:
out= kp * e+out0
式中,e是测量温度值PV与设定温度值SV之间的偏差,Kp是比例系数。out是输出量。out0是对应e=0时的控制量,可由人工确定,通常取输出控制量的1/2。
三、 软件设计及注释
软件流程图:
描述了软件算法的执行过程。有开始、有结束,有条件分支选择,有正常判断。下图只是列出执行的整体框架:
程序详单:
#include #define uchar unsigned char #define uint unsigned int #define WDA 0x00 // 定义器件在IIC总线中的地址 uchar duan[ ]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88, 0x83,0xc6,0xa1,0x86,0x8e}; //段码 uchar wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位码 uint code value[]={32,64,128,256,384,512,640,768,896,1023}; //数字量 sbit DOUT=P2^5; //数码管引脚定义
sbit CLK=P2^7; sbit LATCH=P2^6; sbit AD_CS = P1^2; //TLC1549的引脚 sbit AD_CLK = P1^1; sbit AD_DAT = P1^0; sbit function = P3^4; //功能选择按钮 sbit shuma = P3^5; //数码管选择按钮 sbit plus = P3^6; //数值增加按钮 sbit subs = P3^7;
sbit led0 = P0^2; sbit led1 = P0^3;
sbit led2 = P0^4; sbit led3 = P0^5; sbit beep=P1^6;
sbit cs = P1^5; sbit din = P1^3;
sbit clk = P1^4; sbit SCL=P0^0; sbit SDA=P0^1;
uchar xs[8];
uchar display_time; uchar sample_time;
uchar sample_time; uchar control_time; uchar DAC_time; uchar display_time0=5; uchar sample_time0=5;
uchar control_time0=5; uchar DAC_time0=5; uchar high; uchar low;
uchar given; uchar K; void LED(uchar X);
void delay()
{
uchar i=4,j=0; for(i=10;i>0;i--)
//数值减少按钮 //LED //蜂鸣器 //TLC5615引脚 //24c02引脚 //数码管显示缓存区 //相关控制变量 //定义其它变量 //数码管函数声明//延时函数
for(j=248;j>0;j--); } void set() { uint i,j; if(shuma==0) //数码管选择按钮按下
delay(); if(shuma==0)
{
LED(wei[i++]); if(i==8)
i=4;
} if(plus==0)
delay(); if(plus==0)
{ LED(duan[j++]);
if(j==10)
j=0;
} if(subs==0)
delay();
if(subs==0)
{
LED(duan[j--]);
if(j==-1) j=9;
} }
void set_high()
{
set();
} void set_low()
{
set();
}
void set_given()
{
set();
} void set_K()
{
set();
void LED(uchar X) }
{
uchar i;
//增加按钮按下 //减小按钮按下 //数码管显示函数
for(i=8;i>=1;i--) { //if (X&0x80) P2_5=1; else P2_5=0; //先输出高位 //X>=1; CLK = 0; CLK = 1; }} adc() //读取ADC数据的函数 { uint u=0; uchar i; cs=1; delay(); cs=0; for(i=0;i
SCL=0; SDA=0; SCL=1; SDA=1; }
void NoAck() //发送应答信号ACK {
SDA=1; SCL=1; SCL=0; }
bit TestAck() //测试应答信号ACK {
bit EB; SDA=1; SCL=1; EB=SDA; SCL=0; return(EB); }
write8Bit(uchar input) //写入8个二进制位到24C02 {uchar temp;
for(temp=8;temp!=0;temp--) {SDA=(bit)(input&0x80); SCL=1; SCL=0;
input=input
void write24c02(uchar ch,uchar address) //写入一个字节到24C02中字节地
址的函数
{
start();
write8Bit(WDA); //发送器件地址的函数 TestAck();
write8Bit(address); //发送写入字节地址到24C02的函数 TestAck();
write8Bit(ch); //发送写入数据到24C02的函数 TestAck(); stop(); delay(); }
void main() {
uint count, adc_value, error, lasterror, out, gg=0; TMOD=0x01; //定时器初始化 TH0=0x3C; TL0=0xB0;
ET0=1; EA=0; TR0=1; while(1) {
//按键处理语句
if(function==0) //功能选择按钮按下
delay();
if(function==0) { gg++; if(gg==5) gg=0; switch(gg) { case 0: EA=1;
case 1: EA=0; set_high(); case 2: EA=0; set_low(); case 3: EA=0; set_given(); case 4: EA=0; set_K(); } } set();
write24c02(value[0],0x01); //数码管显示语句 if(display_time==1) {
adc_value=adc(); xs[0]=adc_value%10; xs[1]=adc_value/10%10; xs[2]=adc_value/100%10;
xs[3]=adc_value/1000; xs[4]=5; xs[5]=6; xs[6]=7; xs[7]=8;
LED(wei[count]); LED(duan[xs[count]]); LATCH=0; LATCH=1; count++; if(count==8) count=0; display_time=0;
} //ADCif(sample_time==1)
转换与数字滤波语句
break; break; break; //正常运行 //设置上限值 //设置下限值 break; break; //设置给定值
//设置比例系数值//右面4位显示ADC输出值 测量值 //左面4位备用 设定值 //发送位码 //发送段码
//HC595锁存数据
adc();
sample_time==0; }
//ADC输出数值判断、报警、比例算法与控制量输出 if(control_time==1) {
if(adc_value>high||adc_value
}
beep=0; error=given-adc_value; lasterror=error; out=K*error; control_time==0;
} //DAC if(DAC_time==1) 转换语句
{
dac();
DAC_time==0; } }
} void timer0() interrupt 1 {
n++; m++; k++; h++;
static uchar n,m,k,h; if(n== display_time0) {
display_time=1; n=0;
}
if(m== sample_time0) { m=0;
sample_time=1; }
if(k== control_time0) { k=0;
control_time=1; }
if(h== DAC_time0) { h=0;
DAC_time=1;
//display_time0为显示周期 //sample_time0为ADC转换周期//control_time0为控制周期T //DAC_time0为控制周期T
}
四、 设计总结
这次课程设计用了好长时间,经过这次设计,使我认识到了设计中的细节问题对整体的影响。从中我学到了很多,首先同学间以及老师的帮助使我增进不少,查阅资料使我视野开阔了。并且我从中认识到了自己的弱点,细节问题不够清晰。
这次制作的成功经历,我收获不小,使我掌握了单片机的开发流程,明白了单片机的工作过程,在实际硬件中是怎样读取指令,提取数据的。也提高了我软硬件调试的能力。再加上主任看了我的作品后的一番鼓励,越发激起了我的自信心! 五、 参考资料
1、《单片机原理及应用——基于51与高速SoC51》 夏路易 主编 电子工业出版社
2、《微型计算机控制技术》潘新民 王燕 主编 清华大学出版社 3、《传感器与检测技术》徐科军 主编 电子工业出版社
智能仪器课程设计
报 告 书
题目号:22
题目:智能数字显示仪表设计 班级:自动化XXX 学号:XXX 姓名:XX
2012年12月
摘要
智能仪表是含有微型计算机或者微型处理器的测量仪器,拥有对数据的存储运算逻辑判断及自动化操作等功能。它的出现,极大的扩充了传统仪器的应用范围。智能仪器凭借其体积小、功能强、低功耗等优势,迅速的在家用电器、科研单位和工业企业中得到了广泛的使用。
智能电子系统,其单片机硬件部分都是相似的,一般是由如下硬件电路组成: 单片机最小系统(单片机、电源、晶振、复位、编程调试接口等)。开关量输入与输出电路。模数与数模转换电路。通信接口(UART(SCI)、SPI、I2C(SMBus)、CAN、USB、TCP/IP、ZigBee等)。显示电路(LED数码管、LCD等)。控制电路(继电器、晶闸管等功率输出电路)。
而软件部分就是使单片机中运行的程序(算法),程序通过单片机与单片机的引脚指挥各个硬件电路部分,进而控制各种各样的对象,实现对象控制的自动化与智能化。
单片机技术的落脚点就是实现电子系统智能化,换句话说,就是开发控制各种对象的智能电子产品。本课程设计以工业控制中使用的温度监测智能仪表为例,介绍单片机在电子系统智能化方面的应用。
一、 设计的目的和原理
设计题目:
实现智能数字显示仪表。要求8位数码管显示(4位显示测量值,4位显示设定值),4输入按钮(功能选择、数码管选择、数字增加、数字减少),可设定上下限报警(蜂鸣器报警)。适配E型(镍铬-铜镍)热电偶,测温范围为0℃~700℃。采用比例控制、并用晶闸管移相驱动1000W电加热器(电源电压为AC220V)。
设计目的:
单片机综合练习是一项综合性的专业实践,目的是让学生在所学知识的基础上,结合工程实际,加以消化和巩固,培养学生的综合运用知识的能力、动手实际的能力和工程实践能力,为以后的工作实践打好良好的基础。
设计原理:
由热电偶送来的电信号一方面通过AD转换成数字信号供单片机处理后进行数字显示,另一方面传输到调节器比较运算,输出一个需要的控制信号与给定匹配。
二、 硬件设计
本设计采用STC89C51单片机实现智能测温仪表。由题目可知,该测温仪表需要如下电路模块:
(1)单片机电路(包括单片机最小系统、ADC、数码显示、按键、LED灯、电源等)。
(2)E型(镍铬-铜镍)热电偶信号调理电路 (3)加热功率驱动电路。
原理框图:
智能仪表单片机电路由STC89C51单片机电路、按钮、数码管、LED显示、串行通讯口、电源、ADC、DAC、E2PROM、热电偶、功率输出等电路组成。
控制板面图:
上排数码管显示设定值,下排数码管显示测量值。第一个按钮选择功能设置,第二个数码管选择,第三个数值加,第四个数值减。四个LED显示灯显示系统的各个运行状态。
基本电路模块:
总框图
单片机最小系统:
STC89C51单片机最小系统包含51单片机、晶振电路、复位电路、电源电路。单片机可采用11.0592MHz或12MHz的晶振,外置电源可以采用市售开关电源12V直流,稳压模块采用7805芯片,采用单片机上电复位的方式,还有上电指示灯。
蜂鸣器电路:
NPN型三极管驱动蜂鸣器产生报警提示,单片机P1.6口控制
串行存储器电路:
串行存储器芯片24C02用于保存设定值。该芯片具有I2C接口,连接单片机P0.0与P0.1引脚,采用软件方法模拟I2C接口。
数码管电路:
NPN型三极管驱动蜂鸣器产生报警提示,单片机P1.6口控制
串行存储器电路:
串行存储器芯片24C02用于保存设定值。该芯片具有I2C接口,连接单片机P0.0与P0.1引脚,采用软件方法模拟I2C接口。
数码管电路:
具有两排各四个数码管显示,采用四位一体数码管,分别显示测量值和设定值,数码管由2块74HC595串入并出锁存器驱动,因此只需要3个单片机引脚,采用动态扫描数码管驱动法。
按键电路:
根据需要接按键于单片机相关引脚上,低电平有效。可用作功能选择按钮、数值加一按钮、数值减一按钮等。
LED电路:
LED显示灯用于显示报警、动作等,直接连接到单片机相关引脚,低电平有效。
ADC电路:
由于51单片机内部没有AD资源,因此扩展了10位ADC芯片TLC1549,TLC1549与单片机的P1.0、P1.1、P1.2引脚连接,连接器J1用于模拟信号的输入。
DAC电路:
同样,系统扩展了DAC芯片TLC5615,该芯片采用+5V模拟电压分压作为参考电压,DAC输出范围可达0.25~4.75V,单片机采用3个引脚与该芯片连接,软件模拟芯片时序,将数据输出到TLC5615.
通讯电路:
使用MAX232组成电平变换电路,可以实现在系统编程(ISP)或实现单片机与PC机之间的通讯。P3.0与P3.1连接有交叉 开关,可以实现端口复用。
热电偶调理电路:
E型热电偶信号调理电路如上图所示。
镍铬—铜镍热电偶、压簧固定式热电偶,
工业用装配式热电偶作为测量温度的传感器,通常和显示仪表、记录仪表和电子调节器配套使用。它可以直接测量各种生产过程中从0℃~1800℃范围内的液体、蒸汽和气体介质以及固体的表面温度。
分度表:
该电路利用1N4148的负温度系数实现热电偶冷端补偿。为保证0℃时输出电压为0V,电路中采用了负电源。第一个运放组成的电路实现冷端温度补偿,其中RP0调节电路零点,由于二极管在反馈通路中,运放输出电压随温度升高而上升,温度系数为2mV/℃,经过R5与R6分压后的温度系数为0.017mV/℃,正好与R13热电偶温度系数近似。第二个运放用于信号方法,发达倍数约为160。74HC14组成的多谐振荡器、二极管和电容构成负电源电路,该电路向LM258提供负电源。
0℃~700℃对应线性输出0~1.9V。
电加热器电路:
单片机引脚为低电平时,在交流220V电压移相时,MOC3022触发双向晶闸管接通1000W电加热电源。
控制器方案:
比例控制(P)是一种控制算法,其输出量out与温度偏差e=SV-PV成比例关系,写成数学公式是:
out= kp * e+out0
式中,e是测量温度值PV与设定温度值SV之间的偏差,Kp是比例系数。out是输出量。out0是对应e=0时的控制量,可由人工确定,通常取输出控制量的1/2。
三、 软件设计及注释
软件流程图:
描述了软件算法的执行过程。有开始、有结束,有条件分支选择,有正常判断。下图只是列出执行的整体框架:
程序详单:
#include #define uchar unsigned char #define uint unsigned int #define WDA 0x00 // 定义器件在IIC总线中的地址 uchar duan[ ]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88, 0x83,0xc6,0xa1,0x86,0x8e}; //段码 uchar wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位码 uint code value[]={32,64,128,256,384,512,640,768,896,1023}; //数字量 sbit DOUT=P2^5; //数码管引脚定义
sbit CLK=P2^7; sbit LATCH=P2^6; sbit AD_CS = P1^2; //TLC1549的引脚 sbit AD_CLK = P1^1; sbit AD_DAT = P1^0; sbit function = P3^4; //功能选择按钮 sbit shuma = P3^5; //数码管选择按钮 sbit plus = P3^6; //数值增加按钮 sbit subs = P3^7;
sbit led0 = P0^2; sbit led1 = P0^3;
sbit led2 = P0^4; sbit led3 = P0^5; sbit beep=P1^6;
sbit cs = P1^5; sbit din = P1^3;
sbit clk = P1^4; sbit SCL=P0^0; sbit SDA=P0^1;
uchar xs[8];
uchar display_time; uchar sample_time;
uchar sample_time; uchar control_time; uchar DAC_time; uchar display_time0=5; uchar sample_time0=5;
uchar control_time0=5; uchar DAC_time0=5; uchar high; uchar low;
uchar given; uchar K; void LED(uchar X);
void delay()
{
uchar i=4,j=0; for(i=10;i>0;i--)
//数值减少按钮 //LED //蜂鸣器 //TLC5615引脚 //24c02引脚 //数码管显示缓存区 //相关控制变量 //定义其它变量 //数码管函数声明//延时函数
for(j=248;j>0;j--); } void set() { uint i,j; if(shuma==0) //数码管选择按钮按下
delay(); if(shuma==0)
{
LED(wei[i++]); if(i==8)
i=4;
} if(plus==0)
delay(); if(plus==0)
{ LED(duan[j++]);
if(j==10)
j=0;
} if(subs==0)
delay();
if(subs==0)
{
LED(duan[j--]);
if(j==-1) j=9;
} }
void set_high()
{
set();
} void set_low()
{
set();
}
void set_given()
{
set();
} void set_K()
{
set();
void LED(uchar X) }
{
uchar i;
//增加按钮按下 //减小按钮按下 //数码管显示函数
for(i=8;i>=1;i--) { //if (X&0x80) P2_5=1; else P2_5=0; //先输出高位 //X>=1; CLK = 0; CLK = 1; }} adc() //读取ADC数据的函数 { uint u=0; uchar i; cs=1; delay(); cs=0; for(i=0;i
SCL=0; SDA=0; SCL=1; SDA=1; }
void NoAck() //发送应答信号ACK {
SDA=1; SCL=1; SCL=0; }
bit TestAck() //测试应答信号ACK {
bit EB; SDA=1; SCL=1; EB=SDA; SCL=0; return(EB); }
write8Bit(uchar input) //写入8个二进制位到24C02 {uchar temp;
for(temp=8;temp!=0;temp--) {SDA=(bit)(input&0x80); SCL=1; SCL=0;
input=input
void write24c02(uchar ch,uchar address) //写入一个字节到24C02中字节地
址的函数
{
start();
write8Bit(WDA); //发送器件地址的函数 TestAck();
write8Bit(address); //发送写入字节地址到24C02的函数 TestAck();
write8Bit(ch); //发送写入数据到24C02的函数 TestAck(); stop(); delay(); }
void main() {
uint count, adc_value, error, lasterror, out, gg=0; TMOD=0x01; //定时器初始化 TH0=0x3C; TL0=0xB0;
ET0=1; EA=0; TR0=1; while(1) {
//按键处理语句
if(function==0) //功能选择按钮按下
delay();
if(function==0) { gg++; if(gg==5) gg=0; switch(gg) { case 0: EA=1;
case 1: EA=0; set_high(); case 2: EA=0; set_low(); case 3: EA=0; set_given(); case 4: EA=0; set_K(); } } set();
write24c02(value[0],0x01); //数码管显示语句 if(display_time==1) {
adc_value=adc(); xs[0]=adc_value%10; xs[1]=adc_value/10%10; xs[2]=adc_value/100%10;
xs[3]=adc_value/1000; xs[4]=5; xs[5]=6; xs[6]=7; xs[7]=8;
LED(wei[count]); LED(duan[xs[count]]); LATCH=0; LATCH=1; count++; if(count==8) count=0; display_time=0;
} //ADCif(sample_time==1)
转换与数字滤波语句
break; break; break; //正常运行 //设置上限值 //设置下限值 break; break; //设置给定值
//设置比例系数值//右面4位显示ADC输出值 测量值 //左面4位备用 设定值 //发送位码 //发送段码
//HC595锁存数据
adc();
sample_time==0; }
//ADC输出数值判断、报警、比例算法与控制量输出 if(control_time==1) {
if(adc_value>high||adc_value
}
beep=0; error=given-adc_value; lasterror=error; out=K*error; control_time==0;
} //DAC if(DAC_time==1) 转换语句
{
dac();
DAC_time==0; } }
} void timer0() interrupt 1 {
n++; m++; k++; h++;
static uchar n,m,k,h; if(n== display_time0) {
display_time=1; n=0;
}
if(m== sample_time0) { m=0;
sample_time=1; }
if(k== control_time0) { k=0;
control_time=1; }
if(h== DAC_time0) { h=0;
DAC_time=1;
//display_time0为显示周期 //sample_time0为ADC转换周期//control_time0为控制周期T //DAC_time0为控制周期T
}
四、 设计总结
这次课程设计用了好长时间,经过这次设计,使我认识到了设计中的细节问题对整体的影响。从中我学到了很多,首先同学间以及老师的帮助使我增进不少,查阅资料使我视野开阔了。并且我从中认识到了自己的弱点,细节问题不够清晰。
这次制作的成功经历,我收获不小,使我掌握了单片机的开发流程,明白了单片机的工作过程,在实际硬件中是怎样读取指令,提取数据的。也提高了我软硬件调试的能力。再加上主任看了我的作品后的一番鼓励,越发激起了我的自信心! 五、 参考资料
1、《单片机原理及应用——基于51与高速SoC51》 夏路易 主编 电子工业出版社
2、《微型计算机控制技术》潘新民 王燕 主编 清华大学出版社 3、《传感器与检测技术》徐科军 主编 电子工业出版社