单片机温度显示文档格式.docx

上传人:b****1 文档编号:608309 上传时间:2023-04-29 格式:DOCX 页数:27 大小:151.85KB
下载 相关 举报
单片机温度显示文档格式.docx_第1页
第1页 / 共27页
单片机温度显示文档格式.docx_第2页
第2页 / 共27页
单片机温度显示文档格式.docx_第3页
第3页 / 共27页
单片机温度显示文档格式.docx_第4页
第4页 / 共27页
单片机温度显示文档格式.docx_第5页
第5页 / 共27页
单片机温度显示文档格式.docx_第6页
第6页 / 共27页
单片机温度显示文档格式.docx_第7页
第7页 / 共27页
单片机温度显示文档格式.docx_第8页
第8页 / 共27页
单片机温度显示文档格式.docx_第9页
第9页 / 共27页
单片机温度显示文档格式.docx_第10页
第10页 / 共27页
单片机温度显示文档格式.docx_第11页
第11页 / 共27页
单片机温度显示文档格式.docx_第12页
第12页 / 共27页
单片机温度显示文档格式.docx_第13页
第13页 / 共27页
单片机温度显示文档格式.docx_第14页
第14页 / 共27页
单片机温度显示文档格式.docx_第15页
第15页 / 共27页
单片机温度显示文档格式.docx_第16页
第16页 / 共27页
单片机温度显示文档格式.docx_第17页
第17页 / 共27页
单片机温度显示文档格式.docx_第18页
第18页 / 共27页
单片机温度显示文档格式.docx_第19页
第19页 / 共27页
单片机温度显示文档格式.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机温度显示文档格式.docx

《单片机温度显示文档格式.docx》由会员分享,可在线阅读,更多相关《单片机温度显示文档格式.docx(27页珍藏版)》请在冰点文库上搜索。

单片机温度显示文档格式.docx

1"

2"

3"

4"

5"

6"

7"

8"

9"

不亮"

-"

ucharcodescan_con[4]={0x8f,0x4f,0x2f,0x1f};

//列扫描控制字

//显示单元数据,共4

uchardatatemp_data[2]={0x00,0x00};

//读出温度暂放

uchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};

个数据和一个运算暂用

/*****************11us

延时函数*************************/

voiddelay(uintt){

for(;

t>

0;

t--);

}

//4位LED扫描控制

//位选

//数据显示

//小数点显示

scan()

