完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
//部分代码修改自网络 18B20数码管显示温度
#include #define uchar unsigned char #define uint unsigned int ***it DS1=P3^4; ***it DS2=P3^5; ***it DS3=P3^6; ***it ledlk=P1^0; ***it smglk=P1^1; ***it smgbitlk=P1^2; //****************************动态扫描多个管脚数据*************************************** #define DatCount 3 //管脚个数 uint TMDAT[DatCount] = {1,2,3}; //各个管脚的标志数据 uint TMP[DatCount]; //读取的所有测试点的温度 uchar SIGN[DatCount]; //结果是否为负温,“+”为正温,“-”负温。 uint set1820_ss=3; uint set1820_sg=0; uint set1820_xs=2; uint temp; uchar a,flag; void delay(uint ms) { uint i,j; for (j=0;j } void delayus(uint us) { uint i,j; for (j=0;j } void showsmg(uchar smg,uchar value) { uchar code tablesmg[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; uchar code table[]={ 0x3f , 0x06 ,0x5b , 0x4f , 0x66 , 0x6d , 0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c , 0x39 , 0x5e , 0x79 , 0x71 , 0x00,0x80}; smglk=1; P2=tablesmg[smg]; smglk=0; smgbitlk=1; P2=table[value]; smgbitlk=0; delay(3); } void dsreset1(uint flag) { switch (flag) { case 1: { DS1=0; delayus(10); DS1=1; delayus(10); }; case 2: { DS2=0; delayus(10); DS2=1; delayus(10); }; case 3: { DS3=0; delayus(10); DS3=1; delayus(10); }; //default: } } bit tmpreadbit1(uint flag) { // uint i; bit dat; switch (flag) { case 1: { DS1=0; DS1=1; dat=DS1; delayus(1); return (dat); }; case 2: { DS2=0; DS2=1; dat=DS2; delayus(1); return (dat); }; case 3: { DS3=0; DS3=1; dat=DS3; delayus(1); return (dat); }; //default: } } uchar tmpread1(uint flag) { uchar i,j,dat; dat=0; for(i=1;i<=8;i++) { j=tmpreadbit1(flag); dat=(j<<7)|(dat>>1); } return(dat); } void tmpwritebyte1(uchar dat,uint flag) { uint i; uchar j; bit testb; for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; switch (flag) { case 1: { if(testb) { DS1=0; i++;i++; DS1=1; i=8;while(i>0)i--; } else { DS1=0; i=8;while(i>0)i--; DS1=1; i++; //i++; } }; case 2: { if(testb) { DS2=0; i++;i++; DS2=1; i=8;while(i>0)i--; } else { DS2=0; i=8;while(i>0)i--; DS2=1; i++; //i++; } }; case 3: { if(testb) { DS3=0; i++;i++; DS3=1; i=8;while(i>0)i--; } else { DS3=0; i=8;while(i>0)i--; DS3=1; i++; //i++; } }; //default: } } } void tmpchange1(void) { uchar i; for(i=0;i dsreset1(TMDAT); delay(1); tmpwritebyte1(0xcc,TMDAT); tmpwritebyte1(0x44,TMDAT); } } void tmp1() { float tt; uchar a,b; uchar i; for(i=0;i dsreset1(TMDAT); delay(1); tmpwritebyte1(0xcc,TMDAT); tmpwritebyte1(0xbe,TMDAT); a=tmpread1(TMDAT); b=tmpread1(TMDAT); if((b & 0xF8) == 0xF8) { SIGN=0x2D; TMP=b; TMP<<=8; TMP=TMP|a; TMP=~TMP+1; tt=TMP*0.0625; TMP=tt*10+0.5; } else if((b | 0x07) == 0x07) { SIGN=0x2B; TMP=b; TMP<<=8; TMP=TMP|a; tt=TMP*0.0625; TMP=tt*10+0.5; } } } /******** void readrom1() { uchar sn1,sn2; dsreset1(); delay(1); tmpwritebyte1(0x33); sn1=tmpread1(); sn2=tmpread1(); } void sx() { if(temp/100>set1820_ss) { ledlk=1; P2=0xf0; //smglk=1; // P2=0xff; //ledlk=0; } else if ((temp/100==set1820_ss)&&(temp%100/10>set1820_sg)) { ledlk=1; P2=0xf0; //smglk=1; } else if ((temp/100==set1820_ss)&&(temp%100/10==set1820_sg)&&(temp%100%10>=set1820_xs)) { ledlk=1; P2=0xf0; //smglk=1; } else { P2=0xff; //beep=1; ledlk=0; //smglk=0; } } *************************/ void main() { uint p; uchar j; // uchar str[18] ; ledlk=0; TMOD=0x20;//设定定时器为方式2 可自动再装入的8位定时器 TH1=0xfd;//装入初值 TL1=0xfd;//装入初值 TR1=1;//设定定时器开始工作 SM0=0;//设定串口工作方式1 10位异步收发器 8位数据 SM1=1;//设定串口工作方式1 10位异步收发器 8位数据 REN=1;//允许串行接收位。由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。 EA=1;//开始总中断 ES=1;//串行口中断允许位;(开启) PCON=0x80;//设定串行口波特率 // ledlk=1; smgbitlk=0; smglk=0; while(1) { for (j=0;j tmpchange1(); tmp1(); for(p=0;p<100;p++) { showsmg(0,TMP[j]/100); showsmg(1,TMP[j]%100/10); showsmg(1,17);//显示小数点 showsmg(2,TMP[j]%100%10); showsmg(5,j+1); //sx(); } } } } void serial() interrupt 4 { uchar RMgs,j,k,str[6*DatCount]; RMgs = SBUF; if (RMgs == 0x31) { for(k=0;k str[k*6+0]=k+1; str[k*6+1]=SIGN[k]; str[k*6+2]=TMP[k]/1000; str[k*6+3]=TMP[k]%1000/100; str[k*6+4]=TMP[k]%1000%100/10; str[k*6+5]=TMP[k]%1000%100%10; } ES=0; for (j=0;j<6*DatCount;j++) { SBUF=str[j]; while(!ti); TI=0; } ES=1; } RI=0; } |
|
相关推荐 |
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
imx6ull裸机编程,使用宏定义无法驱动,使用指针就可以驱动
434 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第三十二章 音频FFT实验
297 浏览 0 评论
飞凌嵌入式ElfBoard EL 1板卡-i2c与从设备通讯编程示例之i2c-tools工具使用
1266 浏览 0 评论
stc15f2k60s2利用串口传输字模存储到eeprom并进行点阵显示
1603 浏览 1 评论
1589 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11615 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 18:21 , Processed in 0.572325 second(s), Total 39, Slave 32 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号