【精选】都是8被0程序.docVIP

  • 0
  • 0
  • 约3.53千字
  • 约 11页
  • 2018-03-26 发布于贵州
  • 举报
【精选】都是8被0程序

#include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int sbit DS=P3^3; //定义DS18B20接口 int temp; uchar flag1; void display(unsigned char *lp,unsigned char lc);//数字的显示函数;lp为指向数组的地址,lc为显示的个数 void delay();//延时子函数,5个空指令 code unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x08,0x00}; //共阴数码管 0-9 - _ 空 表 unsigned char l_tmpdate[8]={0,0,10,0,0,0,0,0};//定义数组变量,并赋值1,2,3,4,5,6,7,8,就是本程序显示的八个数 int tmp(void); void tmpchange(void); void tmpwritebyte(uchar dat); uchar tmpread(void); bit tmpreadbit(void); void dsreset(void); void delayb(uint count); void main() //主函数 { uchar i; int l_tmp; while(1) { tmpchange(); //温度转换 l_tmp=tmp(); if(l_tmp0) l_tmpdate[0]=10; //判断温度为负温度,前面加- else { l_tmpdate[0]=temp/1000; //显示百位,这里用1000,是因为我们之前乖以10位了 if(l_tmpdate[0]==0) l_tmpdate[0]=12;//判断温度为正温度且没有上百,前面不显示 } l_tmp=temp%1000; l_tmpdate[1]=l_tmp/100;//获取十位 l_tmp=l_tmp%100; l_tmpdate[2]=l_tmp/10;//获取个位 l_tmpdate[3]=11; l_tmpdate[4]=l_tmp%10;//获取小数第一位 for(i=0;i10;i++){ //循环输出10次,提高亮度 display(l_tmpdate,5); } } } void display(unsigned char *lp,unsigned char lc)//显示 { unsigned char i; //定义变量 P2=0; //端口2为输出 P1=P10xF8; //将P1口的前3位输出0,对应138译门输入脚,全0为第一位数码管 for(i=0;ilc;i++){ //循环显示 P2=table[lp[i]]; //查表法得到要显示数字的数码段 delay(); //延时5个空指令 if(i==7) //检测显示完8位否,完成直接退出,不让P1口再加1,否则进位影响到第四位数据 break; P2=0; //清0端口,准备显示下位 P1++; //下一位数码管 } } void delay(void) //空5个指令 { _nop_();_nop_();_nop_();_nop_();_nop_(); } void delayb(uint count) //delay { uint i; while(count) { i=200; while(i0) i--; count--; } } void dsreset(void) //DS18B20初始化 { uint i; DS=0; i=103; while(i0)i--; DS=1; i=4; while(i0)i--; } bit tmpreadbit(void) // 读一位 { uint i; bit dat; DS=0;i++; //小延时一下 DS=1;i++;i++; dat=DS; i=8;while(i0)i--; return (dat); } uch

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档