📄 temp.c
字号:
#include <reg52.h>
#include <iccard.h>
#include<stdio.h>
//bit key_flag;
//uchar key_value;
#define uchar unsigned char
#define uint unsigned int
#define nop() _nop_();_nop_();
uint16 temper;
uchar fuhao;
unsigned char tmp;
sbit key0=P1^0;
//sbit dat_1820=P2^4;
sbit CLK=P0^6;
sbit DAT=P0^4;
sbit DCLK=P0^7;
//sbit CS=P2^3;
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};//0-9,-,全灭
void send_char(unsigned char txd);
//串口初始化
void initcom(void)
{
TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率
TH1 = 0x0F3; // 波特率2400
TL1 = 0x0F3;
SCON = 0x50; // 设定串行口工作方式
PCON &= 0xef; // 波特率不倍增
ES=1; //允许串行口中断
TR1 = 1; // 启动定时器1
IE = 0x00; // 禁止任何中断
}
void send_char(unsigned char txd)
// 传送一个字符
{
SBUF = txd;
while(!TI); // 等特数据传送
TI = 0; // 清除数据传送标志
}
void delay(uchar x)//系统延时
{
while(x--);
}
void delayns()//延时
{
uchar i;
for(i=0;i<10;i++);
}
void delayms(uint32 x)//长延时
{
uint32 i;
for(;x>0;x--)
for(i=5000;i>0;i--);
}
////--------------------------------------------------
//=====================================================
void sendbyte(uchar byte)
{
uchar num,i;
num=tab[byte];
for(i=0;i<8;i++)
{
CLK=0;
DAT=num&0x80;
num=num<<1;
CLK=1;
}
// RCLK=0;
// nop();
// nop();
// RCLK=1;
}
void out595(void)
{
DCLK=0;
delay(29);
// nop();
DCLK=1;
}
void display(uchar number)
{
uchar sw,gw;
sw=number/10;
gw=number-10*sw;
sendbyte(gw);
sendbyte(sw);
out595();
}
/*****************LCD程序END****************/
uchar init_1820()//初始化1820
{
dat_1820=1;
delay(8);
dat_1820=0;
delay(80);
dat_1820=1;
delay(14);
if(dat_1820==0)
{
delay(20);
return(1);
}
else return(2);
dat_1820=1;
delay(20);
}
void wr_1820(uchar x)//写入1字节数据
{
uchar i;
for(i=8;i>0;i--)
{
dat_1820=1;
delay(1);
dat_1820=0;
delay(1);
if(x&0x01)dat_1820=1;
else dat_1820=0;
delay(20);
dat_1820=1;
// delay(1);
x>>=1;
}
}
void rd_1820()//读1字节数据
{
uint16 i;
uchar j;
i=0;
for(j=16;j>0;j--)
{
dat_1820=1;
delay(1);
dat_1820=0;
delay(1);
dat_1820=1;
if(dat_1820)
{
i>>=1;
i=i|0x8000;
}
else i>>=1;
delay(20);
dat_1820=1;
}
temper=i;
}
void get_temper()//进行温度测量并取温度数据
{
uchar i;
i=init_1820();//
if(i==1)//判断1820是否存在
{
wr_1820(0xcc);//跳过rom
wr_1820(0x44);//发送温度转换指令
delayms(3);
init_1820();
wr_1820(0xcc);//跳过rom
wr_1820(0xbe);//去温度数据
rd_1820();//读出数据
}
}
void init_sys()//系统初始化设置
{
// P0=0;//P0口清零
P2=0x86;//屏蔽其它模块
P1=P1&0X01;;//
}
void main()
{ uchar t;
uchar sw,gw,k;
initcom();
init_sys();
while(1)
{//display(11);
get_temper();
if(!key0)
{
delayms(5);
if(!key0)
{
t=temper/16;
//k=(t&0xf0)*16+(t&0x0f);
k=(temper)/16;
/*{
if(k>=16)
{k+=16;}
if(k>=32)
{k+=32;}
if(k>=48)
{k+=48;}
if(k>=64)
{k+=64;}
}*/
sw=k/10;
gw=k%10;
send_char(t);
display(k);
}
}
/* if(RI)
{RI=0;
tmp=SBUF;
if(tmp==0x01)
{ get_temper();
delay(5);
t=temper/16;
send_char(t);
}
}*/
else delayms(5);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -