资源描述:
《单片机数码管显示原理图和程序.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、......最近天气热了,想要是做个能显示温度的小设备就好了,于是想到DIY个电子温度计,网上找了很多资料,结合自己的材料,设计了这个用单片机控制的实时电子温度计。作为单片机小虾的我做这个用了2天时间,当然是下班后,做工不行见谅了。主要元件用到了单片机STC89C54RD+,DB18B20温度传感器,4为共阳数码管,PNPS8550三极管等。先上原理图:洞洞板布局图:然后就是实物图了:附上源程序:程序是别人写的,我只是自己修改了下,先谢谢原程序者的无私奉献。#include"reg52.h"#defineucharunsignedchar#defineuintunsignedints
2、bitDQ=P3^4;//温度数据口sbitwx1=P2^0;//位选1sbitwx2=P2^1;//位选2sbitwx3=P2^2;//位选3sbitwx4=P2^3;//位选4c............unsignedinttemp,temp1,temp2,xs;ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,//共阳数码管0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6};/******延时程序*******/voiddelay1(unsignedintm){unsignedinti,j;for(i=m;i>0
3、;i--)for(j=110;j>0;j--);}voiddelay(unsignedintm)//温度延时程序{while(m--);}voidInit_DS18B20(){unsignedcharx=0;DQ=1;//DQ复位ds18b20通信端口delay(8);//稍做延时DQ=0;//单片机将DQ拉低delay(80);//精确延时大于480usDQ=1;//拉高总线delay(4);x=DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败delay(20);}/***********ds18b20读一个字节**************/ucharReadOneCh
4、ar(){unsignedchari=0;c............unsignedchardat=0;for(i=8;i>0;i--){DQ=0;//高电平拉成低电平时读周期开始dat>>=1;DQ=1;//给脉冲信号if(DQ)dat
5、=0x80;//delay(4);}return(dat);}/*************ds18b20写一个字节****************/voidWriteOneChar(unsignedchardat){unsignedchari=0;for(i=8;i>0;i--){DQ=0;//从高电平拉至低电平时,写周期的开始DQ=dat&0x0
6、1;//数据的最低位先写入delay(5);//60us到120us延时DQ=1;dat>>=1;//从最低位到最高位传入}}/**************读取ds18b20当前温度************/voidReadTemperature(){unsignedchara=0;unsignedb=0;unsignedt=0;Init_DS18B20();WriteOneChar(0xCC);//跳过读序号列号的操作/WriteOneChar(0x44);//启动温度转换delay(5);//thismessageisweryimportantInit_DS18B20();Wri
7、teOneChar(0xCC);//跳过读序号列号的操作WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度/c............delay(5);a=ReadOneChar();//读取温度值低位/b=ReadOneChar();//读取温度值高位/temp1=b<<4;//高8位中后三位数的值temp1+=(a&0xf0)>>4;//低8位中的高4位值加上高8位中后三位数的值temp1室温整数值temp2=a&0x0f;//小数的值temp=((b*256+a)>>4);//当前采集温度值除16得实际温度值zhenshuxs=temp
8、2*0.0625*10;//小数位,若为0.5则算为5来显示xs小数xiaoshu}voidwenduxianshi(){wx1=0;P0=table[temp/10];//显示百位delay1(5);wx1=1;wx2=0;P0=table[temp%10]+0x80;//显示十位加上0x80就显示小数点了。delay1(5);wx2=1;wx3=0;P0=table[xs%10];//显示个位delay1(5);wx3=1;wx4=0;P0=table