课 程 设 计
课程名称 _____单片机应用____________________ 设题目 _____基于 DS18B20 和 1602 的温度计____ 专 班 学 姓 业 ____ _计算机应用
完成日期 _________2014.6.12__________________
课 程 设 计 任
设计题目:_____基于 80C51 单片机和 DS18B20 的数字温度计__
设计内容:采用 STC89C51 单片机,DS18B20 数字温度采集器件,单 线动等路设计制作一个点在温度计,能利用 1602LCD 液晶显示 温度。 设计要求:1)单片机系统扩展计; 、 2)
指导教师:_______________
年 月 日
课 程 设 计
成绩: 指导教师:_______________
洛 阳 理 工
一、设计目的
课 程 设 计
本次的设计主是利用了单片机 80C51 和数字
二、设计指标
温度测量范围为-55~125℃,精确度为 0.1℃。
三、总体框图设计
初 始 化、 设
调 用 DS18 初始
读温度转换 值
调 用 数据 处 理
生成显示码
显示温度值
主函数流程图
四、功能模块及原
温度计采用 80C51 单片机作为微处理器, 温度系统的外接口电路由晶振、 LCD 显示电路、复位电路、温度检测电路、LCD 动
1
洛 阳 理 工
电路图如下图所示。
课 程 设 计
温度计的工作过程是:初始化接收需要检测的温度,并一直处检测状态, 并将检测到的温度值读取,并转化为十制数值,通过 LCD 显示出来,显示温 度,方便用户来数使用记录数据。 具体实现法是:单片机将从 P3.3 管脚读进来的数据进行处理,P0.1 P0.7 为数管的段选端
五、设计验证
数字温度计程序代如下: #include #define uchar unsigned char #define uint unsigned int sbit DQ=P3^3; sbit RS=P2^4; sbit EN=P2^6; //ds18b20 与单机连接口 //数据/命令选择 //信号 oid wr_dat(unsigned char dat)//写数据// { delay1ms(1); RS=1; RW=0; EN=0; P0=dat; delay1ms(1); EN=1; delay1ms(1); EN=0; } void lcd_init()//初始化设
3
课 程 设 计
//RS 为寄存器择,高电平时选择数寄存器、低电平时选择指令 //R/W 读写号,低电平时进行写操作。当 RS 和 R/W 共同为低电 //E 端为使能端,当 E 端由电平变成低
平时可以写入指令或者显示
//RS 为寄存器选择,高电平时选择数寄存器 //R/W 读写信号线,低电平时进行写操作.当 RS
低电平时可以写入数据 //
洛 阳 理 工
wr_com(0x0c);delay1ms(5); } void display(unsigned char *p)//显示// { while(*p!='\0') { wr_dat(*p); p++; delay1ms(1); } } init_play()//初始化显示 { lcd_init(); wr_com(0x80); display(str1); wr_com(0xc0); display(str2); }
课 程 设 计
/*********************ds1820 序************************************/ void delay_18B20(unsigned int i)//延时 1 微秒 { } void ds1820rst()/*ds1820 复位*/ { unsigned char x=0; DQ = 1; DQ = 0; DQ = 1; delay_18B20(40); } uchar ds1820rd()/*读数据*/ { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) { DQ = 0; //给脉冲
4
while(i--);
//DQ 复
delay_18B20(4); //延时 delay_18B20(100); //精确时
洛 阳 理 工
dat>>=1; DQ = 1; //给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10); } return(dat); } void ds1820wr(uchar wdata)/*写数据*/ { unsigned char i=0; for (i=8; i>0; i--) { DQ = 0; DQ = wdata&0x01; delay_18B20(10); DQ = 1; wdata>>=1; } } read_temp()/*读取温度值并转换*/ { uchar a,b; ds1820rst(); ds1820wr(0xcc);//*过读序列号*/ ds1820wr(0x44);//*启动温度转换*/ ds1820rst(); ds1820wr(0xcc);//*跳过读序列
课 程 设 计
洛 阳 理 工
tflag=1; }
课 程 设 计
tvalue=tvalue*(0.625);//温度值扩大 10 倍,精确到 1 位小数 return(tvalue); } /*******************************************************************/ void ds1820disp()//温度值显示 { uchar flagdat; disdata[0]=tvalue/1000+0x30;//百位数 disdata[1]=tvalue%1000/100+0x30;//十位数 disdata[2]=tvalue%100/10+0x30;//个位 disdata[3]=tvalue%10+0x30;//小数位 if(tflag==0) flagdat=0x20;//正温不显示符号 else flagdat=0x2d;//负温度显示负号:if(disdata[0]==0x30) {disdata[0]=0x20;//如果位为 0,不显示 if(disdata[1]==0x30) {disdata[1]=0x20;//如果百位为 0,十位为 0 也不示 } } wr_com(0xc0); wr_dat(flagdat);//显示符号位 wr_com(0xc1); wr_dat(disdata[0]);//显示百
ta[1]);//显十位 wr_com(0xc3); wr_dat(disdata[2]);//
6
洛 阳 理 工
void main() { init_play();//初始
课 程 设 计
/********************主
7
洛 阳 理 工
课 程 设 计
六、总结
通过本次课程设计感觉自己收获很多,本次实验是我们在上次做一个用 1602 显示时程序的基础上改进而来,我们上次验中遇了很多问题,运行 结果一直显示不出来,最后在老师的帮助下决了,这个过程中学会了一些解 决问题的方法。本次试过程中我了解了 DS18B20 相关知识和应用,并过烧 写程序用单片机显示度,感觉不仅收获了知识而且整个过程比较有意思。当然 们还一些不足,程序设计功能单一,使用范围有限,一些错误信息考虑到 位,有待于进一步改进,例如利用本次实验设计的整体思路还可以量空气中的 湿度,颗粒物含量等。够顺利完成本次实验设计我要感谢我的团队成,在 和团队成员的相处们有不致的意见和,因为我的急躁,甚 过一些小小的不愉快,最后我们都以大局为重,整个过程相比较和,这 对我以后与人相处都有所帮
8
洛 阳 理 工
课 程 设 计
9
单片机课程设计
1
鲁 东 大 学
LUDONG UNIVERSITY
单片机课程设计报告
题 目 敏电阻温度控制系设计 院 系 信息与气工学院 业 子信息工程 2 班 姓 名 王
王炎炎 20122213016 刘远山 20122213041
指导教师 常新华 日 期 2015-6-19
目 录
第一部分:设计背景………………………………………………………3 第二部分:系统主要功能…………………………………………………5 第三部分:电路设计与参数选择…………………………………………5 第四分:系统软件设计…………………………………………………11 五部分:系统调试与仪器使用…………………………………………21 第六部分:测试数据与结果分析…………………………………………23 第七部分:使
热敏电阻温度采集系
摘要
温度在人类的生活中扮演着极其重要的角色,冶金、铁、石化、泥、玻璃、医药等行业温度的测量及为重。次
STC12C5A60S2和50K NTC热敏电阻为核器件来设热敏电阻测温系统。通过NTC热敏电阻对外界温度信号行采集,于热电阻的值随外界温度变而变化,再通过测量电路把值的变化转换为电压的变化,利STC12C5A60S2单片机的集成AD把采集到的模拟电压信号转换为数字号,利单机对数信号进行处后就可以得到相应的温度值,从完成了对温度的测
该系统采用了STC12C5A60S2单片机、NTC热电阻、共阴极数码管显示、电容、排阻、
关键字:STC12C5A60S2单片机、热敏电阻、测温系统
第一部分
设计背景
在人类的生活环境中,温度扮演着极其重的角色。无论你生活在哪里,事什么工作,无时无刻不在与温度打着交道。自18世纪工业革命以来,工业发展对是否掌握温度有绝对的联。在冶金、钢铁、石化、水泥、玻璃、医药等等行业,可以说几乎80%的工业部门都不得不考虑着温度的因素。温度对于工业如此重要,由此推进了温度传感器的发展。进入21纪后,温度传感器正朝着高精度、多能、总线准、高可靠及安全性、发拟传感器和网络传感器、研制单片测温统高科技的方向迅速发
在工农业生产中,温度检测及其控制占有足轻重地位,随着现代信息技的飞速发展和统工业改造的逐步实现 ,能够独立工作的温度检测和显示系统已经应用于诸领域。要达较高的精度需很好的解决引线误差偿问题、多点测量切换误差问题和放电路零点漂移误差等问题,使温度检测复杂。模拟信号在长距离传输过程中,抗电磁干扰时令设计者伤脑筋的问,对于多点温度检测的场合,各被检点到监测间引线距离往不同,此,敏感元件参数的不一致,这些都是造成误的因,并且难以完全清
单片机以其功能强、体积小、可靠性高、造价低开发周短等优点,成为自动化和各个测控领域中必不少且广应用器件,尤其在日常活中也发挥越来越大的用。采用单片机对温度采进行控制,不仅具有控制方便、组态简单和灵活性大等优点,而且可以大度提高被数据的技指标,从而能够大大提高
第二部分
系统主要功能
本系统测量的温度范围为0-99摄氏度,可以通过数码管直观地显出
第三部分
电路设计与参数选择
1、 设计原理
图
1
如图1所示,当外界温度变时,热敏电阻的阻值着发生化,热敏电阻上分得的电压发生变化,通过单片机IO口集成AD可获得热敏电的电压值为V,通过计算出热敏电阻的阻值变化规律R=V*R1/(5-V)。由于热敏电阻的阻值与温度有表1的对应关系,将应值数组形式写程序,通过查表便可以得
2.实验原理
Matlab仿真
由已经给出的度与电阻的数据写成两个矩阵,然后这两个阵写入到Matlab中,然后使用matlab2013中的拟工具行
下表为温度与电阻的
T R 0 162.8960 1 154.8355 2 147.2203 3 140.0233 4 133.2193 5 126.7846 6 120.6973 7 114.9366 8 109.4834 9 104.3195 10 99.4280 11 94.7931 12 90.4000 13 86.2348 14 82.2845 15 78.5368 16 74.9803 17 71.6042 18 68.3985 19 65.3537 20 62.4608 21 59.7115 22 51.0980 23 54.6128 24 52.2490 25 50.0000 26 47.8597 27 45.8223 28 43.8823 29 42.0346 30 40.2743 31 38.5968 32 36.9979 33
35.4735
T R 41 25.5413 42 24.5379 43 23.5789 44 22.6622 45 21.7857 46 20.9473 47 20.1454 48 19.3781 49 18.6438 50 17.9409 51 17.2679 52 16.6234 53 16.0061 54 15.4147 55 14.8480 56 14.3048 57 13.7840 58 13.2847 59 12.8059 60 12.3466 61 11.9059 62 11.4830 63 11.0771 64 10.6875 65 10.3133 66 9.9540 67 9.6089 68 9.2774 69 8.9588 70 8.6526 71 8.3582 72 8.0753 73 7.8032 74
7.5414
T R 82 5.7732 83 5.5875 84 5.4086 85 5.2361 86 5.0700 87 4.9098 88 4.7554 89 4.6065 90 4.4629 91 4.3244 92 4.1908 93 4.0619 94 3.9376 95 3.8175 96 3.7017 97 3.5898 98 3.4818 99 3.3775 3.2768 3.1795 3.0854 2.9946 2.9068 2.8220 2.7400 2.6607 2.5840 2.5099 2.4381 2.3688 2.3017 2.2367 2.1739 2.1131
T R 123 1.6911 124 1.6455 125 1.6013 126 1.5585 127 1.5170 128 1.4767 129 1.4377 130 1.3999 131 1.3632 132 1.3276 133 1.2931 134 1.2597 135 1.2272 136 1.1956 137 1.1651 138 1.1354 139 1.1065 140 1.0786 141 1.0514 142 1.0250 143 0.9994 144 0.9745 145 0.9504 146 0.9269 147 0.9041 148 0.8819 149 0.8604 150 0.8395 151 0.8191 152 0.7994 153 0.7801 154 0.7615 155 0.7433 156
0.7256
T R 0.6006 0.5868 0.5733 0.5602 0.5475 0.5351 0.5231 0.5113 0.4998 0.4887 0.4778 0.4673 0.4569 0.4469 0.4371 0.4276 0.4183 0.4092 0.4004 0.3918 0.3834 0.3752 0.3672 0.3594 0.3518 0.3444 0.3372 0.3301 0.3232 0.3165 0.3100 0.3036 0.2974 0.2913
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
34 35 36 37 38 39 40 34.0197 32.6330 31.3098 30.0471 28.8416 27.6906 26.5914 75 76 77 78 79 80 81 7.2897 7.0475 6.8144 6.5901 6.3741 6.1662 5.9660 116
117 118 119 120 121 122 2.0542 1.9972 1.9420 1.8886 1.8368 1.7867 1.7381 157 158 159 160 161 162 163 0.7084 198 0.6917 199 0.6755 200 0.6597 0.6443 0.6293
0.6147
0.2853 0.2795 0.2739
表1
由上述表格绘制的温度与电阻的特
求解出的方程为:
f(x) = a1*exp(-((x-b1)/c1)^2) + a2*exp(-((x-b2)/c2)^2) Coefficients (with 95% confidence bounds):
a1 = 1.499e+16 (-9.221e+18, 9.251e+18) b1 = -575.3 (-1.121e+04, 1.006e+04) c1 = 99.88 (-820.5, 1020) a2 = 164.8 (-139.2, 468.9) b2 = -161.1 (-339.6, 17.35) c2 = 153.9 (98.01, 209.8)
下一步使用VC6.0进行学建模,并且对算法的正确性进行验证:
# include # include double R2TConvert(double dianZu) { double wenDu; wenDu = 1.499e+16 * exp(- pow((dianZu+575.3)/99.88, 2)) + 164.8 * exp(- pow((dianZu + 161.1)/153.9, 2)) ; return wenDu; } double ADC_RES_2_VIN(double res) { double Vin; Vin = (res / 256) * 5; return Vin; } double Vin_2_DianZu(double Vin) { double dianZu; dianZu = ((5 * 24) - 24 * Vin) / Vin; return dianZu; } int main (void) { unsigned char a = 128; double b = 1.499e+16; double c = (double)a; printf("%f\n", b); printf("当电阻为50时 printf("当结果寄存器为128时Vo为:%f\n", ADC_RES_2_VIN(128)); printf("当Vo为2.5V时电阻的为:%f\n", Vin_2_DianZu(2.5)); printf("当结果寄存器为128时 仿真结果为: 2、 硬件电路 图2 3、 元器件选用 表2 系统所用的元器件及说明 电阻,RST引 4、硬件选用 ⒈ 热敏电阻的选用 热敏电阻器的热敏电阻有电阻值随温度升高而升的正温度数(简称PTC)热敏电阻和电阻值随温度升高而降低的负温系(简 NTC热敏电阻器,是一种以过渡金属氧物为主要原材料,采用电子陶瓷工制成的敏半体陶瓷组件。这种组件电阻值随温度升高而低,利用这一特性可制成测温、温度补偿和控温组,又可制成 电阻温度特性可以近似地用下式来表示: R= R*EXP[B*(1/T-1/T)] 式中:RT、RN分别表示NTC在温度T(K)和额定额定温度TN (K)的电阻,单位Ω,T、TN 为温度,单位K(TN(k)=273.15+TN(℃))。B,称作B值,NTC敏电阻特定的材料常数(Beta)。由于B值同样是随温度而变化的,因此NTC热敏电阻的实际性,只能略用指数关来描述,所这方法只能以一定的精度来描述额定温度阻值附近的有限的范 电阻-温度关系: NTC热敏电阻器CWF2-502F3950各温度点的电阻值,即电阻-温关系表。NTC热电阻器CWF2-502F3950的测温范围为[-55℃,125℃],其电阻值的变化范围为[250062Ω,242.64Ω]。表1所示,列举了2-42摄氏度 ⒉ STC12C5A60S2单片机的选用及单片 2.1 STC12C5A60S2概述 本次课程设计核心元件是单片机STC12C5A60S2,下面对STC12C5A60S2做简单的概述。 2.1.1 基 STC12C5A60S2单机中包含中央处理器(CPU)、程序存储器(Flash)、数据存储区(SRAM)、定时/数器、UART串口、串口2、I/O接口、高速A/D转换、SPI接口、PCA、门狗及片内R/C振动器和外部晶振等模块。STC12C5A60S2系单片几包含数据采集和制中所需的所有单元模块,可 单片机STC12C5A60S2的基本构造如 2.1.2 性 60KB的Flash片内程序存储器、256字节的内部随机存取数存储器(RAM)、1024字节的外存储器、1K字节数据Flash存储(EEPROM)、ISP(在系可编 看门狗 图3 、内部集成MAX810专用复位电路、外部电检测电路、时钟源:外部精度晶体/钟,部R/C荡器、4个16位定时器、3个时钟输出口、7个外中断I/O口、PWM(2路)/PCA(可编程计数器阵,2 2.1.3 STC12C5A60S2单片 本次课程设计,主要应用了STC12C5A60S2单片中中央处理器(CPU)、高速A/D转 第四部分 C语言程序流程图 系统C程序代码: # include # include #define uchar unsigned char #define uint unsigned int sbit jiDianQi = P1^2; sbit fengMingQi = P1^3; sbit key1 = P1^4; sbit key2 = P1^5; sbit key3 = P1^6; sbit key4 = P1^7; sbit S0 = P3^0; sbit S1 = P3^1; sbit S2 = P3^2; sbit S3 = P3^3; unsigned char code tablewei[]={ 0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f}; //数码管各位 unsigned char code tab[] = { 0xc0, 0xf9, 0xa4, 0xb0, //11111001 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e, 0xfd, 0xcd, 0xfb, 0xcb}; /*17*//*18*//*19*//*20*/ uchar buffer[4]; uchar num;uchar S0num; uchar shiwei, gewei; uchar count = 0; uchar jianZhi = 0; uchar test, a; uchar upLimit = 28, downLimit = 24; /*-------函数声明--------*/ void KeyScan(); 1 void ShuzhiAdd(); void ShuZhiSub(); void KeyOK(); void init(void); void delay(uint z); void Sigle_Display(uchar wei,uchar duan); void Display(uchar num); uchar ADC(void); void Beep(void); uchar ZhuanHuan(uchar x); void Display_up(uchar num); void Display_down(uchar num); uchar wenDuZhi = 25; double R2TConvert(double dianZu) { double wenDu; wenDu = 1.499e+16 * exp(- pow((dianZu+575.3)/99.88, 2)) + 164.8 * exp(- pow((dianZu + 161.1)/153.9, 2)) ; return wenDu; } double ADC_RES_2_VIN(double res) { double Vin; Vin = (res / 256) * 5; return Vin; } double Vin_2_DianZu(double Vin) { double dianZu; dianZu = ((5 * 24) - 24 * Vin) / Vin; return dianZu; } /*-----------主函数-----------*/ void main(void) { init(); while(1) { KeyScan(); ShuzhiAdd(); ShuZhiSub(); KeyOK(); if(S0num == 0) { if(wenDuZhi <> { jiDianQi = 1; } else { jiDianQi = 0; } Display(wenDuZhi); } if(S0num == 1) { Display_up(upLimit); } if(S0num == 2) { Display_down(downLimit); } } } uchar ZhuanHuan(uchar x) { float y, y1, y2; y = x - 73; y1 = y * 0.4; y2 = y1 + 19; return (uchar)y2; } void Display_up(uchar num) { uchar shi; uchar ge; shi = num /10; ge = num % 10; Sigle_Display(0, 17); Sigle_Display(1, 16); Sigle_Display(2, ge); Sigle_Display(3, shi); } void Display_down(uchar num) { uchar shi; uchar ge; shi = num /10; ge = num % 10; Sigle_Display(0, 19); Sigle_Display(1, 18); Sigle_Display(2, ge); Sigle_Display(3, shi); } void Beep(void) { fengMingQi = ~ fengMingQi; } uchar ADC(void) { uchar temp, res; ADC_RES = 0x00;//存储结果 ADC_CONTR = ADC_CONTR | 0x08;// temp = ADC_CONTR; while((temp&0x10) != 0x10)//等待转换结束的ADC_FLAG结果为1 { temp = ADC_CONTR; } ADC_CONTR = ADC_CONTR & 0xe7;//1110 01111 标志位 res = ADC_RES;// ADC_RES return res; } void Display(uchar num) { uchar shi; uchar ge; shi = num /10; ge = num % 10; Sigle_Display(0, 12); Sigle_Display(1, 16); Sigle_Display(2, ge); Sigle_Display(3, shi); } void init(void) { num = 1; /*------------定时器T0的初始化------------*/ TMOD = 0x11;//设置定时器的 TH0 = (65536-50000)/256;//装初值(高位) TL0 = (65536-50000)%256;//装入初值( ET0 = 1;//开定时 TR0 = 1;//启动定 /*------------定时器T1的始化------------*/ //TMOD = 0x11;// /* TH1 = (65536-50)/256;//装入 TL1 = (65536-50)%256;//装入 EA = 1;//开 ET1 = 1;//开定时 TR1 = 1;//启动定 */ /*------------ADC的初始化---------------*/ ADC_CONTR = 0xE0;//1 11 0 0000 (1)开启ADC电 _nop_();_nop_();_nop_();_nop_(); 2)11 P1ASF = 0x01; //设置哪一个IO口为AD /*------------键盘的初始化--------------*/ key1 = 1; key2 = 1; key3 = 1; key4 = 1; } void Sigle_Display(uchar wei,uchar duan) { P2 = tablewei[wei]; P0 = 0xff; P0 = tab[duan]; delay(1); } void delay(uint z)//带有入口参 { uint i,j; for(i = z;i > 0;i--) for(j = 110;j > 0;j--) ; } void exter0() interrupt 1 { TH0 = (65536-50000)/256;//装入初值(八位) TL0 = (65536-50000)%256;//装初值(低八 jianZhi = Key(); if(count == 8) { test = ADC(); wenDuZhi = (unsigned char)R2TConvert( ( ADC_RES_2_VIN( (double)test))); count = 0; } } Vin_2_DianZu void exter1() interrupt 3 { TH1 = (65536-50)/256;//装入值(高八位) TL1 = (65536-50)%256;// */ void KeyScan() { if(S0 == 0) { delay(50); if(S0 == 0) { while(!S0); S0num++; if(S0num == 1) { } if(S0num == 2) { } if(S0num == 3) { S0num = 0; } } } } void ShuzhiAdd() { if(S0num != 0) { if(S0num == 1) { if(S1 == 0) { delay(5); if(S1 == 0) { while(!S1) Display_up(upLimit); upLimit++; } } } if(S0num == 2) { if(S1 == 0) { delay(5); if(S1 == 0) { while(!S1) Display_down(downLimit); downLimit++; } } } } } void KeyOK(void) { if(S0num != 4) { if(S3 == 0) { delay(10); if(S3 == 0) { while(!S3); S0num = 0; TR0 = 1; } } } } void ShuZhiSub(void) { if(S0num != 0) { if(S0num == 1) { if(S2 == 0) { delay(5); if(S2 == 0) { while(!S2) Display_up(upLimit); upLimit--; } } } if(S0num == 2) { if(S2 == 0) { delay(5); if(S2 == 0) { while(!S2) Display_down(downLimit); downLimit--; } } } } } 系统调试与仪器使用 1、系统调试的仪器选用及 2、系统调试及调试故障的检 第一步 用下载程序电路板和电脑给单片机下载编 第二步 将下载好的单片安装在设计的电路板上,电路板接上5V的电源(接上电源后,数码没有显。析:路出现短路者断路或者连线有误 ;检测:用万用表测量单机正负引脚有电压,测量各引脚之间的电阻,核对电路图及其电路上的连,一切正。分析:电路板焊接无 第三步 在电脑修改原有的程序,并且将程序下载到下载路板上,下载电路板上的热电阻测温系统行检测(修改程序后,数码管有显示,是有规 第四步 在电脑上继续修改原有的程序,并且将序下载到下载电路板上,用下载电路上的热敏电阻测温系统进行检测(修改程序后,数码管有显示,且运行正) 第五步 将修改的程序用载程序的电路板和脑下载到单片机(数码管显示正常,但是与下载电路板上的热敏电阻测温系统1摄氏度的温度差距,并且显示的温度数字不停地左右跳动 分析:实际电路使用的电阻和程序里给定电阻有差,A/D转换描的频率太;检测:修改程序,将温度计算公式加1,减A/D转换扫描的频 第六步 将修改好的程序下载程序的电路板和电脑下载到单片机( 测试数据与结果分析 1、测试数据 ①让该热敏电阻测温统处于空气中时,温度显示为23 ②用手触摸该热电阻时,温度显示31摄 2、结果分析 该热敏电阻测温系统能够正常工作,且敏度较高,但是示温度不太稳定,会有数据的稍微跳动,总 第七部分 使用说明书 1、使用说明 该热敏电阻测温系测量温度在0-99摄氏度范围内,超出范围则效,主用室内测温。该热敏电阻温系统能显示温数据和温度单位符号,但是只能显示温度数据整数分, 2、系统软件和应用软 主要用到的软 3、小组成员及所做 王月香:负责电路焊接及电路调 刘远山:负责程序编写及电路调 王炎炎:负责报告编写及电路调 第八部分 总结 这次课程设计将单片机与传感进行了结合跟进一步想展示了片机得强大功能此外还接触了模数转换器件,了解了有AD转的知,同时温习了汇编识。通过这次课程设计,希望老师上课可以多给我们讲些论外的知识来拓宽我们的视野。最后,感谢为我们解答问题并且提供帮助的新华师,在此课程设计中他在一遍一遍的给为我们答疑 附:实物照 参考文献: [1] 谭浩强.C语言程序设计教程.清华 [2] 陈勇、程月波、荆、常华 单片机原理与应用 高等教育出 滨江学院 单片机课程设计 LCD1602的应用 2013级自动 组别:10 组长:沈慧想 20132336051 组员:马 珂 20132336049 彭承建 20132336050 吕志洪 20132336048 李 军 20132336047 2015.7.2 目录 1. 引言 ............................................................................................................................................... 4 1.1单片机的应用 ......................................................................................................................4 1.2LCD ......................................................................................................................................... 4 1.2.1液晶的发现 ..............................................................................................................4 1.2.2液晶的发展 ..............................................................................................................4 1.2.3LCD1602 1.2.4LCD 的 2. 硬件计 ........................................................................................................................................ 6 2.1理论分析与框图设计 ..........................................................................................................6 2.1.1显模块 ............................................................................................................6 2.1.2主控 MCU 选择 .........................................................................................................6 2.1.3系统框图 ..................................................................................................................6 2.2系统硬件原理图 ..................................................................................................................7 2.2.1 2.2.2XS128引脚图 ..........................................................................................................8 3.软件设计 ......................................................................................................................................... 9 3.1 3.2主程序流程图 ....................................................................................................................10 4. 调试 ............................................................................................................................................. 10 5. 总结 ............................................................................................................................................. 10 6. 附 ............................................................................................................................................. 11主序 ....................................................................................................................................... 11实物图 ....................................................................................................................................... 14 LCD1602 摘 要 本系统主要是应用 LCD1602, 通过软件编把需要写入的字符数据利用飞思卡尔 HCS12X 系单片写入 LCD1602并通过单片控制 LCD 实时刷新示。经过测 试本系统能够很好的显示字符,并且能够循环显示本所有成 1.引言 1.1单片机的应用 单片机即单片型计算机。是集 CPU、RAM、ROM、定时、数和多种接口于 一体的微型控制仪器。它体积小,成本低,功能强,泛应于 近年来,随着电子技术和微机计算的迅速发展,单片机的档次在不断提 高,其应用领域也在不断扩大。例如工业控制、尖端科学、智能器仪表、常 家、 汽电子系统等方面。 在实时检测和自动控制的单机应用系统中, 单片 机往往是作一个核心部件来使用。 因此, 仅单片机的知识是不够的, 还应根据 硬件结构, 及针对体用对象点的软件结合, 加以完善, 本系统就是采用 片机和液晶屏结合使 1.2LCD 1.2.1液晶 在 1888年,奥地利布拉格德国大学的植学家 Reinitzer 斐德烈·莱尼茨 尔在热安息香酸胆固醇酯时发现:党胆固醇酯加加热到 145℃时融化,会经历 一个透明的呈白色稠浑浊液状态, 并出多彩且美丽的珍珠泽; 温度加 热到 175℃时,它似再熔化,变成清澈透明的液体;当温度下降时,次出 现混作状态并变成紫色, 最终由恢复成白色的固体。 后来, 德亚深大学物理学 教授奥托·雷曼发现这种白浊物有种曲性, 认为这种物流动性 结晶的一种,由此而取名为 Liquid Crystal,即液 1.2.2液晶 在 1961年, 美国 RCA 公司普林斯顿试验有一个年电子学者 F·Heimeier 正在准备博士论文答辩, 为了究外部场对晶体内部场的作用, 他想到了 晶。 他将两片透明导电玻璃之夹上掺有染料的向列液晶。 当在液晶层的两面 施以几伏电压时, 液晶就由红成了透态。 出身电子学的他立刻意识到 这就是彩色平板电视 RCA 公司对他们研究极为重视,一直其列为企业的重大机密项目,直到 1968年,才在项最新科技成果的广播报中向世界报导。这一导立刻引起 了日本科技界、 工业界的重视。 日本将时正兴起的 显示实用化的局面, 掌握了主动, 致这一发势头促成了日本微电子的惊人 发展。而在美国,RCA 公司中一些生产间部门的领导人一方面局限于传统的半导 体产品, 方面又强调了出茅庐的液晶显示器的缺点, 以市场还未开拓 为借口,极力诋毁液晶显示的产业化。为此,液晶小成员开始外流,液晶显示 的专利也被卖出。据说,当 70年代中,液晶显示已经形成一个产业的时候, RCA 在一次董事上沉痛地总, 在 RCA 百年发展历史上液晶显示技的 失是巨大的一次失 1.2.3LCD1602 1602液晶也叫 1602字符型液晶,它是种专门来显示字母、数字、符号 等的 点阵 型液模块。由若个 5X7或者 5X11等点阵字符位组,每个点阵 字符位都可显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔, 起到字符间距行间距的用,正因为如此所以它不 1.2.4LCD LCD 的应用市应该说是潜力巨大。就液晶面板生产能力而言,全世的 LCD 要集中在中国台湾、韩和日本三个主要生基地。亚洲是 LCD 面板研发 及生产制造的中,而、日、 目前主流的 TFT 面板有 a-Si(晶硅膜晶体管) TFT 技术和 LTPS TFT(低 温晶 在 a-Si 面,三个生产基地的技术各有千秋。日本厂曾经研制出辨率 高达 2560×2048 LCD 产品。此,有些人认为,a-Si TFT 技术完全可满足高 分辨率的产品需要, 但是, 由于技术的不成熟, 还不能满足高速视影像或动 画的需要。LTPS TFT 相对可以节约成,这对于 TFT LCD 的推广有着重要意 义。前,本厂商已经有量产 12.1英寸 LTPS TFT LCD 的能力。而中国台湾已 开发完成 LTPS 组件制造技术 LTPS SXGA 面板技。韩国在这方面缺少专门的 设计人员和研发家,但三星等主要企业推了 LTPS ,显示出韩国 厂力。不过,目前 LTPS 技术尚不成熟,产品集中在小屏,而良品率 低,成本优势尚无从谈 与 LTPS 比,a-Si 无疑是目前 TFT LCD 的主流。日公司的 a-Si TFT 投 策略上几乎都以第三 LCD 产品为主, 通过制造技术及良品率的改善来提产 量,降低成本。日本一直走高端路线,其技术无疑是先进的。由于研发量有 限,台的 a-Si TFT 技术主要来自日本厂商转让,但由于台湾企业一般属于 劳动密集型,技术含量低,生产低端产品为主。韩国在 a-Si 方面有着强大 的研实力,比如三星公司就量产了全球第一台 24寸 a-Si TFT LCD—240T,它 的响时间小于 25ms,可以足一般应用需要;可视角达到了 160,使 LCD 在传项上不输给 CRT。星 240T 标志着大屏 TFT LCD 技术走向成熟, 也世人展示了韩国厂商的实力不容置 除了以上两种 TFT 技术之间的竞争,SED 会成为 TFT LCD 强大敌人。然 而,SED 目前仍属于概念型品,短时 虽然目前 LCD 已经大幅降价, 但是对于 CRT 仍然价格较高。 因此成本问题 是大家关注的焦点。实际上,TFT 的生产成本与 CRT 不相上下,但良率极低造 了 TFT 面板成居高不下的情况。TFT 面板是由一块较大的基板切割而。而 LCD 产品还要有大量的晶体管阵列控制三原色, 现在的制造技术很难保证在一 大块基板上数千万甚至亿的晶体管不出一个问题。如果有一晶体管出现 ,么那晶体管对应的的应色彩就会出问题(只能显示某种固定色), 那么这个点就是通常 LCD 技术处在不断发展、完善的阶段,三大地的发方向各有不同, 们之间既存在竞争,又有着合作。正是这些素使 2.硬件设计 2.1理论分析与框 2.1.1显示模 本系统主要功能是显示学号与年级组别,显示模块主要考虑 LCD1602与 LCD12864。LCD1602能够显示 192字符常用为 26个英字母和是个阿拉 数字与常用英文标点符号。LCD12864显示功能更为丰富 LCD1602能够显示的 字符外还带有中文字库, 并且分辨率更高, 能够显简单的案, 但是次系统 设计能简单从经济和实用性,此次选 LCD1602模 2.1.2主控 MCU 选择 主控系统的选择方案分为飞思尔和 STM32。 思卡尔程简单, 经济实用, 其 12MHZ 的频率完能够控制 LCD1602的刷新显示。 STM32芯片经过倍主系统 处理速度能够达到 72MHZ 系统运行速度快,LCD 刷新快,但是成本较高,况且本 系要求能多,以主控芯片 2.1.3系统框图 最终选择为 LCD1602作显示块 , 飞思卡尔测的芯片为主控模块, 系 图 1系统框图 2.2系统硬件 2.2.1最小系统 图 2MCU 最 2.2.2XS128 引脚图 图 3IO 借口 2.2.3 其它电路 图 4电源、复位 2.2.4LCD1602 接口电路 图 4LCD 接 3.软件设计 3.1程序功能描述与设 根据题目要求件设计分为显示“年级”、“组号”、“学号”。于年级 组号都固定不变的所以在程序中把它设置为静态显示。 把 5人 1)显示“年级”、“组号”、“学”三组英文字符,分别设置三个字符 数 2)显示学号由于学号只有最后两位不所以系统只显示后两位,分别 用除余法,保存学号十和 利用单片机控制 LCD1602输出本组成员的组别“group:10”并且循环显示 3.2 主程序流程图 图 5程序主流程图 4. 调试 调试过程中发现正面看 LCD 只能看到一个个格, 经过查询 LCD1602数据手 册发现 LCD 晶屏幕的号脚可以调整对比压, 于是接一个滑动阻器调节三 号脚电压, 再次上电时后可以正常显示字符。 调滑动变器, 以发现字符与 背景显 初次调试发现在学号后面会出现乱码, 检查序后把存储 5.总结 本次设计的系统使用了飞思尔系列单片机控制 LCD1602显示字符。 通过软 件在程序中预设字然后利单片控制传输数据给 LCD1602并且成显示, 经过测试本次设成功实现循环显示本组成员学号与英文字符。由于 LCD1602自身的性,定了其只能 如果要实现稍微杂的显示, 我们可以把 LCD1602更换成 LCD12864或者 TFT 屏幕, 但是屏幕显示功能越强大, 其成本就越, 结合我们设计的系统选择合的屏,这样才能兼顾系统性能与成本的关 主程序 #include #include #defineep PTT_PTT3 #definerw PTT_PTT2 #definers PTT_PTT1 unsigned char ch_gro[]={ unsigned char ch_num[]={ unsigned char num1[]={ unsigned char num2[3]; byte lcd_bz(void); /*********延迟函数***************/ void delay(unsignedchar ms) { unsigned int i; while(ms--) { for(i=0; i<25000;>25000;> } } /********************************/ byte lcd_bz(void) { byte result; DDRB=0X00; rs =0; rw =1; ep =1; result =(byte)(PORTB&0x80); ep =0; return result; } /***********************************/ void lcd_wcmd(unsignedchar cmd) //写入命令 { while(lcd_bz()); //判 LCD 是否忙碌 DDRB=0XFF; rs =0; rw =0; ep =0; PORTB =cmd; ep =1; ep =0; } /**********************************/ void lcd_pos(unsignedchar pos) // { lcd_wcmd(pos|0x80); } /**********************************/ void lcd_wdat(unsignedchar dat) //写入数据 { while(lcd_bz());//判断 LCD 是否忙碌 DDRB=0XFF; rs =1; rw =0; ep =0; PORTB =dat; ep =1; ep =0; } /**********************************/ void lcd_init(void)//lcd初始化 { PTT_PTT0=0; lcd_wcmd(0x38); delay(1); lcd_wcmd(0x0c); delay(1); lcd_wcmd(0x06); delay(1); lcd_wcmd(0x01); delay(1); } //*********主函数************** void main(void) { unsigned int i,j=1; /***配置 IO 口寄存器 BT*****/ DDRB=0XFF;//端口 B 设 lcd_init();//初始化 LCD delay(10); /*******显示字符*****/ lcd_pos(0x00);//设置显示位置 i =0; while(ch_gro[i]!='\0')//显示 group10: { lcd_wdat(ch_gro[i]);//显示字符 i++; } lcd_pos(0x40);//设置显示位置 delay(30); i =0; while(ch_num[i]!='\0')//显示 number { lcd_wdat(ch_num[i]); i++; } lcd_pos(0x47);//设置显示位置 delay(30); i =0; while(num1[i]!='\0')// { lcd_wdat(num1[i]); i++; } j=51; for(;;)//循环显示 51~47 { num2[0]=j/10+0x30; num2[1]=j%10+0x30; j--; if(j==46) j=51; lcd_pos(0x49);//设置显示位置 delay(30); i =0; while(num2[i]!='\0')//显示 number { lcd_wdat(num2[i]); i++; } delay(100); } } 实物图 参考文献: 【 1】《嵌入式系统 -使用 HCS12微控器的设计与用》(2008)王宜怀 苏州大学 北 京 【 2】《单片机与嵌入式系统开发法 -HCS12XS 》(2009)薛涛 清华大 【 3】《传感器原理与应 第版》(2011) 孟立凡 蓝金辉 【 4】《 TFT-LCD 原理与设计》(2011) 马群刚 电 河北建筑工程学院 单片机课程设计报告 题目名称:多路数字温度测量 系 别: 电 专 业: 建筑电气 班 级: 电 学 号: 2010318213 学生姓名: 苏猛 指导教师: 职 称: 讲师 2013年 02月28日 目 录 一、摘要.......................................................................................................3 二、系统总体方 2.1 系统总体框图 ...................................................................................3 2.2 基本原理及设计 三、系统的硬件 3.1. 单片机AT89S51.....................................................................................................4 3.2 温度传感电 3.3 报警温度 3.4 显示电路的 3.5 键盘电路.................................................................................................................10 3.6 晶振电路................................................................................................................11 3.7 单片机I/O口功能说明...........................................................................................11 3.8 复位模块电 四、系统的软件设计...................................................................................12 4.1 系程序流程图.....................................................................................12 4.2 4.3噪音处理....................................................................................................14 五、结论........................................................................................................15 六、参考文献................................................................................................16 七、附录........................................................................................................13 7.1附录1.........................................................................................................16 7.2附录2( 一、摘要: 本设计是AT89S51.单片机核心的温度测量系统,温信号由模拟度传感器采集后传送给单片机AT89S51.。文中介绍了控制系统硬件部,包括:单片机最小系统、温度传感电路、报警电路、键电路、显示电路。文中还着重介绍软件设计部分,在这里采用模块化结构,主要模块有:数码管显示程序、键盘扫描及按键理程序、温信号处程序、超温报程序。整个系统结构紧凑、简单靠、操作灵活、功能 本温度计功能:1、可以监测8路境温度;2、键盘控制,可随时查看指 3、可以设置上下警温度,当温度超过设置范 关键词 单片机 温 二、 系统总体方 2.1 系统总 温度计电路设计系总体方框图如图2.1所示,控制器采用单片机AT89S51,AD转换器ADC0809,温度传感采用LM35,用单片机的串口和74LS164扩并口 图2.1 总体 2.2 基本原理及设 根据系统的设计要,选择LM35作本系统的温度传感器,选择单片为测控系的心来完成数据采集、处、显示、报警等功。选用模拟温度传感器LM35,具有线性好、度适、灵敏 该系统的总体设计思路如下:温度感器LM35把所测得的度发送到AD转换器ADC0809,然后再传送到AT89S51单片上,经过51单片处理,把温度在显示路上显示,本系统使用单片机串口和74LS164扩展并口实现LED静态驱动温度显示。检测范围—55摄氏度到125摄氏度。本系统除了显示温以外还置温度下限值,对所温度进行监控,当温度高于或低设定温度时,开始报 三、系统的硬件设计 3.1单片机AT89S51 AT89S51一个低 programmable)的可复擦1000次的Flash只读程序存储器,器 司的高密度、非易失性存储技 芯片内集成了通用8位中央处 控制应用系统得到广泛应用。 主要 1、4k Bytes Flash片内程序 2、128 bytes的随机存取数据存储器(RAM); 3、32个外 4、5个中断优先级、2层中断嵌 5、6个中断源; 6、2个16位可编程定时器/ 7、2个全双工串行通 8、看门狗(WDT) 9、片内振荡器和时钟 10、与MCS-51 11、全静态工作:0Hz-33MHz; 12、三级程序存储器保密 13、可编程串行 14、低功耗的闲置和掉电 编辑本段管脚说明 VCC:电源电压输 GND:电源地。 P0口:P0口为一个8 当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于 储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0 口作为原码 输入口,当FIASH进校验时,P0输出原码,此时P0外 图3.1PDIP封装的AT89S51管脚图 P1口:P1口是一个内部供上拉电阻的8位双向I/O口,P1缓 出4TTL门电流。P1管脚写入1后,被内部上拉为高,可用作 外部下拉为低电平时,将 和校验时,P1口作为第八位地 P2口:P2口为一个内上拉电阻的8位双向I/O口,P2口缓 出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉 为输入。并因此作为输入,P2口的管脚被外部拉低,将输出 内部上拉的缘故。P2口用于外部程序存储器或16位地址外部 存取时,P2输出地址的高八位。在给出地址“1”时,它用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2输其 P2口在FLASH程和校验时接收高八位地址信号 P3口:P3口管脚是8带内部上拉电阻的双向I/O口,可接收 门电流。当P3口写入“1”后,它们被内部上拉为高电平,并 输入,由于外部下拉为低电平,P3口将出电流(ILL)这由于上拉的缘故。P3口除了作为普通I/O P3.0 RXD(串行输 P3.1 TXD(串行输 P3.2 /INT0(外部 P3.3 /INT1(外部 P3.4 T0(T0定时器的外部计 P3.5 T1(T1定时器的外部计 P3.6 /WR(外部数据存储器的 P3.7 /RD(外部数据存储器的 P3口同时为闪编程和编程校验接收一些控 I/O口作为输入口时有种工作方式,即所谓的读端口与读 实际上并不从外部读入数,而是把端口锁存器的内容读入到 某种运算或变换后再写回端口锁存器。只有读端口时才真正 读入到内部总线。89C51的P0、P1、P2、P3口作为输入时都 P1口外P0、P2、P3口都还有其他 RST:复位输入端,高平有效。当振荡器复位器件时,要保 机器周期的高电平 ALE/PROG:地址锁允许/编程脉冲信号端。当访问外部存器 允许的输出电平用于锁存址的低位字节。在FLASH编程期间, 入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号, 器频率的1/6。因此它用作对外部输出的脉冲或用于定时目的。 是:每当用作外部数据存器时,将跳过一个ALE脉冲。如想禁 可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC 作用。另外,该引脚被略 位无效。 PSEN:外部程序存储的选通信号,低电平有效。在由外部程 间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时, /PSEN信号将不 EA/VPP:外部程序存器访问允许。当/EA保持低电平时,在 序存储器(0000H-FFFFH),不管是否有内部程序存储器。注 /EA将内部锁定为RESET;当/EA端保高电平,此间内部程序储器。在FLASH编程期间,此引脚也用施 。 XTAL1:片内荡器反相放大器和时钟发生器 XTAL1:内振荡器反相放大器的 3.2 温度传感电 选用模拟温度传感器LM35作为温度应器,然后通过放器LM358,将信号放大传给AD转 图3.2温度传感器电 3.3报警指示电路 本设计采用了蜂鸣器和示灯来构成整个报警系统。对于 度进行判断,如果通道的度高于设定的温度,通道指示灯闪烁10 指示灯闪烁时喇叭发声,以示 风鸣器的驱动原理是:用三极管的开关特性,当三极管 平“0” 时,三极管通;当b极出现高电平“1”时,三极管 管的导通与截止之间的间差产生的脉冲,使蜂鸣器发出“ 1K R3图3.3报警指 3.4 显示电路 本部分电路主要使用七段数码管和位寄存器芯片74LS164。单片通过I2C总线将要显示的数据信号传送到移位寄存器芯片74LS164寄存,由移位存器控制数码的显示,从而实现移位寄存点数码管显示。由于单片机的时钟频率到12M,移位寄存器的移位速度相当快,所以我们根本看不到数据是一位一位传输。从人的角度看,就仿佛是部数码管同时显示的一样。具体 图3.5逻辑封装图 引出端符号:CLOCK 时钟输入端;CLEAR 同步清除输端(低电平有效);A,B 串行数据输 3.5键盘电路 单片机检测按键的原理是:单片机的I/O口既可作为输出也可以 当检测按键时用的是它的入功能,我们把按的一接地,另一端与单片机的某个I/O口相连,始时给该I/O赋一高电,然后让单片机不断检测该I/O口是否变为电平,当按键闭合时,即相当于该I/O口通过按键与地相连,变成电平,序一旦检到I/O口变为低电平 有三个独立式按键可以分调整温度计的上下限报警设置,图中 测温度不在上下限范围内时,发出报警鸣叫声,同时LED数码管将有被测温度值显示,这时可以调整报警上限,从 按键调整过程使用了4个立键盘,各个按键的含义是:key1 该键按下时,即进入手动模式,同时定时关闭,第一次时,显示通道A数值;按下二次时,显示通道B的数值,同时,键值清0,再次按下时又显示通道1的值,按下第次时,显通道C的值,如此循环。Key2为温度值增加键,当该键按下一,温度值加1,第二次再加1,直到数值加125,即清0 ,重新开始加。Key3为温度值减少键,当该按下一次,温度值减1,第二次再减1,直到数减为-55,即重新置125 ,重新开始减。Key4是确定键,该键下,定时器启动(系统 始时,定时器不工作),自动切换到自动模式,循环显示8 图3.5.独立键 3.6晶振电路 晶振电路:XTAL1和XTAL2分别为反放大器输入和输出。该反向放大器可以配置为片内振器。晶振和陶振荡均可采。如采用外部时钟源动器件,XTAL2应不。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时信号的脉无任何要,但必须保证脉冲的高 图3.6晶振电路 3.7单片机I/O口图功 1)对4段LED数码管 2)对温度传感器输 3)对4个独立键盘扫描 4)对8路报警LED指示灯的亮灭控制(P0.0~p0.7) 3.8复位模块电路 S2 1 P1.02 P1.1并从这个单片机复是使CPμ合系统中的其它功能都处于一个 S43 P1.2初始的状态开始工作。单机在刚接通电源、断电后以及发生故障 4 P1.3位在该电路中不仅起了电复位的作用,同时对系统的可控性有 S55 P1.4计中的 6 P1.5 S3 图 4.1 系统总体设计 4.2键盘管理 键盘管理软件包括盘消息接收和键盘消息处理 键盘消息接收是指当用户按下某个键后,过对键端口的分析,接收到按键的编码信息,然后查询键值表得 键盘消息处理是取出所到的键值,并按照键值的义分别处理。在本系统中,包括“+”、“-”、“功”三键位,各键位处理程序都将在控机程序中执行。 键具体定义 “+”:设置从机的上限值;“-”:设置从机的下值;“能”:设从机的执行功能,其 图4.2 键盘 4.3噪音处理 由于干扰的存在,能导致A/D转换结果与炉温出现差异,为了提系统的可性信号的真实性,采用程计算的方法对采样号进行平滑加工,从而克服虚假信号,这种算法为数 图4.3 数据处理 五、结论 从这次的课程设计中,我真真正正的意识到,在以的学习中,要理论联系实际,把我们所的理论知识用到际当中,学习单机片机更是如此,程序只有在常的写与读的过程中才能提高,这就是我在这课程设计中的大收获。这次对数温度计的设计与制作,让了解了设计电路的程序,也让我了解了关于字温计的原理与设计理念,要设计一个电路总要先用真仿真成功之后才实际接线的。但是最后的成品却不一与仿真时完全一样,因为,再实际接线中有着各种各样的条件制约着。且,在仿真中法功电路接,在实际中因为芯身的特性而能够成功。所以,在设计时应考虑两者差异,从中找出最适合的设计方 六、参考文献 [1] 沙占友. 集成温度传感器原理与应[M]. 北京:械工业出版社,2002, 84~95. [2] 刘君华. 传器系统[M]. 西安:西安子科技大学出版社,1999,83~105. [3] 沙占友. 智能化传器原理与应用[M]. 北京:子工业出版社,2004,99~108. [4] 赵负. 传感器集成电路手册[M]. 北京:化学 [5] 张毅刚. MCS-51单片机原理及应用[M]. 哈尔:哈尔滨工大学出版社,2004,81~94 [6] 李玉峰,倪虹霞 MCS-51系列单片机原与口技术[M]. [7] 林伸茂. 8051单片彻底研究经验篇[J]. 北京:人民邮电出版,2004,7~14. [8] 沙友. 单片机外围电路设计[J]. 北京:电子工业出社,2003,37~48. [9] 希. 传感器及其应电路[M]. 北京:电子工业出 七、附录 7.1附录1 #include #define uchar unsigned char #define uint unsigned int uchar i; sbit lcdrs=P3^0; sbit lcdrw=P3^1; sbit lcden=P3^2; sbit d1=P1^0; sbit d2=P1^1; uchar code t0[]="the temperature "; uchar code t1[]=" is "; uchar code wendu[]="0123456789"; sbit DQ = P3^7;//定义ds18B20总线IO //液晶显示模块 void delay(uint z) { uint x,y; for(x=100;x>1;x--) for(y=z;y>1;y--); } void write_com(uchar com) { lcdrs=0; P2=com; delay(5); lcden=1; delay(5); lcden=0; } void write_date(uchar date) { lcdrs=1; P2=date; delay(5); lcden=1; delay(5); lcden=0; } void init_lcd() { lcden=0; lcdrw=0; write_com(0x38); write_com(0x01); write_com(0x0c); write_com(0x06); write_com(0x80); for(i=0;i<> { write_date(t0[i]); delay(0); } write_com(0x80+0x40); for(i=0;i<16;i++)>16;i++)> void tmpDelay(int num)//延时函数 { while(num--) ; } /******************************************************************************/ void Init_DS18B20()//初 unsigned char x=0; DQ = 1; //DQ复位 tmpDelay(8); //稍做时 DQ = 0; //单片机将DQ拉低 tmpDelay(80); //精时 大 x=DQ; //稍做时后 如果x=0则初始化成功 x=1则初始化失 unsigned char ReadOneChar()//读一个字节 { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) { DQ = 0; // 给脉冲信 write_date(t1[i]); delay(0); } dat>>=1; DQ = 1; // 给脉冲信 return(dat); } void WriteOneChar(unsigned char dat)//写一个字节 { unsigned char i=0; for (i=8; i>0; i--) { } } unsigned int Readtemp()//读取温度 { unsigned char a=0; unsigned char b=0; unsigned int t=0; float tt=0; Init_DS18B20(); WriteOneChar(0xCC); // 跳过序号列号的操作 WriteOneChar(0x44); // 启动温度转 WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); // a=ReadOneChar(); //连续读两个 DQ = 0; DQ = dat&0x01; tmpDelay(5); DQ = 1; dat>>=1; b=ReadOneChar(); //读高8位 t=b; t<> t=t|a; //两字节合一个 void display() { unsigned int num,num1; //义的时候用uchar unsigned int shi,ge,xiaoshu; num=Readtemp(); num1=num/10; if(num1>37) {d1=0;d2=1;delay(500);} if(num1<> {d1=1;d2=0;delay(500);} else {d1=1;d2=1;} shi=num/100; ge=num/10%10; xiaoshu=num%10; write_com(0x80+0x40+5); write_date(wendu[shi]); write_com(0x80+0x40+6); write_date(wendu[ge]); write_com(0x80+0x40+7); write_date(0x2e); //这里的num,shi,ge,xiaoshu 必 须用unsigned int无 write_com(0x80+0x40+8); write_date(wendu[xiaoshu]); } void main() { init_lcd(); while(1) { display(); delay(10); } } 7.2附录2(系统 第21页 课程设计 (论文)任务书 专业班级:自动化 1002班 生姓名:李松 指导教师(签名):闫 单片机与 PC 机 2、本次课程设计(论文) 课程设计的基本教学目的是培养学生综合用所学的基础论、 专业知识和基本能,提高分析与解实际问题的能科技写作 或设计能力。求学生在做课程设计的过程中要有意识地培养自己的 实际能力。通过本课程设计的实践,了解单片工作的原理用 技术,掌握根据硬件电路设计件的方法,了解设计过程中的各个基 本节,也为今 3、本次 课程设计 (论文)务的主要内容和要求(括原始数 设计任务:设计单片机与 PC 设计任务: 1》利用 MCS51单片机系统完成系统 2》完成硬件设计。 3》完成软件设计。 4》完成代码编写。 5》进行硬件线 6》进行代码的在 7》撰写课程设 4、应收集的资料及主 1)单片机教材及相关元 2)仿真软件 protues 的使用说明 3) protel 的原理 5、审核批准意见 教研室主任(签字) 目录 一、 摘要 ……………………………………………………… 4 二、 引言 ……………………………………………………… 5 三、 实验设备 ………………………………………………… 6 四、 相关参考程序内容 ……………………………………… 6 五、 相关硬件内容 …………………………………………… 8 六、 流程图 …………………………………………………… 9 七、 程序设计 ……………………………………………… ..10 八、 电路连接 …………………………………………… .. … 11 九、 小结 ………………………………………………… .. … 11 十、 参考文献 ……………………………………………… ..12 摘要 本单片机系统采用 AT89S52控制,整个硬系统由 A/D、 D/A转换、 LED 显示、键盘、串行通信模块成。本设计只完成了单 片机部分的开发设计, 没有设外部的采集和控制电。 因为没有外 采集电路, 所以不能完成具体测量能, 要完成具体的测量功能 (如测量压力、温度、湿度)还要外部的各种传器采集电路和 相应的软件。若配上采集电路和相应的软件能将测量结果用 LED 数码管十进制显示出来,其中包括了 A/D、 D/A换,还可以用按键 来控制, 进行机对话; 系统中置了 5个按键, 其中 1个是复位键, 余的 4个键, 用序来控制实现不同的功能。 所以没有设计外部 采集路是因为设计了外部采集电路系统的功能比较单一, 不方便 系统功能的外部扩展。该系统能实现单片机与 PC 机串行通信 编程的 关键词:单片机 AT89S52;串行通信; A/D 二、引言 单片机与 PC 机串行 近年来,随着科学技术的发展, PC 机其优越的性价比和富的软件源 成为计算机应用的主机。 在工业控制中单片机得到广泛的应用, 现化集中 管理需要现场数据进行计、分析、制表、打印、图、警 , 同时,又要 求对现场装置进行实时控制, 完成各种规操作, 达到集中管理的目的。 由于单 片机的计能力有限, 难以进行复杂的数据处理。 因此在功能比较复杂的控系 统中,通常以 PC 机为上位机,单片机下位,由单片机完成数据的采及 装置控制, 由上位机完成各种复杂数据处理及对单片机控制, 二者结合, 使得单片机应用已不仅仅局限于传统意义上的自动监测或制, 而形成了向以 网络为核的分 单片机与 PC 机串行通信 现代信息网络技术的一个突出特点, 就是使工业控制系统中的所有备连接 成网, 从而在一个核软件管理下工作, 成一个有机的整体。 这种整体网络方 式在现代工业控制统具有传统独立控制系所无法比进性, 不仅能极大 地高工业设备的生产效率,还可以大提高系 单片机自诞生以来以其性能稳定、格低廉、功能大,在智仪器、工业 装备以及用电子消费品中得到了广泛的应用。 在单片机的输输出控制, 除 直接接上小键 LCD 显示屏等方法外,一般都通过串口上位机 PC 进行通 信。这样不仅能够实现远程控制,而且能够利用 PC 机大的数据处理功能以 友好的控制界面。在一般的利用 PC 对单片机进行控制的合,都是用 Windows 作位机的平台, 优点是界面友好, 编程和操作都比较容易。 因此 研究 PC 机与单片机串通信具有重要 三、实验设备 PROTEUSProteus 7 Professional软件 四、相关参考 资料转移指令 MOV 移动 MOVC 程式记 MOVX 外部 RAM 和扩展 I/O口与累加 PUSH 放入堆叠 POP 由堆叠取回 XCH 8位元交换 XCHD 低 4 SWAP 高低 4位元交换 算术指令 ADD 两数相加 ADDC 两数相 SUBB 两数相 INC 加一指令 DEC 减一指令 MUL (MUL AB 乘法指仅此条)相乘指令,所得的 16 DIV (DIV AB 法指令仅此一条)相除指令, DA (DA A 只此一条指令 ) 调整为十进数 逻辑指令 ANL 做 AND ( ORL 做 OR ( XRL 做(逻辑 CLR 清除为 0 CPL 取反指令 RL 不带进 RLC 带进 RR 不带进 RRC 带进 控制转移类指令 JC C=1时跳 JNC C=0时跳 JB 位元 =1时跳 JNB 位元 =0时跳 JBC 位元 =1时跳 LCALL 长调 ACALL 绝对 RET 由副 RETI 由中断 AJMP 绝对转移 SJMP 相对转移 JMP @A+DPTR 散转,相对 DPTR 的间接转移 JZ A=0时跳 JNZA 0时跳 CJNE 二数比较 , 不相等时跳 DJNZ 减一 , 不 NOP 空操作 位变量指令 SETB 设 ORG 程序开始,规定程 END 程序结束 EQU 等值指令(先赋值 DW 定义字内容 DS 定义保留一定的 BIT 位地址符号指令 例:SAM BIT P1.0 RET 子程序 RETI 中断子程 $ 本条指令地址 五、相关硬件内容 (1) 、 MCS-51 80C51单片机属于 MCS-51列单片机,由 Intel 公 司开发, 其结是 8048的延伸, 改进了 8048的点, 增加了如(MUL ) 、除(DIV ) 、(SUBB ) 、比较 (PUSH ) 、 16数据指针、 布尔代数运算等指令, 以 及串行通信能和 5个中断源。采用 40引脚双直 插式 DIP (Dual In Line Package) ,内有 128个 RAM 元及 4K 的 ROM 。 80C51有两个 16定时计数器, 两个外中断,两个定时计数中断,及一个串行中断, 并 4个 8位并行 但需要石英晶体和微调容外接, 本系统中采 12MHz 的晶频率。 由于 80C51的系统性能满足系统数据采集时间精度的要求, 而且产量丰富来源广, 应 用也很成熟,故 (2)虚拟终端 Virtual Terminal(VT) 虚拟终端 (VT)是一种提类似于 Internet Telnet 协议的远 程终端仿真的国际准化组织 (ISO)协议。在远程终端的用 户, 可以在远程计算机上行应用程, 就象他们是坐在这 计算机前面一样。 虚 一个终端以及为此目的而写的软件。 虚拟端的目的是达到个电脑及其户能 够与大型计算机连接。一般来说需要连接的大型计算机是 IBM 大型计算机 或者谓的超小型算机(过去往往是迪吉多的 V AX ) 。 虚拟终端使得个 人电脑的用户以直接使用的个人电脑来与大型计算机联系, 而不必使用专 的终端。 通过虚拟终端的软件拟终端还可以扩展大型计机的标准终端 的功能, 通过虚拟终端不但以将个电脑上的数据传递给大型算, 且还 可以大型计算机的数据传给个人电脑,并在个电脑上继续加工。 一 般型计算机的终端是字母式的输入和输出接口, 因此一个虚拟终端少需要一 个能够 ASCII )输入和输出接口的能 是图像式的用户表面。 要使得新的、 图式的序能够使用老的字母的或者没 有图像式输入和输能力的程序也需要虚终端。 现代的大算也内 部使用虚拟终端, 这样们可以向老的、 需要终端的程序假装一个终端, 而实际 上它则将程序的显示转到显示上。 比如 Linux 以及其大多数基于个人的 似 Unix 的操统假装有六十个这样的 “ 虚拟 ” 的终端。 字母程序 <---> 虚 (3) 、 COMPIM 器件 protues 的解释:COM Port Physical Interface model 串口物 理端口模型。 在 protues 里 COMPIM 可以用实际的串和外部通。 比如台式机有个串口 COM1,我在 protues 里添加 COMPIM 置属性,就能在仿里通过 COM1和外 六、流程图 七、程序设计 ORG 00H SJMP STAR ORG 30H STAR: MOV SP , #60H MOV SCON , #01010000B ;设定串行方式, 8位异步,允许接受 MOV TMOD , #20H ;设定计数 ORL PCON , #0; ;波特率不加倍 MOV TH1, #0FDH ; 设定 SETB TR1 ;计数 LOOP: JNB RI , $ ;等待接收完成 MOV A , SBUF ;接 MOV P2, A CLR RI ; MOV SBUF , A; ; JNB TI , $ ; CLR TI ; SJMP LOOP ;转到 loop 循环 END 八、电路连接 九、小结 通过本次课程设计,我有对 51单片机有了更进一步的了解, 51单片的 更能结构记得熟悉了。 课程计是在原有的学科基础上所进行的更深层次的综 合较强的学习。在本次程设计中,们 4人分为一组,彼合作,经过几 天的努力,终于 在本次课程设计中,我们的课程设计题目:基于单片机 AT89C51的数字 度计设计。刚一触这个题目,得找不到具体的着手点。但 4个人的 努力思考下, 我们决定彼此分工, 各自完成自己的任。 我的任务是硬件电路的 温度传感器 DS18B20。利用网络以及图书的源,我了解了我的任务的具体内 容,并助所获取的 这一学期我们学习了《单片机原理应用》 。但由于所学时间不长,外书 本上的内相对简单, 我太清楚如何去利用从所学的知识, 很难将书本上的 基本理论与实际的问题结合来。 但在这次单片机课程设计中, 我深对单 片机原理及应的认识, 并结合自己学到的知识, 掌握了 的方法,培养了自己的际能力。这也为我今的实际应奠定了基。 总之, 本次课程设计我完成了自己的任务, 到了课程设计的目的, 小组 设计的成贡献了自己的一份力 十、参考文献 1、 书名 :《单片机原理用教程—基于 Proeus 出版社:电子工 出版年份:2011年 起—止页码:69— 88 2、 书名:《单片机原理、应用与 PROTEUS 仿真》 作者:张靖武 周灵 出版社:电子工 出版年份:2011 起—止页码:248— 266单片机课程设计
单片机课程设计
单片机课程设计