1、PID温控器设计 题目: PID温控器 专业(班级): 学号:姓名:小组人员: 2010年 10月20日星期三 静态显示一、 实验思路要想实现本实验的目的,就要用到相关的器件,器件清单如后面所述。首先连接硬件图。单片机控制7段数码管显示数据,就要用到单片机和7段数码管,为了使软件设计简单,再用到74LS373编码器,将二进制数据编码成能让7段数码管显示数据的编码。然后用到一个74LS138的3/8译码器来充当编码器的选通信号输入源。单片机周边电路的设计可以参照最小系统设计。之后就是软件的设计。本实验说要达到的效果是让7段数码管显示128这3个数据。软件编程的框图如下:二、 实验步骤 1、打开电
2、脑,打开KEIL和proteus软件,2、在proteus软件中,新建一个文件,保存在C:/目录下。3、选择器件,将所用到的器件都选择上。4、对照课本P137,将实验电路图连接好。5、在KEIL软件中新建一个工程文件,命名为LED.UV2。6、新建一个文件,命名为led.c。7、在这一个文件中写入对应的程序,并保存。8、将这三个文件添加到建立的LED.UV2工程中。9、点击FLASH-CONIGURE FLASH TOOLS,在弹出的对话框中,修改晶振频率12MHZ以及勾选输出建立.HEX文件。10、编译工程文件,有错,则更改错误的地方,直至无误。11、将生成的LED.HEX文件添加到刚刚建立
3、的实验电路图中的单片机中。12、仿真运行实验电路,观察LED显示情况,和所预期的情况想比较,不一样,则更改程序或硬件电路。知道结果和预期一样三、试验硬件图四、试验程序#includeabsacc.h unsigned char code LED_CODES= 0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86, 0x8e,0xff,0x0c,0x89,0x7f,0xbf;void main() XBYTE0x0000= LED_CODES1; XBYTE0x0200= LED_CODES2;
4、XBYTE0x0400= LED_CODES8; while(1); 五、试验仿真图 2010年10月21日星期四 动态显示一、 实验思路首先连接硬件图。单片机控制7段数码管显示数据,就要用到单片机和7段数码管,为了使软件设计简单,再用到74LS373编码器,将二进制数据编码成能让7段数码管显示数据的7段编码。然后用到一个74LS138的3/8译码器来充当编码器的选通信号输入源。单片机周边电路的设计可以参照最小系统设计。之后就是软件的设计。本实验说要达到的效果是让6位LED上循环显示数字05。程序流程图如下:二、 实验步骤1、 打开电脑,打开KEIL和proteus软件,2、 在proteus
5、软件中,新建一个文件,保存在C:/目录下。3、 选择器件,将所用到的器件都选择上。4、 对照课本P138和P132,将实验电路图连接好。5、 在KEIL软件中新建一个工程文件,命名为DLED.UV2。6、 新建三个文件,分别命名为DISPLAY.H,DISPLAY.C,MIAN.C。7、 在这三个文件中写入对应的程序,并保存。8、 将这三个文件添加到建立的DLED.UV2工程中。9、 点击FLASH-CONIGURE FLASH TOOLS,在弹出的对话框中,修改晶振频率12MHZ以及勾选输出建立.HEX文件。10、 编译工程文件,有错,则更改错误的地方,直至无误。11、 将生成的DLED.H
6、EX文件添加到刚刚建立的实验电路图中的单片机中。12、 仿真运行实验电路,观察LED显示情况,和所预期的情况想比较,不一样,则更改程序或硬件电路。知道结果和预期一样。三、实验硬件图四、实验程序1、 DISPLAY.H程序#define BASE 0x0000#define PORT_A (BASE)#define PORT_B (BASE+ 1)#define PORT_C (BASE+ 2)#define PORT_CONTROL (BASE+ 3)#define LEDS 6#define CA 0#define CC 1void turn_on(char led,char ChNumbe
7、r,char mode);void LedsOff();void oneByone (char datas);extern void Init8255();unsigned char code Setect;unsigned char code LED_CODES;2、 DISPLAY.C程序 #include absacc.h#include reg51.h#include display.hunsigned char code Select=0x01,0x02,0x04,0x08,0x10,0x20;unsigned char code LED_CODES=0xc0,0xF9,0xA4,0
8、xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF,0x0C,0x89,0x7F,0xBF;void Init8255()unsigned char i,j;for(j=0;j10;j+) for(i=0;i1;t1=t1;t1= t1|0x0f;P1=t1;t1=P1;t2= 0x08;t1=t1;for(i=4;i!=0;i-)t3=t2&t1; if(t3!=0)*row=i-1;break;else t2= t2 1;exit: return Result;4、 mian源程序 #include di
9、splay.h#include absacc.h#include Reg51.hextern char keyCheck(char*row,char*col);void main()char row,col,r; char strIndexs6=20,20,20,20,20,20; unsigned char i,k; Init8255();while(1) r=keyCheck(&row,&col);if(r= 0)strIndexs5=20;strIndexs4=20;strIndexs1=20;strIndexs0=20;elsestrIndexs5=0;strIndexs1=0;str
10、Indexs4=row;strIndexs0=col;for(k= 6;k!=0;k-)LedsOff();for(i= 250;i!=0;i-);turn_on(k-1,strIndexsk-1,CC) ;for(i=250;i!=0;i-);五、程序仿真图2010-10-25 星期一 AD转换(端口查询方式)一、实验思路本次实验采用的是端口查询方式,先向51单片机P3.3写入1,然后读入P3口。检查P3.3是为位0,不为0则重新读入P3在检测,直到P3.3为0 ,此时表示数据转换过程已结束,读片外地址0x2XXX,P1,/RD为低电平,经74LS02反向为高电平,向ADC0808的OE送读
11、数据的信号,ADC0808将转换结果从Out7Out0送到数据总线并读入CPU。实现在LED上显示读取的A/D转换值。程序流程图如下:二、实验步骤1、打开电脑,打开KEIL和proteus软件,2、在proteus软件中,新建一个文件,保存在C:/目录下。3、选择器件,将所用到的器件都选择上。4、对照课本P189,将实验电路图连接好。5、在KEIL软件中新建一个工程文件,命名为ADC0808.UV2。6、新建一个文件,命名为MAIN.c。7、在这一个文件中写入对应的程序,并保存。8、将这三个文件添加到建立的ADC0808.UV2工程中。9、点击FLASH-CONIGURE FLASH TOOL
12、S,在弹出的对话框中,修改晶振频率12MHZ以及勾选输出建立.HEX文件。10、编译工程文件,有错,则更改错误的地方,直至无误。11、将生成的ADC0808.HEX文件添加到刚刚建立的实验电路图中的单片机中。12、仿真运行实验电路,观察LED显示情况,和所预期的情况想比较,不一样,则更改程序或硬件电路。知道结果和预期一样.三、实验硬件图四、实验程序1、DISPLAY.H程序和DISPLAY.C程序(如前)2、主程序ADC0808.c#include #include #include #define ADC_0808 1#define ADC0808_DATA_PORT 0x2000#defi
13、ne ADC0808_QUERY_PORT 0x4000#define ADC0808_START_PORT 0x2000unsigned char getData2(unsigned char ADC_Chip,unsigned char channel)unsigned char flag= 0;unsigned char value= -1;unsigned xdata ale;switch (ADC_Chip)case ADC_0808:P3= P3|0x08;XBYTEADC0808_START_PORT= channel;P3= P3&0xdf;P3= P3|0x20;P3= P3
14、&0xdf;flag= P3;while(1)ale= 1;flag=flag & 0x08;if(flag=0) break;flag= P3;value= XBYTEADC0808_DATA_PORT;return value;break;void dispStr(char strIndexs,unsigned char value,char channel)char i,k;for(i= 0;i3;i+)strIndexsi= value%10;value= value/10;strIndexs4= channel;LedsOff();for(i=250;i!=0;i-);for(k=6
15、;k!=0;k-)LedsOff();for(i=250;i!=0;i-);turn_On(k-1,strIndexsk-1,CC);for(i=250;i!=0;i-);void main()unsigned char value;unsigned int k;char strIndexs6=20,20,20,20,1,12;Init8255();while(1)value= getData2(ADC_0808,1);for(k=100;k!=0;k-)dispStr(strIndexs,value,1);LedsOff();五、实验仿真图2010-10-26 星期二 AD转换(总线查询方式
16、和中断方式)一、实验思路本次实验采用的总线查询方式和中断方式。读片外地址0x4XXX,P2和/RD位低电平,经74LS02反相后打开三态门74LS125,将转换是否完成的标志EOC通过数据总线D7读入CPU,检查D7是否为1,若不为1,则重新读端口0x4XXX在检测,直到D7为1为止,读片外地址0x2XXX,P1,/RD为低电平,经74LS02反向为高电平,向ADC0808的OE送读数据的信号,ADC0808将转换结果从Out7Out0送到数据总线并读入CPU。二、实验步骤1、打开电脑,打开KEIL和proteus软件,2、在proteus软件中,新建一个文件,保存在C:/目录下。3、选择器件
17、,将所用到的器件都选择上。4、对照课本P189,将实验电路图连接好。5、在KEIL软件中新建一个工程文件,命名为ADZX.UV2。6、新建一个文件,命名为MAIN.c。7、在这一个文件中写入对应的程序,并保存。8、将这三个文件添加到建立的ADZX.UV2工程中。9、点击FLASH-CONIGURE FLASH TOOLS,在弹出的对话框中,修改晶振频率12MHZ以及勾选输出建立.HEX文件。10、编译工程文件,有错,则更改错误的地方,直至无误。11、将生成的ADZX.HEX文件添加到刚刚建立的实验电路图中的单片机中。12、仿真运行实验电路,观察LED显示情况,和所预期的情况想比较,不一样,则更
18、改程序或硬件电路。知道结果和预期一样三、实验硬件图1、总线查询方式硬件图2、中断方式硬件图四、实验程序1、总线查询方式程序A、DISPLAY.H和DISPLAY.C程序同上次实验B、主程序ADZX.C#include #include #include #define ADC_0808 1 #define ADC0808_DATA_PORT 0X2000 #define ADC0808_QUERY_PORT 0x4000 #define ADC0808_START_PORT 0x2000 unsigned char getData1(unsigned char ADC_Chip,unsigne
19、d char channel)unsigned char flag= 0; unsigned char value= -1; unsigned xdata ale; switch (ADC_Chip)case ADC_0808:XBYTEADC0808_START_PORT=channel;P3=P3|0x08;P3=P3&0xdf;P3=P3|0x20;P3=P3&0xdf;flag=P3;while(1) ale=1;flag=flag &0x08;if(flag =0) break;flag=P3;value=XBYTEADC0808_DATA_PORT;return value;bre
20、ak;void dispStr (char strIndexs,unsigned char value,char channel)char i,k;for(i= 0;i3;i+) strIndexsi=value% 10;value=value/10;strIndexs4=channel;LedsOff();for(i= 250;i!=0;i-);for(k=6;k!=0;k-)LedsOff();for(i= 250;i!=0;i-);turn_On(k-1,strIndexsk-1,CC);for(i= 250;i!=0;i-);void main()unsigned char value
21、;unsigned int k;char strIndexs6=20,20,20,20,1,12;Init8255();while(1)value= getData1(ADC_0808,0);for(k= 100;k!=0;k-)dispStr(strIndexs,value,0);LedsOff();2、中断方式程序A、DISPLAY.H和DISPLAY.C程序同上次实验B、主程序ADC0808ZD.C#include #include #include #define ADC_0808 1 #define ADC0808_DATA_PORT 0X2000 #define ADC0808_Q
22、UERY_PORT 0x4000 #define ADC0808_START_PORT 0x2000 unsigned char value;void dispStr (char strIndexs,unsigned char value,char channel)char i,k;for(i= 0;i3;i+) strIndexsi=value% 10;value=value/10;strIndexs4=channel;LedsOff();for(i= 250;i!=0;i-);for(k=6;k!=0;k-)LedsOff();for(i= 250;i!=0;i-);turn_On(k-1
23、,strIndexsk-1,CC);for(i= 250;i!=0;i-);void main()unsigned xdata ale;Init8255();EX1=1;IT1=1;EA=1;XBYTEADC0808_START_PORT=5;P3=P3&0xdf;P3=P3|0x20;P3=P3&0xdf;while(1)ale=1;void EX1_Int() interrupt 2unsigned char value;char strIndexs6=20,20,20,20,1,12;EX1= 0;value=XBYTEADC0808_START_PORT;dispStr(strIndexs,value,5);LedsOff();EX1= 1;P3=P3&0xdf;P3=P3|0x20;P3=P3&0xdf;五、实验仿真图1、总线查询方式仿真图2、中断方式仿真图2010年10月31日星期日 测温放大电路、
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1