{chark;

for(k=0;

k<

4;

k++)

{

Disdata=0xff;

discan=scan_con[k];

Disdata=dis_7[display[k]];

if(k==1)

{DIN=0;

delay(300);

}}////

/****************DS18B20复位函数************************/ow_reset(void)

charpresence=1;

while(presence)

DQ=0;

DQ=1;

delay(45);

//延时500us

presence=~DQ;

//拉高电平

/////****************DS18B20写命令函数************************///向1-WIRE总线上写1个字节

voidwrite_byte(ucharval){

uchari;

for(i=8;

i>

i--)

_nop_();

//从高拉倒低

//最低位移出//66us//右移1位

//5us

DQ=val&

0x01;

delay(6);

val=val/2;

delay

(1);

**************DS18B20

读1字节函数************************/

//从总线上取1个字节

ucharread_byte(void)

ucharvalue=0;

value>

>

=1;

//4us

if(DQ)

{value|=0x80;

delay(6);

//66us}

return(value);

//write_byte(SKIPROM_18b20_CM);

//发命令

//write_byte(CONVERTT_CM);

//发转换命令

//delay(200);

ow_reset();

write_byte(SKIPROM_18b20_CM);

//发命令

//二进制高字节的低半字节和低字节的高半字节组成一字节,这个

//字节的二进制转换为十进制后,就是温度值的百、十、个位值,而剩//下的低字节的低半字节转化成十进制后,就是温度值的小数部分

*****************************************************

work_temp(uinttem){

ucharn=0;

if(tem>

6348)

tem=65536-tem;

//温度值正负判断

n=1;

}//负温度求补码,标志位置1

//取小数部分的值

//存入小数部分显示值

//取中间八位,即整数部分的值

//取百位数据暂存

//取后两位数据暂存

//取十位数据暂存

if(!

display[3])

display[3]=0x0a;

//最高位为0时不显示

display[2])

display[2]=0x0a;

//次高位为0时不显示

if(n)

//负温度时最高位显示"

display[3]=0x0b;

主函数**********************

//初始化端口

//开机显示"

0000"

//开机先转换一次//SkipROM//发转换命令//开机显示"

//处理温度数据

//显示温度值

main()

uinth;

Disdata=0xff;

discan=0xff;

for(h=0;

h<

h++)

{display[h]=0;

write_byte(CONVERTT_CM);

for(h=0;

100;

{scan();

while

(1)

work_temp(read_temp());

scan();

结束

单片机温度采集系统的流程图总编程~~~

sbitDQ=P3A5;

//数据传输线接单片机的相应的引脚

unsignedchartempL=O;

//设全局变量

unsignedchartempH=O;

bitfg=1;

〃温度正负标志

//这个延时程序的具体延时时间是time="

i"

*8+10,适用于小于2ms的延时

〃************************************************************

voiddelay(unsignedchari)

for(i;

i--);

**********************************************************

//************************************************************

/*voiddelay1ms()

unsignedchari;

for(i=124;

//延时124*8+10=1002us

}*/

Init_DS18B20(void)

unsignedcharx=0;

//DQ先置高

delay(8);

//稍延时

//发送复位脉冲

delay(80);

//延时(>

480us)

//拉高数据线

delay(5);

//等待(15~60us)

x=DQ;

//用X的值来判断初始化有没有成功,18B20存在的话X="

,否则X="

delay(20);

ReadOneChar(void)//主机数据线先从高拉至低电平1us以上,再使数据线升为高电平,从而产生读信号

unsignedchari=0;

//每个读周期最短的持续时间为60us,各个读周期之间必须有1us以上的高电平恢复期

unsignedchardat=0;

for(i=8;

i--)//一个字节有8位

dat>

dat|=0x80;

delay(4);

return(dat);

WriteOneChar(unsignedchardat)

//数据线从高电平拉至低电平,产生写起始信号。

15us之内将所需写的位送到数据线上,

i--)//在15~60us之间对数据线进行采样,如果是高电平就写1,低写0发生。

//在开始另一个写周期前必须有1us以上的高电平恢复期。

DQ=dat&

0x01;

//读温度值(低位放tempL;

高位放tempH;

voidTempcor(void)

Init_DS18B20();

//初始化

WriteOneChar(0xcc);

//跳过读序列号的操作

WriteOneChar(0x44);

//启动温度转换

voidReadTemp(void)

WriteOneChar(0xbe);

//读温度寄存器(头两个值分别为温度的低位和高位)tempL=ReadOneChar();

//读出温度的低位LSBtempH=ReadOneChar();

//读出温度的高位MSB

tempL=~tempL+1;

tempH=~tempH;

//补码转换,取反加一

fg=0;

//读取温度为负时fg="

}}

/*ReadTemperature(void)

delay(200);

//转换需要一点时间,延时

if(tempH>

0x7f)//最高位为1时温度是负

//补码转换,取反加一

tempH=~tempH;

//主程序

/*floatTemperature()

floattvalue;

ReadTemperature();

tvalue=tempL/16+tempH*16+(tempL&

0x0f)*0.0625;

if(!

fg)tvalue=-tvalue;

fg=1;

return(tvalue);

floatTemperature()

floattemp;

ReadTemp();

temp=tempL/16+tempH*16+(tempL&

if(fg)

return(temp);

else

return(-temp);

DS18B20温度采集,通过调用Temperature()函数可得到温度数据

51单片机怎样设按键切换数码管显示时间和日期?

在51单片机中6位共阳数码管显示中,怎样设置某一按键,按下第一次从时间显示方式转为日期显示方式,按第二次从日期显示方式转为星期显示方式,按第三次显示温度,按第四次返回显示日期?

你要设置一个标志变量,如flag,在进入按键程序后,flag++;

然后加个控制判断语句

if(flag>

3)

flag=0;

这样,在显示模块中再加入开关语句;

switch(flag)

case0:

...显示时间..

case1:

...显示日期。

.

case2:

...显示温度。

基于单片机的带时间显示和紧急控制的交通灯的显示

晶振频率为11.0592MHZ

;

用定时器1延时,外部中断0接紧急控制

R0为100MS延时常数,R2为状态延时常数

8279控制数码管显示时间

用P1口控制双色灯

此程序写于2007-7-6,作者:

徐学军

Z8279EQU0FF82H

8279状态/命令口地址

D8279EQU0FF80H

8279数据口地址

LEDMODEQU00H;

左边输入八位字符显示

外部译码键扫描方式,双键互锁

LEDFEQ

EQU

33H

扫描速率

LEDCLS

0C1H

清除显示RAM

LEDWR0

80H

设定的将要写入的显示RAM地址

ORG

0000H

LJMPSTART

0中断入口地址

START:

LJMPINT_0

001BH

T1

LJMPINT_T1

0040H

MOVSP,#60H

MOV

TMOD,#10H

J

SETBEX0

SETBIT0

SETBEA

INT0

中断有效

TL1,#00H

TH1,#4cH

R0,#2

0003H

INT

中断入口地址

T1为方式1

时50mS常数

启动T1

时100mS常数

SETBTR1

SETBET1setb设置定时器1的中断优先级高于外部中断

pt1

必须

LCALLINIT8279

初始化

8279

LCALLSTATUS0;

CIRCLE:

LCALLSTATUS1;

LCALLSTATUS2;

LCALLSTATUS3;

LCALLSTATUS4;

LJMPCIRCLE

INT_0:

PUSHPSW;

PUSH2

PUSH90H

clrex0

MOVP1,#0FH

MOVR2,#100;

LCALLDELAY_DISPLAY

setbex0

初始状态(都是红灯)

南北绿灯,东西红灯南北绿灯闪转黄灯,东西红灯南北红灯,东西绿灯南北红灯,东西绿灯闪转黄灯

保护现场

南北,东西都亮红

延时10秒

POP90H;

恢复现场

POP2

POPPSW

RETI

INT_T1:

PUSHACC

PUSHPSW

CLRTR1

MOVTL1,#00H

时50mS常数

MOVTH1,#4CHSETBTR1

DJNZR0,EXIT

MOVR0,#2

时100ms常数

DECR2

EXIT:

POPACC

STATUS0:

;

南北红灯,东西红灯

MOVR2,#10;

延时1秒

RET

STATUS1:

南北绿灯,东西红灯

MOVP1,#96H;

南北绿灯,东西红

MOVR2,#200;

延时20秒

STATUS2:

南北绿灯闪转黄灯,东西红

MOVR3,#03H;

绿灯闪3次

FLASH:

MOVP1,#9FH

MOVR2,#03H

MOVP1,#96H

DJNZR3,FLASH

MOVP1,#06H;

南北黄灯,东西红

STATUS3:

南北红灯,东西绿灯

MOVP1,#69H

MOVR2,#200

LCALLDELAY

DISPLAY

STATUS4:

南北红灯,东西绿灯闪转黄灯

MOVR3,#03H

FLASH1:

MOVP1,#6FH

DJNZR3,FLASH1

MOVP1,#09H

南北红灯,东西黄

MOVR2,#10

NOP

INIT8279:

始化子程序

PUSH

DPH

保存现场

DPL

ACC

DPTR,#Z8279

延时

A,#LEDMOD

置8279工作方式

MOVX@DPTR,A

MOVA,#LEDFEQ;

置键盘扫描速率

MOVA,#LEDCLS;

清除LED显示

LCALLDELAY;

延时

POPACC;

恢复现场

POPDPL

POPDPH

显示字符子程序

输入:

R4,位置R5,值

DISLED:

PUSHDPH;

PUSHDPL

MOVA,#LEDWR0;

置显示起始地址

ADDA,R4;

加位置偏移量

MOVDPTR,#Z8279

MOVX@DPTR,A;

设定显示位置

MOVDPTR,#LEDSEG;

置显示常数表

起始位置

MOVA,R5

MOVCA,@A+DPTR;

查表

MOVDPTR,#D8279

显示数据

DELAY:

延时子程序

PUSH0;

PUSH1

MOV0,#0H

DELAY1:

MOV1,#0H

DJNZ1,$

DJNZ0,DELAY1

POP1;

POP0

DELAY_DISPLAY:

延时和显示时间子程

PUSH0

pushacc

loopwait:

movb,#10

mova,2

divab

movb,#10

movr4,#1

movr5,a

LCALLDISLED;

显示秒高位

movr4,#0

movr5,b

显示秒低位

jnzloopwait;

延时等待

popacc

POP1

LEDSEG:

DB

3FH,06H,5BH,4FH,66H,6DH,7DH,07H;

'

0,1,2,3,4,5,6,7'

DB

7FH,6FH,77H,7CH,39H,5EH,79H,71H;

8,9,A,B,C,D,E,F'

END

单片机led显示程序C语言的

悬赏分:

20|解决时间:

2010-6-1916:

30|提问者:

askkai1989

利用P1口和P3口控制8个共阴极LED显示器显示8个字符数据(自定义显示内容)。

非常着急,希望给予有帮助的回复和主要的程序

问题补充:

主要程序是实验用,程序我都不会,希望可以按照我说的内容给点

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2