河南机电高等专科学校。
c51程序设计》大作业。
设计题目: 单片机的数字温度计
班级: 通技092
学号: 090413238
姓名: 李盼盼。
成绩。2023年11月。
1 设计任务。
通过单片机驱动数字温度传感器进行温度数据的采集、读取、处理,并通过数码管显示出来,同时,扩张电路,通过rs-232串行口与pc机连接,将数据传送至pc机系统,方便温度的数据传输和统计工作。
2电路原理图。
3 系统流程图。
4 源程序。
基于51单片机的温度测量系统。
#include<>
#include<>
#define uint unsigned int
#define unchar unsigned char
uchartab=code
0 1 2 3 4 5 6 7 8 9 c */
sbit buz=p1^3;
sbit led-green=p3^6;
sbit led-red=p3^7;
sbit set=p1^0;
sbit down=p1^1;
sbit up=p1^2;
uchar disbuf[4];
uint mode,top=90,bottom=10;
int templ;
bit flag,kset-flag,kup-flag,kdown-flag;
sbit dp=p1^4;
viod delay(uint x);
延迟函数,x=1大约延迟1ms
void delay(unit x)
uint i, j;
for(i=0;i for(j=0;j<20;j++)
延迟函数,x=1大约延迟8us
void delay-us(unit x)
while(x--)
初始化函数。
void initl820()
dp=1;delay-us(1拉高一段时间。
dp=0;delay-us(60); 延迟480us以上。
dp=1;while(dp等待存在脉冲。
delay-us(10); 存在脉冲存活时间。
dp=1拉高总线。
写入指令函数,每次写入一个字节dat
void write(uchar dat)
uchar i;
for(i=0;i<8;i++)
elsedat>>=1;
dp=1;delay-us(1);
return(dat);
读取温度函数,返回温度的绝对值,并标注flag,flag=1表示负,flag=0表示正。
uint read temperature()
uint tem;
float m;
initl820();
write(0xcc跳过读rom
write(0x44启动温度转换。
init1820();
write(0xcc);
write(0xbe读取温度寄存器。
temp=read();
if(temp>0xfff)
elsevoid deal()
temp1=read temperature();
disbuf[0]=temp1/1000;
disbuf[1]=(temp1%1000/100);
disbuf[2]=(temp1%100/10);
disbuf[3]=(temp1%10);
void dealset()
mode++;
if (mode==3)
mode=0;
void dealup()
if (mode==1)
top=top+1;
if (top>=120)
top=120;
if (mode==2)
bottom=bottom+1;
if (bottom>=30)
bottom=30;
void dealdown()
if(mode==1)
if(mode==2)
调试键盘处理函数。
void kdeal()
if((set==0)&&kset-flag==0)) set为p2^0端口,kset-flag为标志位。
if(set)kset-flag=0;
if((up=0)&&kup-flag==0))
delay(5);
if(down==0)
dealdown();
kdown-flag=1;
if(down)kdown-flag=0;
void init()
tmod=0x01;
tho=(65536-50000)/256;
tlo=(65536-50000)%256;
ea=1;eto=1;
tro=0;
void mian()
uchar
int();
while(1);
p1=0x00;
p0=0xff;
delay(500);
kdeal();
if(mode==0)
a=0xfe;
for(i=0;i<4;i++)
if(i==1)
p0=tab[disbuf[i]]+0x80;
elsep0=tab[disbuf[i]];
p1=a;kdeal();
deal();
nop-()
a=-erol-(a,1);
p1=0xff;
if((temp1(top*100)))
tro=1;
led-green=1;
elsetro=0;
led-green=0;
led-red=1;
buz=1if(mode==1)
if((top/100)>=1)
p0=tab[top/100];
p2=0xfd;
elsep0=0x00;
p2=0xff;
kdeal ()
p2=0xff;
p0=tab[(top%100)/10];
p2=0xfb;
kdeal();
p2=0xff;
p0=tab[top%10];
p2=0xf7;
kdeal();
p2=0xff;
if(mode==2)
p0=tab[bottom/10];
p2=0xfe;
kdeal();
p2=0xff;
p0=tab[bottom%10];
p2=0xfd;
kdeal();
p2=0xff;
void timer0() interrupt 1using 1
uchar count;
tho=(65536-50000)/256;
tlo=(65536-50000)%256;
count++;
if(count==10)
led-red=~led-red;
buz=~buz;
if (count==20)
count=0;
led-red=~led-red;
buz=~buz;
参考文献。
C51大作业
河南机电高等专科学校。c51程序设计 大作业。设计题目 报警器 班级。学号。姓名。成绩。2012年5月。报警器。一设计任务。利用开关控制报警器,当开关闭合报警信号报警,当开关断开告警信号停止,并编写程序。二设计原理。500hz音频信号的周期为2ms,信号电平为每1ms变反1次 1khz的信号周期为1...
C51大作业
c51程序设计 大作业。设计题目。班级。学号。姓名。成绩。1 设计任务。本次密码锁的设计,其主要具有如下功能 1 设置6位密码,密码通过键盘输入,弱密码正确,则将锁打开。2 密码可以由用户自己修改设定 6位密码 密码输入正确才能修改密码。修改密码之前必须再次输入密码,再输入新密码之前需要二次确认,以...
C51大作业
河南机电高等专科学校。c51程序设计 大作业。设计题目 数字示波表 班级 应电 092 学号 090415119 姓名 吴君堂 成绩。2011年11月。1 设计任务。1 用单片机stc12c5a60s2为主控芯片设计一数字示波表。2 能对连续信号进行采集并实时显示,且具有锁存功能。3 测量电压幅度范...