📄 wendu.c
字号:
//难点在于如何输出正确的数据
//问题是 怎么让串口发送一个数组数据??????????
#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char
sbit dq=P3^3;
sbit beep=P3^7;
uchar u[]={0x00,0x00,0x00,0x00};
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};
uchar code xiaoshu_table[]={0x00,0x06,0x12,0x18,0x25,0x31,0x37,0x43,0x50,0x56,0x62,0x68,0x75,0x81,0x87,0x93};
//uchar code baojingshujv[]="wendudaole";
uchar temp;
uchar xiaoshu;
uchar baojing;
void delay(uchar i) //90=592us;8=64us
{
while(i--);
}
void us6delay()
{
_nop_();
_nop_();
}
void xianshi()
{ uchar gewei,shiwei,ling1,ling2,q=10;
gewei=temp%10;
shiwei=temp/10;
ling1=xiaoshu/10;
ling2=xiaoshu%10;
baojing=gewei+shiwei*10;
while(q--){
P2=0xfd;
P0=(table[gewei]&0x7f);
delay(80);
P2=0xfe;
P0=(table[shiwei]);
delay(80);
/*********
小数部分
**********/
P2=0xfb;
P0=(table[ling1]);
delay(80);
P2=0xf7;
P0=(table[ling2]);
delay(80);
}
}
bit reset()
{
bit flag;
dq=1;
_nop_();
dq=0;
delay(100);
dq=1;//释放总线
delay(8);
flag=dq;
delay(100); //没延时就会一直处于低电平这里错了
return flag;
}
void write_byte(uchar date) //低字节开始
{ uchar i;
for(i=8;i>0;i--)
{ dq=1;
_nop_();
dq=0;
_nop_();
if(date&0x01)
dq=1;
else dq=0;
delay(8);
date>>=1;
}
}
uchar read_byte()
{ uchar i,temp;
for(i=8;i>0;i--)
{ temp>>=1;
dq=1;
_nop_();
dq=0;
_nop_();
dq=1; //释放总线
us6delay();
if(dq)
temp|=0x80;
delay(8);
}
return temp;
}
/***************************
数据转换是以16进制补码的方式存放的,有2个字节。是BCD码存放的。
**************************/
void fengming()
{ uchar i;
for(i=180;i>0;i--)
{ beep=!beep;
delay(20);
}
}
uchar u123()
{
while(reset()); //一直到产生低字节
write_byte(0xcc);//跳过rom
write_byte(0x44);//开始转化温度
while(reset());
write_byte(0xcc);
write_byte(0xbe);
u[0]=read_byte();
u[1]=read_byte();
u[2]=(u[0]>>=4)|(u[1]<<=4);
temp=u[2];
u[3]=u[0]&0x0f;
xiaoshu=xiaoshu_table[u[3]%10];
return temp;
}
void inti_chuankou()
{ EA=1;
ES=1;
//IE=0x90;
TMOD=0x20; //定时器1工作于1
TH1=0xfa;
TL1=0xfa;
TR1=1;
SCON=0x40;
PCON=0x80;
}
void main()
{
inti_chuankou();
while(1)
{
u123();
xianshi();
if(baojing>=33)
{ fengming();
SBUF='a';
}
}
}
void time0() interrupt 4
{ if(TI)
TI=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -