C51大作业

发布 2023-05-17 06:31:28 阅读 3077

河南机电高等专科学校。

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 测量电压幅度范...