Ⅰ 我是机电专业的学生,快要毕业了,我的毕业论文题目是基于51单片机的温度控制系统设计
第1章 硬件电路分析
第1.1节 硬件电路概述该测温系统由五部分组成:电源模块、侦测模块、显示模块、控制模块、通讯模块。电源模块完成将200V,50Hz市电转换为稳定的直流+5V电源的任务,包含变压、整流、滤波和稳压四部分,其中稳压部分采用LM7805集成块。串口通信模块的任务是实现单片机与计算机的通信,通过软件将程序下载至单片机中进行运行调试
以上内容来自5173论文网 http://www.lw5173.com/article/html/4627.html 点击参考更多
Ⅱ 基于51单片机和热敏电阻的温度控制系统
给你个网站
你可以去看一下
http://www.sinochip.net/TechSheet/67.htm
本程序工作过程如下:
;1、开机后首先进行初始化,初始化后显示“P”1秒,提示系统进入测试工作状态,显
; 示完成后,进行温度测试。
;2、温度测试的过程是这样的:
; * T0置为计数方式,对T0脚(即P3.5)的脉冲计数,工作方式2,初值为255
; * 将T1置为定时方式,工作方式2,初值为0
; * 从P3.4口送单稳触发脉冲,使555输出单稳脉冲(正脉冲),该脉冲宽度随热敏
; 电阻阻值而变化。
; * 开T0、T1中断,启动T0、T1。此时T1自动对内部机器周期计数,当TL1溢
; 出时,产生T1中断。在T1中断处理程序中,将RAM 21H单元加1(即21H单
; 元存放脉冲宽计数值高位)后返回主程序。
; * 当来自P3.5的单稳脉冲结束(即下降沿到来)时,TL0计数器加1并溢出,产
; 生T0中断。在T0中断处理程序中,关T0、T1中断,并将TL1中的的内容读
; 到RAM 20H单元(20H单元存放脉宽计数值的低位)。
; * 查表求温度值
; NTTAB是脉宽计数值与温度的对照表,按低温到高温的次序存放,即第一、第
; 二单元存放-100C时的脉宽计数值,依此类推,第121和122单元则存放+500C
; 时的脉宽计数值。
; 将20H、21H中的计数值与NTTAB中的计数值依次进行比较,直至20H、21H
; 中的值小于NTTAB中的计数值为止。而比较的次数就对应温度的整数值,二计
; 数值之差与对照表相邻两计数值的商即为小数位。
;3、程序中除了对-100C到+500C进行测试外,还有开路(计数值过大)、短路检测(计
; 数值过小)、负超温检测、正超温检测,并有相应的显示。
;4、将检测值(温度值或其他结果)显示1秒,然后再重复温度检测。
;需要说明的是:本程序虽包括了测温的全过程,但未考虑软硬件的自检,软件滤波等部
;分。
;电容C4、热敏电阻RT的参数决定单稳脉冲的宽度,而最终的计数值除了与单稳
; 脉冲的宽度有关外,还与晶振频率有关,因而在RT的型号确定后要根据系统对精
; 度和分辨率等的要求选择C4的值。本程序中NTTAB脉宽计数值与温度对照表是在
; 热敏电阻为MF53-1型负温热敏电阻加12K精密电阻与之并联,C4为1μ,晶振为
; 4MHz的条件下得到的。数据不十分准,仅做参考。你可以在元件参数定了后,可在
; 调试程序时用可变电阻箱代替热敏电阻,在程序测出计数值处设断点,读出每个标
; 准阻值所对应的计数值(即20H、21H中的内容),自己将NTTAB建立起来。
; * * * * * * * * * * * * * * * * * * * * * * * * * *
; * 用89C2051控制的数字测温仪 *
; * 源程序清单 *
; * * * * * * * * * * * * * * * * * * * * * * * * * *
ORG 0000H
AJMP MAIN ;转主程序
ORG 000BH
AJMP WT0 ;T0中断入口
ORG 001BH
AJMP WT1 ;T1中断入口
;主程序
ORG 030H
MAIN: MOV IE,#00H ;关中断
MOV SP,#40H ;设堆栈指针SP为40H
SETB P3.5 ;将P3.5口置”1”
MOV 30H,#0CH ;“P3 ”送显示缓冲区30H~33H
MOV 31H,#0EH
MOV 32H,#0EH
MOV 33H,#0EH
MAIN0: ACALL D1S ;调显示1秒子程序
MOV P1,#0FFH ;关显示
CLR 20H ;清脉宽计数值存放区20H~21H
CLR 21H
CLR 22H ;清单稳脉冲结束标志22H
MOV TH0,#0FFH ;置T0计数初值255
MOV TL0,#0FFH
MOV TH1,#00H ;置T1的计数初值0
MOV TL1,#00H
MOV TMOD,#26H ;置T0为计数方式,方式2;T1为定时方式。方式2
SETB EA ;允许T0、T1中断
SETB ET0
SETB ET1
SETB TR0 ;开T0中断
CLR P3.5 ;送单稳触发脉冲
NOP
NOP
NOP
NOP
SETB P3.5
SETB TR1 ;开T1中断
MAIN1: CJNE 22H,#01H,MAIN2 ;单稳脉冲未结束,转检查是否超时
AJMP MAIN3 ;单稳脉冲结束,转取脉宽计数值
MAIN2: CJINE 21H,#08H,MAIN1 ;未超时,转等待单稳脉冲结束
CLR EA
CLR ET0
CLR ET1
CLR TR0
CLR TR1
MOV 30H,#0DH ;开路提示“E1”送显示缓冲区,转显示
MOV 31H,#01H
MOV 32H,#0EH
MOV 33H,#0EH
AJMP MAIN0
MAIN3: CJNE 21H,#00H,MAIN4 ;单稳脉冲结束,先判断是否短路。不是,转查表程序。
MOV 30H,#0DH ;短路,短路提示“E2”送显示缓冲区,转显示
MOV 31H,#02H
MOV 32H,#0EH
MOV 33H,#0EH
AJMP MAIN0
MAIN4: ACALL NTTR ;调查表子程序
AJMP MAIN0
;查表求温度值子程序
NTTR: MOV R2,#00H ;清计数与温度对照表偏移量寄存器R2
MOV DPTR,NTTAB ;DPTR指向计数与温度对照表首址
NTTR1: CLR C ;20H、21H中的内容与NTTRB相减,并将差值存23H、24H
MOV R3,#02H
MOV R0,#20H
MOV R1,#23H
NTTR2: MOV A,R2
MOVC A,@A+DPTR
SUBB A,@R0
MOV @R1,A
INC R0
INC R1
INC R2
CJNE R2,#122,NTTR3 ;若未到NTAB表尾,继续比较
POVER:JC NTTR30 ;到表尾,查到对应温度,转求温度值
MOV 30,#0EH ;到表尾,查到对应温度,正超温提示“UUU”送显缓区
MOV 31H,#0BH
MOV 32H,#0BH
MOV 33H,#0BH
RET ;返回主程序
NTTR3: DJNZ R3,NTTR2
JNC NTTR1 ;未查到对应温度值,继续查表
NTTR30:MOV A,R2 ;已查到对应温度,由偏移量求出整数部分,暂存R4
CLR C
SUBB A,#02H
RR A
MOV R4,A
MOV R1,#23H ;求温度值的小数部分:+X/2送B
MOV A,@R1
CPL A
INC A
RR A
MOV B,A
NTTR4: DEC R2 ;Ni+1送20H、21H
MOV R0,#21H
MOV A,R2
MOVC A,@A+DPTR
MOV @R0, A
DEC R0
DEC R2
MOV A, R2
MOVC A,@A+DPTR
MOV @R0, A
DEC R2 ;求+i/2从A
DEC R2
MOV R3,#02H
CLR C
NTTR5: MOV A,R2
MOVC A,@A+DPTR
SUBB A,@R0
JNC NTTR50
CLP A
INC A
NTTR50:RR A
MOV R5,A
MOV A,B ;+x/2*10/+i得到温度值的小数部分
JZ NTTR6
MOV B, #05H
MUL AB
MOV B,R5
DIV AB
MOV 20H,A ;小数部分送20H
AJMP NTTR7
NTTR6: MOV 20H,#00H
NTTR7: MOV A,#0AH ;判整数部分为正还是负
CLR C
SUBB A,R4
JC PTEMP
NTEMP:CJNE A,#0AH,NTEMP1 ;为负
MOV 30H,#0EH ;“-X”送显示缓冲区高三位
MOV 31H,#0AH
MOV 32H,A
AJMP NTEMP2
NTEMP1:MOV 30H,#0AH ;“-10” 送显示缓冲区高三位
MOV 31H,#01H
MOV 32H,#00H
NTEMP2:MOV A,#0AH ;修正小数部分后,将小数部分送显缓低三位
CLR C
SUBB A,20H
MOV 33H,A
RET ;返回主程序
PTEMP: MOV 30H,#0EH ;为正。“ ”送显缓最高位
MOV A,R4 ;温度值整数部分送显缓中间两位
MOV B,#0AH
DIV AB
JNZ PTEMP1
] MOV 31H,#0EH
JMP PTEMP2
PTEMP1:MOV 31H,A
PTEMP2:MOV 32H,B
MOV 33H,20H ;小数部分送显缓最低位
RET ;返回主程序
;显示子程序(将显缓区的内容循环显示一遍,每位显示1ms后,关显示返回主程序)
DSP: MOV R2,#01H
MOV R0,#30H
MOV DPTR,#TAB
DSP1: MOV A,@R0
MOVC A,@A+DPTR
MOV P1,A
ORL P3,R2
ACALL D1MS
MOV A,R2
RL A
MOV R2,A
CJNE R2,#10H,DSP2
ANL P3,#0F0H
RET
DSP2: INC R0
AJMP DSP1
;延时1ms子程序
D1MS: MOV R7,#166
D1MS1: DJNZ R7,D1MS1
RET
;显示1秒子程序
D1S: MOV R6,#04H
D1S1: MOV R5,#250
D1S2: ACALL DSP
DJNZ R5,D1S2
DJNZ R6,D1S1
RET
;段码表
TAB: DB 40H,79H,24H,30H,19H :0.,1.,2.,3.,4.
DB 12H,02H,78H,00H,10H :5.,6.,7.,8.,9.
DB 3FH,41H,0CH,06H,0FFH :-.,U.,P.,E.,灭
;T0中断处理程序
WT0: MOV A,TL1 ;将T1计数值送20H
MOV 20H,A
CLR EA ;关中断
CLR TR0 ;T0停止计数
CLR TR1 ;T1停止计数
MOV 22H,#01H ;置单稳脉冲结束标志
RETI ;返回主程序
;T1中断处理程序
WT1: INC 21H ;脉宽计数值高位加1
RETI ;返回主程序
;脉宽计数与温度对照表
NTTBL: DB 0D0H,05H,0B2H,05H,96H,05H,72H,05H
DB 52H,05H,35H,05H,15H,05H,0F6H,04H
DB 0D8H,04H,0B9H,04H,9CH,04H,81H,04H
DB 65H,04H,4AH,04H,30H,04H,14H,04H
DB 0FAH,03H,0E0H,03H,0C6H,03H,0ADH,03H
DB 95H,03H,7CH,03H,64H,03H,4CH,03H
Ⅲ 求一个51单片机的多路温度控制系统的C语言程序。
#include<reg52.h> #include<math.h>
#include<INTRINS.H>
#define uchar unsigned char
#define uint unsigned int;
/******************************************************************/
/* 定义端口 */
/******************************************************************/
sbit seg1=P2^0;
sbit seg2=P2^1;
sbit seg3=P2^2;
sbit DQ=P1^7;//ds18b20 端口
sfr dataled=0x80;//前数显示数据端口
/******************************************************************/
/* 全局变量 */
/******************************************************************/
uint temp;
uchar flag_get,count,num,minute,second;
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//7段数码管段码表共阳
uchar str[6];
/******************************************************************/
/* 函数声明 */
/******************************************************************/
void delay1(uchar MS);
unsigned int ReadTemperature(void);
void Init_DS18B20(void);
unsigned char ReadOneChar(void);
void WriteOneChar(unsigned char dat);
void delay(unsigned int i);
/******************************************************************/
/* 主函数 */
/******************************************************************/
main()
{
unsigned char TempH,TempL;
TMOD|=0x01;//定时器设置游码
TH0=0xef;
TL0=0xf0;
IE=0x82;
TR0=1;
P2=0x00;
count=0;
while(1)
{
str[5]=0x39; //显示C符号
str[1]=tab[TempH/100]; //十位温度
str[2]=tab[(TempH%100)/10]; //十位温度
str[3]=tab[(TempH%100)%10]|0x80; //个位温度,带小数点
str[4]=tab[TempL];
if(flag_get==1) //神悔哪定时读取当前温度
{
temp=ReadTemperature();
if(temp&0x8000)
{
str[0]=0x40;//负号标志
temp=~temp; // 取反加1
temp +=1;
}
else
str[0]=0;
TempH=temp>>4;
TempL=temp&0x0F;
TempL=TempL*6/10;//小数近似处理
flag_get=0;
}
}
}
/******************************************************************/
/* 定时器中断 */
/******************************************************************/
void tim(void) interrupt 1 using 1//中断,用于数码管扫描和温度检测间隔
{
TH0=0xef;//定时器重装值
TL0=0xf0;
num++;
if (num==50)
{num=0;
flag_get=1;//标志位有效
second++;
if(second>=60)
{second=0;
minute++;
}
}
count++;
if(count==1)
{P2=0;
dataled=str[0];}//数码管扫描
if(count==2)
{P2=1;
dataled=str[1];}
if(count==3)
{ P2=2;
dataled=str[2];
}
if(count==4)
{ P2=3;
dataled=str[3];
}
if(count==5)
{ P2=4;
dataled=str[4];
}
if(count==6)
{ P2=5;
dataled=str[5];
count=0;}
}
/******************************************************************/
/* 延时函数 */
/******************************************************************/
void delay(unsigned int i)//延时函数
{
while(i--);
}
/******************************************************************/
/* 初始化 */
/******************************************************************/
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ复位
delay(8); //稍做延时
DQ = 0; //单片机将DQ拉低
delay(80); //精确延时 大于 480us
DQ = 1; //拉高总线
delay(10);
x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
delay(5);
}
/******************************************************************/
/* 读一个字节 */
/******************************************************************/
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 给脉冲信号
dat>>=1;
DQ = 1; // 给脉冲信号
if(DQ)
dat|=0x80;
delay(5);
}
return(dat);
}
/******************************************************************/
/* 写一个字节 */
/******************************************************************/
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay(5);
DQ = 1;
dat>>=1;
}
delay(5);
}
/******************************************************************/
/* 读取温度 */
/******************************************************************/
unsigned int ReadTemperature(void)
{
unsigned char a=0;
unsigned int b=0;
unsigned int t=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
delay(200);
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
a=ReadOneChar(); //低位
b=ReadOneChar(); //高位
b<<=8;
t=a+b;
return(t);
}
//LZ,这是测温并且用数码管显示程序,报警可以自己另行添加!主要程序就是这些!
()
Ⅳ 求助!51单片机+ds18b20+lcd1602+按键设置功能的温度控制系统,ds18b20的温度值总无法在lcd上显示。。。
正好我做过这方便的东西,你先把1602调出来,要能把一个浮点数显示出来。然后再调18B20,注意18B20的几个关键时序的延时,一定要按照器件手册调到最佳时序宽度,最好用示波器监控着调,很容易就调好了。最后再把温度显示出来。
Ⅳ 基于MCS-51单片机的精密温度控制系统的设计与实现
上传内容
仅供学习与参考
摘要
本检测系统硬件设计以AT89C51单片机为核心,用温度传感器DS18B20实现温度控制,用数码管显示实际温度和预设温度,制作数字温度计,并可以实现温度预警控制。
单片机系统的软件编程采用单片机汇编进行编程。应用软件采用KEIL和PROTEUS仿真软件模拟实现控制过程。
温度控制系统是基于单片机的计算机检测技术的软硬件开发和面向对象的高级可视化程序开发的有机结合。对温度控制的发展有很大的好处。如果投入生产,不仅会创造良好的经济效益,还可提高温控的简单化。
关键词 单片机;DS18B20;调节;温度
Abstract
This examination system hardware design take at89C51 monolithic integrated circuit as a core, realizes the temperature control with temperature sensor DS18B20, Demonstrates the actual temperature and the preinstall temperature with the nixie tube,manufactures the simple intelligence temperature control system - - digit thermometer,And may realize the temperature early warning control.
. The monolithic integrated circuit system's software programming uses the monolithic integrated circuit assembly to carry on the programming. The superior machine application software uses KEIL and the PROTEUS simulation software simulation realizes the controlled process.
This article develops the intelligence temperature control system is based on monolithic integrated circuit's computer examination technology software and hardware development and face the object high-level visualization procere development organic synthesis. Has the very big advantage to temperature control's development. If place in operation, not only will create the good economic efficiency, but may also propose the simplification which the high temperature will control.
Keywords microcontroller;DS18B20;measure;temperture
目录
摘要 I
Abstract II
第1章 绪论 4
1.1 温度传感器发展概述 4
1.2 单片机技术简介 4
1.3 温度检测技术的发展 5
第2章 温度传感器的选择 8
2.1 测温方法 8
2.2 DS18B20简介 9
第3章 软硬件设计 10
3.1 单片机的选择 10
3.2 温度传感器的选择 10
3.3 仿真软件的选择 11
3.4 编译软件的选择 11
3.5 PROTEUS 仿真电路图 12
第4章 汇编语言程序 13
4.1 主程序和温度值转换成显示值子程序的流程图 13
4.2 DS18B20温度子程序和显示子程序的流程图 14
4.3 汇编语言源程序 14
第1章 绪论
1.1 温度传感器发展概述(略)
1.2 单片机技术简介(略)
1.3 温度检测技术的发展(略)
第2章 温度传感器的选择
2.1 测温方法
温度是一个很重要的物理参数,钢铁的冶炼、石油的分馏、塑料的合成以
及农作物的生长等等都必须在一定的温度范围内进行,各种构件、材料的体积、电阻、强度以及抗腐蚀等物理化学性质,一般也都会随温度而变化。人们利用各种能源为人类服务,也往往是使某些介质通过一定的温度变化来实现的。所以在生产和化学试验中,人们经常会碰到温度测量的问题。
温度传感器是检测温度的器件,其种类最多,应用最广,‘发展最快。众所周知,日常使用的材料及电子元件大部分都随温度而变化,资料【5】中介绍了作为实用传感器必须满足的一些条件:
(1)在使用温度范围内温度特性曲线要求达到的精度能符合要求:为了能
在较宽的温度范围内进行检测,温度系数不宜过大,过大了就难以使用,但对
于狭窄的温度范围或仅仅定点的检测,其温度系数越大,检测电路也能越简单。
(2)为了将它用于电子线路的检测装置,要具有检测便捷和易于处理的特
性。随着半导体器件和信号处理技术的进步,对温度传感器所要求的输出特性
应能满足要求。
(3)特性的偏移和蠕变越小越好,互换性要好。
(4)对于温度以外的物理量不敏感。
(5)体积小,安装方便:为了能正确地测量温度,传感器的温度必须与被
测物体的温度相等。传感器体积越小,这个条件越能满足。
(6)要有较好的机械、化学及热性能。这对于使用在振动和有害气体的环
境中特别重要。
(7)无毒、安全以及价廉、维修、更换方便等。
温度测量的方法很多,根据温度传感器的使用方式,通常分为接触式测温
法与非接触式测温法两类。
(1)接触式测温法
由热平衡原理可知,两个物体接触后,经过足够长时间的热交换达到热平
衡,则它们的温度必然相等。如果其中之一为温度计,就可以用它对另一个物体实现温度测量,这种测温方式称为接触式测温法。接触式测温的优点显而易
见,它简单,可靠,测量精度高,但同时也存在不足:温度计要与被测物体有
良好的热接触,并充分换热,从而产生了测温滞后现象;测温组件可能与被测
物体发生化学反应;由于受到耐高温材料的限制,接触式测温仪表不可能应用
于很高温度的测量。
(2)非接触式测温法
由于测量组件与被测物体不接触,利用物体的热辐射能随温度变化的原理
测定物体温度。因而测量范围原则上不受限制,测温速度较快,还可以在运动
中测量。这种测温方式称为非接触式测温法。它的特点是:不与被测物体接触,也不改变被测物体的温度分布,热惯性小。从原理上看,用这种方法测温无上限。通常用来测定1000℃以上的移动、旋转或反应迅速的高温物体的温度或表面温度。
2.2 DS18B20简介
2.2.1技术性能描述
单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。测温范围 -55℃~+125℃,固有测温分辨率0.5℃。支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现多点测温。工作电源: 3~5V直流电源。
在使用中不需要任何外围元件,测量结果以9~12位数字量方式串行传送。适用于DN15~25, DN40~DN250各种介质工业管道和狭小空间设备测温。
2.2.2应用范围
该产品适用于冷冻库,粮仓,储罐,电讯机房,电力机房,电缆线槽等测温和控制领域,轴瓦,缸体,纺机,空调,等狭小空间工业设备测温和控制。
2.2.3接线说明
特点有一线接口,只需要一条口线通信 多点能力,简化了分布式温度传感应用 无需外部元件 可用数据总线供电,电压范围为3.0 V至5.5 V 无需备用电源 测量温度范围为-55 ° C至+125 ℃ 。华氏相当于是-67 ° F到257华氏度 -10 ° C至+85 ° C范围内精度为±0.5 ° C。
温度传感器可编程的分辨率为9~12位 温度转换为12位数字格式最大值为750毫秒 用户可定义的非易失性温度报警设置 应用范围包括恒温控制,工业系统,消费电子产品温度计,或任何热敏感系统描述该DS18B20的数字温度计提供9至12位(可编程设备温度读数。信息被发送到/从DS18B20 通过1线接口,所以中央微处理器与DS18B20只有一个一条口线连接。为读写以及温度转换可以从数据线本身获得能量,不需要外接电源。 因为每一个DS18B20的包含一个独特的序号,多个DS18B20可以同时存在于一条总线。这使得温度传感器放置在许多不同的地方。它的用途很多,包括空调环境控制,感测建筑物内温设备或机器,并进行过程监测和控制。【6】
第3章 软硬件设计
3.1 单片机的选择
单片机系统由单片机AT89C51、74HC245等芯片构成,完成数据采集、处理、通讯以及所有的功能,是整个系统的核心模块。
单片机是整个系统的核心,对系统起监督、管理、控制作用,并进行复杂的信号处理,产生测试信号及控制整个检测过程。所以在选择单片机时,参考了以下标准。
(1)运行速度。单片机运行速度一般和系统匹配即可。
(2)存储空间。单片机内部存储器容量,外部可以扩展的存储器(包括1/0口)空间。
(3)单片机内部资源。单片机内部存储资源越多,系统外接的部件就越少,这可提高系统的许多技术指标。
(4)可用性。指单片机是否能很容易地开发和利用,具体包括是否有合适的开发工具,是否适合于大批量生产:、性能价格比,是否有充足的资源,是否有现成的技术资源等。
(5)特殊功能。一般指可靠性、功耗、掉电保护、故障监视等。
从硬件角度来看,与MCS-51指令完全兼容的新一一代AT89CXX系列机,比在片外加EPROM才能相当的8031-2单片机抗干扰性能强,与87C51-2单片机性能相当,但功耗小。程序修改直接用+5伏或+12伏电源擦除,更显方便、而且其工作电压放宽至2.7伏一6伏,因而受电压波动的影响更小,而且4K的程序存储器完全能满足单片机系统的软件要求。故AT89C51单片机是构造本检测系统的更理想的选择。本系统选用ATMEL生产的AT89C51单片机,其特性如下:
(1) 4K字节可编程闪速程序存储器;1000次循环写/擦
(2)全静态工作:OHz-24MHz
(3)三级程序存储器锁定
(4) 128 X 8位内部数据存储器,32条可编程1/0线
(5)两个十六位定时器/计数器,六个中断源
(6)可编程串行通道,低功耗闲置和掉电模式
该器件采用了ATMEL的高密度非易失性的存储器工艺,并且可以与工业标准的MCS-51指令集和输出管脚兼容。由于将多功能8位CPU与闪速式存储器组合在单个芯片中,AT89C51是一种高效的微控制器,为很多嵌入式系统提供了高灵活性且价廉的方案。
3.2 温度传感器的选择
DS18B20是美国达拉斯半导体公司的产品,与其他产品相比较它的性能有如下特点:①采用单总线专用技术,既可通过串行口线,也可通过其它I/O口线与微机接口,无须经过其它变换电路,直接输出被测温度值(9位二进制数,含符号位),②测温范围为-55℃-+125℃,测量分辨率为0.0625℃,③内含64位经过激光修正的只读存储器ROM,④适配各种单片机或系统机,⑤用户可分别设定各路温度的上、下限,⑥内含寄生电源。所以在本设计中,我采用了DS18B20作为温度传感器。【8】
3.3 仿真软件的选择
Proteus 是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:
①实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
②支持主流单片机系统的仿真。目前支持的单片机类型有:ARM7(LPC21xx)、 8051/52系列、AVR系列、PIC10/12/16/18系列、HC11系列以及多种外围芯片。
③提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C uVision2、MPLAB等软件。【9】
3.4 编译软件的选择
KEIL C51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编 器,实时操作系统,项目管理器,调试器。uVision2 IDE可为它们提供单一而灵活的开发环境。
C51 V7版本是目前最高效、灵活的8051开发平台。它可以支持所有8051的衍生产品,也可以支持所有兼容的仿真器,同时支持其它第三 方开发工具。因此,C51 V7版本无疑是8051开发用户的最佳选择。
uVision2集成开发环境具有如下功能:
一、项目管理
工程(project)是由源文件、开发工具选项以及编程说明三部分组成的。
一个单一的uVision2工程能够产生一个或多个目标程序。产生目标程序的源文件构成“组”。开发工具选项可以对应目标,组或单个文件。
uVision2包含一个器件数据库(device database),可以自动设置汇编器、编译器、连接定位器及调试器选项,来满足用户充分利用特定 微控制器的要求。此数据库包含:片上存储器和外围设备的信息,扩展数据指针(extra data pointer)或者加速器(math accelerator)的特 性。
uVision2可以为片外存储器产生必要的连接选项:确定起始地址和规模。
二、集成功能
uVision2的强大功能有助于用户按期完工。
1.集成源极浏览器利用符号数据库使用户可以快速浏览源文件。用详细的符号信息来优化用户变数存储器。
2.文件寻找功能:在特定文件中执行全局文件搜索。
3.工具菜单:允许在V2集成开发环境下启动用户功能。
4.可配置SVCS接口:提供对版本控制系统的入口。
5.PC-LINT接口:对应用程序代码进行深层语法分析。
6.Infineon的EasyCase接口:集成块集代码产生。【10】
3.5 PROTEUS 仿真电路图
图1是基于单片机的智能温度检测系统电路原理图。控制加热热水器电源电路用LED灯模拟代替,取消无水报警电路。装上水后接通电源,下方LED数码管显示当前水温。上方LED数码管显示预设水温。操作“个位”键和“十位”键可预设水温(如99℃)控制点。该电路具有如下功能:
(1) 测量水温,精度为1℃,范围为0~99℃;
(2) 三位数码管实时显示水温;
(3) 可预设水温(如99℃)控制点,当水加热到该水温时自动断电,当水温低于该水温时自动上电加热;
(4) 无水自动断电和报警功能(略)。
图1 基于单片机的智能温度检测系统电路原理图
第4章 汇编语言程序
4.1 主程序和温度值转换成显示值子程序的流程图
4.2 DS18B20温度子程序和显示子程序的流程图
4.3 汇编语言源程序
ORG 0
LJMP MAIN1
ORG 0003H
LJMP ZINT0
ORG 13H
LJMP ZINT1
TMPH: EQU 28H
FLAG1: EQU 38H
DATAIN: BIT P3.7
MAIN1: SETB IT0
SETB EA
SETB EX0
SETB IT1
SETB EX1
SETB P3.6
SETB P3.2
MOV 74H,#0
MOV 75H,#0
MOV 76H,#0
MOV 77H,#0
MAIN: LCALL GET_TEMPER
LCALL CVTTMP
LCALL DISP1
AJMP MAIN
INIT_1820:
SETB DATAIN
NOP
CLR DATAIN
MOV R1,#3
TSR1: MOV R0,#107 ;保持642ms
DJNZ R0,$
DJNZ R1,TSR1
SETB DATAIN ;释放DS18B20总线
NOP
NOP
NOP
MOV R0,#25H
TSR2: JNB DATAIN,TSR3
DJNZ RO,TSR2
CLR FLAG1
SJMP TSR2
TSR3: SETB FLAG1 ;标志位置1,证明DS18b20存在
CLR P1.7
MOV R0,#117
TSR6: DJNZ R0,$
TSR7: SETB DATAIN
RET ;延时254us
GET_TEMPER:
SETB DATAIN
LCALL INIT_1820
JB FLAG1,TSS2
NOP
RET ;DS18B20检测程序
TSS2: MOV A,#0CCH ;跳过ROM,使用存储器
LCALL WRITE_1820
MOV A,#44H ;对RAM操作,开始温度转换
LCALL WRITE_1820
ACALL DISP1
LCALL INIT_1820
MOV A,#0CCH
LCALL WRITE_1820
MOV A,#0BEH
LCALL WRITE_1820
LCALL READ_1820;读暂存器中的温度数值
RET
WRITE_1820:
MOV R2,#8
CLR C
WR1: CLR DATAIN
MOV R3,#6
DJNZ R3,$
RRC A
MOV DATAIN,C
MOV R3,#23
DJNZ R3,$
SETB DATAIN
NOP
DJNZ R2,WR1
SETB DATAIN
RET
READ_1820:
MOV R4,#2
MOV R1,#29H
RE00: MOV R2,#8
RE01: CLR C
SETB DATAIN
NOP
NOP
CLR DATAIN
NOP
NOP
NOP
SETB DATAIN
MOV R3,#9
RE10: DJNZ R3,RE10
MOV C,DATAIN
MOV R3,#23
RE20: DJNZ R3,RE20
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
CVTTMP: MOV A,TMPH
ANL A,#80H ;判断温度正负,正不变,负则取反加1
JZ TMPC1
CLR C
MOV A,TMP1
CPL A
ADD A,#1
MOV TMP1,A
MOV A,TMPH
CPL A
ADDC A,#0
MOV TMPH,A
MOV 73H,#0BH
SJMP TMPC11
TMPC1: MOV 73H,#0AH
TMPC11: MOV A,TMP1
ANL A,#0FH
MOV DPTR,#TMPTAB
MOVC A,@A+DPTR
MOV 70H,A
MOV A,TMP1
ANL A,#0FH
SWAP A
ORL A,TMPL
B2BCD: MOV B,#100
DIV AB
JZ B2BCD1
MOV 73H,A
B2BCD: MOV A,#10
XCH A,B
DIV AB
MOV 72H,A
MOV 71H,B
TMPC12: NOP
DISBCD: MOV A,73H
ANL A,#0FH
CJNE A,#1,DISBCD0
SJMP DISBCD1
DISBCD0: MOV A,72H
ANL A,#0FH
JNZ DISBCD1
MOV A,73H
MOV 72H,A
MOV 73H,#0AH
DISBCD1: RET
TMPTAB: DB 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9
DISP1: MOV R1,#70H
MOV R0,#74H
MOV R5,#0FEH ;显示实际温度
PLAY: MOV P1,#0FFH
MOV A,R5
MOV P2,A
MOV A,@R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
MOV P1,A
MOV A,@R0
MOVC A,@A+DPTR
MOV P0,A
MOV A,R5
JB ACC.1,LOOP1
JB P1.7
CLR P1.7
CLR P0.7 ;显示小数点
LOOP1: LCALL DL1MS
INC R1
INC R0
MOV A,R5
JNB ACC.3,ENDOUT
RL A
MOV R5,A
MOV A,73H
CJNE A,#1,DD2
SJMP LEDH
DD2: MOV A,72H
CJNE A,72H,DDH
SJMP DD1
DDH: JNE PLAY1
LEDH: CLR P3.6
SJMP PLAY
PLAY1: SETB P3.6
SJMP PLAY
ENDOUT: MOV P1,#0FFH
MOV P2,#0FFH
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H,0FFH,0BFH
DL1MS: MOV R6,#14H
DL1: MOV R7,#100
DJNZ R7,$
DJNZ R6,DL1
RET
ZINT0: PUSH A
INC 75H
MOV A,,75H
CJNE A,#10,ZINT01
MOV 75H,#0
ZINT01: POP A
RETI
ZINTT1: PUSH A
INC 76H
MOV A,76H
CJNE A,#10,ZINT11
MOV 76H,#0
ZINT11: POP A
RETI
Ⅵ 基于51单片机的温度控制器
图片为温度控制电路图。温度到达上限时led灯亮,并停止对RT的加热,温度达到下限时led灯灭并开始对RT进行加热。A1和A2为uA741运算放大器。引脚号在图上已经标出。再给你一个单片机采集DS18B20温度的程序,用四位数码管显示的。你把DS18B20接在RT附近就可以测试出RT的温度,调节图中的滑动变阻器可改变温度的上下限。这样就能做到温度控制了。
//安装目录下的EXE文件打开后可在电脑上显示当前温度值
#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitDS=P1^0;//defineinterface
uinttemp;//variableoftemperature
ucharflag1;//
//sbitla=P2^6;
//sbitwela=P2^7;
//unsignedcharcodetable2[]={0x3f,0x30,0x5b,0x4f,0x66,0x6d,0x7d,
//0x07,0x7f,0x67/*,0x77,0x7c,0x39,0x5e,0x79,0x71*/};
//unsignedcharcodetable1[]={0xbf,0xb0,0xdb,0xcf,0xe6,0xed,0xfd,
//0x87,0xff,0xe7};
//unsignedcharcodetable2[]={0x40,0x5e,0x24,0x21,0x13,0x09,0x08,
//0x63,0x00,0x03/*,0x77,0x7c,0x39,0x5e,0x79,0x71*/};
//unsignedcharcodetable1[]={0xc0,0xde,0xa4,0xa1,0x93,0x89,0x88,
//0xe7,0x8f,0x87};
unsignedcharcodetable5[]={0x77,0x22,0x6d,0x5d,0x1e,0x5b,0x7b,
0x15,0x7f,0x1f};
unsignedcharcodetable6[]={0xf7,0xa2,0xed,0xdd,0x9e,0xdb,0xfb,
0x95,0xff,0x9f};
voiddelay(uintcount)//delay
{
uinti;
while(count)
{
i=200;
while(i>0)
i--;
count--;
}
}
///////功能:串口初始化,波特率9600,方式1///////
voidInit_Com(void)
{
TMOD=0x20;
PCON=0x00;
SCON=0x50;
TH1=0xFd;
TL1=0xFd;
TR1=1;
}
voiddsreset(void)//复位,初始化函数
{
uinti;
DS=0;
i=103;
while(i>0)i--;
DS=1;
i=4;
while(i>0)i--;
}
bittmpreadbit(void)//readabit读1位数据函数
{
uinti;
bitdat;
DS=0;i++;//i++fordelay
DS=1;i++;i++;
dat=DS;
i=8;while(i>0)i--;
return(dat);
}
uchartmpread(void)//readabytedate读1字节函数
{
uchari,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tmpreadbit();
dat=(j<<7)|(dat>>1);//读出的数据最低位在最前面,这样刚好一个字节在DAT里
}
return(dat);
}
voidtmpwritebyte(uchardat)//writeabytetods18b20向1820写一个字节数据函数
{
uinti;
ucharj;
bittestb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb)//write1
{
DS=0;
i++;i++;
DS=1;
i=8;while(i>0)i--;
}
else
{
DS=0;//write0
i=8;while(i>0)i--;
DS=1;
i++;i++;
}
}
}
voidtmpchange(void)//DS18B20beginchange开始获取数据并转换
{
dsreset();
delay(1);
tmpwritebyte(0xcc);//addressalldriversonbus写跳过读ROM指令
tmpwritebyte(0x44);//写温度转换指令
}
uinttmp()//getthetemperature读取寄存器中存储的温度数据
{
floattt;
uchara,b;
dsreset();
delay(1);
tmpwritebyte(0xcc);
tmpwritebyte(0xbe);
a=tmpread();//读低8位
b=tmpread();//读高8位
temp=b;
temp<<=8;//twobytecomposeaintvariable两个字节组合为1个字
temp=temp|a;
tt=temp*0.0625;//温度在寄存器中是12位,分辨率是0.0625
temp=tt*10+0.5;//乘10表示小数点后只取1位,加0.5是四折五入
returntemp;
}
voidreadrom()//readtheserial
{
ucharsn1,sn2;
dsreset();
delay(1);
tmpwritebyte(0x33);
sn1=tmpread();
sn2=tmpread();
}
voiddelay10ms()//delay
{
uchara,b;
for(a=10;a>0;a--)
for(b=60;b>0;b--);
}
voiddisplay(uinttemp) //显示程序
{
ucharA1,A2,A2t,A3,ser;
ser=temp/10;
SBUF=ser;
A1=temp/100;
A2t=temp%100;
A2=A2t/10;
A3=A2t%10;
//la=0;
d4=0;
P0=table5[A1];
delay(1);
d4=1; //显示百位
//la=1;
//la=0;
/*wela=0;
P0=0x7e;
wela=1;
wela=0; */
//la=0;
d3=0;
P0=table6[A2];
delay(1);
d3=1; //显示十位
//la=1;
//la=0;
/*wela=0;
P0=0x7d;
wela=1;
wela=0; */
d2=0;
P0=table5[A3];
delay(1);
d2=1; //显示个位
//la=1;
//la=0;
/*P0=0x7b;
wela=1;
wela=0; */
}
voidmain()
{
uchara;
Init_Com();
do
{
tmpchange();
//delay(200);
for(a=1;a>0;a--)
{display(tmp());
}
}while(1);
}
Ⅶ 急求:基于MCS-51单片机的温度控制器汇编语言软件设计和硬件电路图
第2章 硬件电路详细设计
DS18B20的性能特点:1、采用单总线专用技术,既可通过串行口线,也可通过其它I/O口线与微机接口,无须经过其它变换电路,直接输出被测温度值(9位二进制数,含符号位),2、测温范围为-55℃-+125℃,测量分辨率为0.0625℃,3、内含64位经过激光修正的只读存储器ROM,4、适配各种单片机或系统机,5、用户可分别设定各路温度的上、下限,6、内含寄生电源。温度传感器DS18B20连接方式:在寄生电源供电方式下,DS18B20从单线信号线上汲取能量,在信号线DQ处于高电平期间把能量储存在内部电容里,在信号线处于低电平期间消耗电容上的电能工作,直到高电平到来再给寄生电源(电容)充电。如图2.3所示。
2.4 复位电路的设计
本设计采用人工复位,将一个按扭开关并联于上电自动复位电路按一下开关就在RST端出现一段时间的高电平,即器件复位。
2.5 晶振电路的设计
2.6 DS18B20温度传感器与单片机的接口电路
DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。
当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD端接地。由于单线制只有一根线,因此发送接口必须是三态的。
2.7 温度测量系统整体硬件电路
Wei1 BIT P3.0 ;;数码管第1位
Wei2 BIT P3.1 ;;数码管第2位
Wei3 BIT P3.2 ;;数码管第3位
Wei4 BIT P3.3 ;;数码管第4位
Dian EQU 20H ;;小数点状态状态保存字节
DisData1 EQU 30H ;;第1位显示数据
DisData2 EQU 31H ;;第2位显示数据
DisData3 EQU 32H ;;第3位显示数据
DisData4 EQU 33H ;;第4位显示数据
DisTime EQU 34H ;;设置显示几次后读取温度值
;;温度数据存储单元标号定义
TempL EQU 35H ;;温度高位
TempH EQU 36H ;;温度低位
;;与DS18B20通迅部分存储单元及标号定义
DS18B20 BIT P1.0 ;;与DS18B20通迅的位地址
RFail BIT 21H.0 ;;复位失败标记
Var EQU 22H ;;变量字节,温度数据处理时用到
Var2 EQU 3FH ;;变量字节
主程序部分:
ORG 00H
LJMP START
ORG 100H
START: ;;-----初始化
MOV SP,#60H ;;初始化堆栈指针
Set18B20:;;-----DS18B20初始化
;;DS18B20复位
ACALL Reset
JB RFail,LOOP ;;复位失败则直接跳至显示部分
;;对DS18B20发出Skip ROM命令
MOV A,#0CCH
ACALL Write
;;对DS18B20发出温度转换命令
MOV A,#44H
ACALL Write
SetDisT:MOV DisTime,#3 ;;设置下一个循环体的循环8次
LOOP:
ACALL Display ;;显示
JB RFail,Set18B20 ;;DS18B20复位失败时,在显示完一次后重新复位
DJNZ DisTime,LOOP
JNB DS18B20,$ ;;判断DS18B20是否已完成温度转换
ACALL GetTemp ;;从DS18B20读出温度值
ACALL DealTemp ;;温度值处理
ACALL SendDisDT ;;根据当前系统状态设置显示内容
SJMP SetDisT ;;;;;;;
;;根据当前状态给显示模块设置显示参数
SendDisDT:
MOV Dian,#7FH ;;最高位为0代表显示小数点
;;传送温度值
MOV A,TempH ;;送高位数据
MOV VAR,TempL ;;送低位数据
ACALL TransData
RET
;;A中保存高位值,Var中保存低位值
TransData:
;;取个位值
MOV B,#10
DIV AB
MOV DisData2,B
;;取十位值
JZ HavNot1 ;;判断商是否为0
MOV B,#10
DIV AB
MOV DisData3,B
JZ HavNot2 ;;判断商是否为0
MOV DisData4,A
SJMP XiaoShu ;;跳至百位符号处理部分
HavNot1:MOV DisData3,#10 ;;十位开始没有数字
HavNot2:MOV DisData4,#10 ;;百位开始没有数字
SignJudge:;;符号处理部分
JNB VAR.7,XiaoShu ;;当为负数显示符号
MOV A,#10
CJNE A,DisData3,BWSign
MOV DisData3,#11 ;;负号在十位
SJMP XiaoShu
BWSign:MOV DisData4,#11 ;;负号在百位
XiaoShu:;;小数处理部分,用查表法获取小数值,精确到小数点后1位
MOV A,VAR
ANL A,#0FH
MOV DPTR,#XSTab
MOVC A,@A+DPTR
MOV DisData1,A
RTransTemp:
RET
XSTab: DB 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9
DS18B20通迅模块组
-------复位模块
Reset: ;;3微秒高电平
SETB DS18B20
MOV R7,#250
CLR RFail ;;清0复位失败标记
CLR DS18B20
;;延迟501uS
DJNZ R7,$
SETB DS18B20 ;;释放总线(拉高数据线)
;;等待DS18B20作出复位成功反应,最大等待时间为69uS
MOV R7,#17
Wait:
JNB DS18B20,RReset ;;若DS18B20在作出复位成功反应,不再等待
DJNZ R7,Wait
SETB RFail ;;70uS内DS18B20作出复位成功反应,置1复位失败标记
RReset:
;;延迟350Us
MOV R7,#174
DJNZ R7,$
SETB DS18B20
RET
/
;;-------向DS18B20写一个字的模块,要写的内容提前装入ACC中
Write:
MOV R6,#8 ;写8位
WriteBit:
;;2微秒高电平
SETB DS18B20
MOV R7,#3
;;7微秒低电平
CLR DS18B20
DJNZ R7,$
;;ACC低位送至DS18B20
RRC A
MOV DS18B20,C
;;延迟60Us
MOV R7,#28
DJNZ R7,$
;;是否已写完8位
DJNZ R6,WriteBit
RWrite:
SETB DS18B20
RET
; /
;;-------从DS18B20读回一个字节的内容,读回的内容装入ACC中
Read:
MOV R6,#8 ;;读回8位
MOV A,#0 ;;读回的内容装入ACC中
ReadBit:
;;2微秒高电平
SETB DS18B20
MOV R7,#7
;;2微秒低电平
CLR DS18B20
NOP
;;16微秒高电平
SETB DS18B20
DJNZ R7,$
;;读回一位数据放入ACC中
MOV C,DS18B20
RRC A
;;延迟66Us
MOV R7,#33
DJNZ R7,$
;;是否已读完8位
DJNZ R6,ReadBit
RRead:
SETB DS18B20
RET
/
;;-------与DS18B20通迅,读回两字节温度值,并装入ACC中TempL和TempH中
GetTemp:
ACALL Reset ;;复位
JB RFail,RGetTemp ;;判断复位是否成功
;;复位成功
;;对DS18B20发出Skip ROM命令
MOV A,#0CCH
ACALL Write
;;对DS18B20发出读命令
MOV A,#0BEH
ACALL Write
;;从DS18B20读回低8位温度值
ACALL Read
MOV TempL,A
;;从DS18B20读回高8位温度值
ACALL Read
MOV TempH,A
ACALL Reset ;;复位
JB RFail,RGetTemp ;;判断复位是否成功
;;对DS18B20发出Skip ROM命令
MOV A,#0CCH
ACALL Write
;;对DS18B20发出温度转换命令
MOV A,#44H
ACALL Write
RGetTemp:
RET
温度数据处理模块
DealTemp:
;;将整数的二进制数部分移到一个字节,符号位和小数部分移到一个字节
MOV R1,#Var
MOV Var,TempH
MOV A,TempL
XCHD A,@R1 ;;符号位、小数部分至VAR(@R1),整数部分至ACC
SWAP A
;;整数部分处理
JNB Var.7,NotNeg ;;判断是否为负数
CPL A ;;为负数,取反后加1得其绝对值
;;小数部分取反
XRL Var,#1FH ;;
INC Var
NotNeg:
MOV TempH,A
MOV TempL,Var
RET
显示模块
-------显示DisData(30H)从开始的三个字节保存显示信息
Display:
MOV DPTR,#Tab
;;**显示小数部分
MOV A,DisData1
MOVC A,@A+DPTR
MOV P2,A
CLR Wei1
ACALL Delay
SETB Wei1
;;**显示个位
MOV A,DisData2
MOVC A,@A+DPTR
;;小数点处理
ANL A,Dian
MOV P2,A
CLR Wei2
ACALL Delay
SETB Wei2
;;**显示十位
MOV A,DisData3
MOVC A,@A+DPTR
MOV P2,A
CLR Wei3
ACALL Delay
SETB Wei3
;;**显示百位
MOV A,DisData4
MOVC A,@A+DPTR
MOV P2,A
CLR Wei4
ACALL Delay
SETB Wei4
RET
Tab: ;;0~9、空白、负号的编码
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH
;;延迟
Delay:
MOV R6,#6
DD1:MOV R5,#250
DJNZ R5,$
DJNZ R6,DD1
RET
END
这里面插不了图,我有这个的整套课程设计报告,想要找我,[email protected]