标题:
单片机温度传感器代码 显示到数码管上
[打印本页]
作者:
zxy990307
时间:
2019-4-18 17:31
标题:
单片机温度传感器代码 显示到数码管上
#include "STC15Fxxxx.h"
#include "INTRINS.H"
#include "stdio.h"
#include "string.h"
#include "DS18B20.h"
#include "HC595.H"
sbit LED1 = P6^0;
sbit SPEAKER = P1^3;
sbit SingleKey = P0^7;////把P0.7接地,设置P0.0~P0.3为4个独立按键
sbit KEY1 = P0^0;////P0.0为KEY1
sbit KEY2 = P0^1;////P0.1为KEY2
sbit KEY3 = P0^2;////P0.2为KEY3
sbit KEY4 = P0^3;////P0.3为KEY4
unsigned char displayDat[8]={0x00}; //显示单元数据,共8个数据和一个运算暂用
//Function Definition 函数声明
extern unsigned char display_index; //显示位索引
void Delaylong(unsigned int t);
//串行口初始化
void UartInit(void);
////////////////////////////////////////////////////
void Delaylong(unsigned int t)//
{
unsigned int i,j;
for(i=0;i<t;i++)
{
for(j=0;j<10;j++);
}
}
//////////////////////////////////////
void Beep(unsigned int dd)
{
// SPEAKER=1;
Delaylong(dd);
SPEAKER=0;
}
//////////////////////////////////////
void UartSend(unsigned char ch)
{
SBUF=ch;
while(!TI);
TI=0;
}
///////////////////////////////////////////////////////////////////////
// 串口初始化函数
///////////////////////////////////////////////////////////////////////
void UartInit(void) //9600bps@11.0592MHz
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设定定时器1为16位自动重装方式
TL1 = 0xE0; //设定定时初值
TH1 = 0xFE; //设定定时初值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
// ES = 1; //使能串口1中断
REN =1;
}
////////////////////////////
void PortInit()
{
P0M1 =0X00;
P0M0 =0X00;
// P1M1 =0X00;
// P1M0 =0X08;////P1.3强驱动模式,P1.3蜂鸣器
P2M1 =0X00;
P2M0 =0X00;
P3M1 =0X00;
P3M0 =0X00;
P4M1 =0X00;
P4M0 =0X00;
P5M1 =0X00;
P5M0 =0X00;
P6M1 =0X00;
P6M0 =0X00;
// P7M1 =0X00;
// P7M0 =0X10;////P7.4强驱动模式继电器
KEY1 =1;
KEY2 =1;
KEY3 =1;
KEY4 =1;
}
void Timer0Init(void) //1毫秒@11.0592MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xCD; //设置定时初值
TH0 = 0xD4; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器中断
}
/*******************************************************************************/
void main(void) //主函数
{
unsigned char i;
unsigned int temp,DS18B20_ID[8];
AUXR =0x00;
PortInit();
UartInit(); // 串口1//注意,下载程序选择晶振:11.0592MHz,波特率9600bps
Delaylong(500);
SingleKey = 0;////把P0.7接地,设置P0.0~P0.3为4个独立按键
Timer0Init();
UartSend(0xaa);
// Beep(5000);
for(i=0; i<8; i++) displayDat[i] = 0x10; //上电消隐
EA=1;
while(1)
{
// UartSend(display_index);
// if(KEY1==0) ////读出地址0x00处的一个字节
{
// Delaylong(30);
// while(KEY1==0);////等待按键抬起
temp = Conversion(ds18b20ReadTemp());
// UartSend(temp&&0xFF);
// UartSend((temp>>8)&&0xFF);
// EA=0;
displayDat[1] = temp / 10000;
displayDat[2] = temp % 10000 / 1000;
displayDat[3] = temp % 1000 / 100;
displayDat[5] = temp % 100 / 10;
displayDat[6] = temp % 10;
// EA=1;
// Beep(3000);
}
if(KEY2==0) ////
{
Delaylong(30);
while(KEY2==0);////等待按键抬起
ds18b20_reset();
delay_1ms(1);
ds18b20WriteByte(0x33);////读取DS18B20的8个字节ID
for(i=0;i<8;i++)
{
DS18B20_ID[i]=ds18b20ReadByte();
}
for(i=0;i<8;i++) UartSend(DS18B20_ID[i]);
Beep(3000);
}
// for(i=0;i<8;i++) //8位LED扫描控制
// {
// display(i,displayDat[i]);
// }
}
}//main
void timer0_Isr(void) interrupt 1 //using 1
{
// unsigned char i;
DisplayScan(); //1ms扫描显示一位
// B_1ms = 1; //1ms标志
}
复制代码
温度模块zxy.rar
2019-4-18 17:30 上传
点击文件名下载附件
下载积分: 黑币 -5
88.57 KB, 下载次数: 7, 下载积分: 黑币 -5
作者:
admin
时间:
2019-4-18 22:45
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1