logo资料库

12864显示温度曲线.doc

第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
资料共8页,全文预览结束
//12864 并行连接,PSB 接地正极 #include #include #include #define uint unsigned int #define uchar unsigned char sbit rs=P2^0; sbit rw=P2^1; sbit e=P2^2; sbit ds=P3^3; /*数据\指令 选择*/ /*读\写 选择*/ /*读\写使能*/ //18B20 信号脚 uint temp; float ftemp; uchar code table[]="0123456789.d"; void writecom(uchar com); void writedat(uchar dat); void initinal(void); //12MHZ 晶振 延时 50 微秒 void delay50us(uint t) { uchar j; for(;t>0;t--) for(j=19;j>0;j--); } void dsreset() { // ds18b20 初始化函数 //拉低总线开始复位 uint i; ds=0; i=103; while(i>0)i--; ds=1;//释放总线 i=4; while(i>0)i--; // 省去了等待芯片返回应答的过程 。。。。。。 //ds18b20 读取一个二进制位,参照时序图 } bit readbit(void) { uint i; bit dat; ds=0;i++; ds=1;i++,i++;
dat=ds; i=8;while(i>0)i--; return(dat); } uchar tempread(void) { uchar i,j,dat; dat=0; for(i=0;i<8;i++) { //ds18b20 读取一个字节的数据 j=readbit(); dat=(j<<7)|(dat>>1); // } return(dat); } void tempwrite(uchar dat) { //ds18b20 写入字节数据 uint i;uchar j; bit testb; for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if(testb==1) { // 写 1 // 拉低总线以开始一个写时序 // 释放总线 // 写 0 //温度转换 ds=0; i++;i++; ds=1; i=8;while(i>0)i--; } else { ds=0; i=8;while(i>0)i--; ds=1; i++;i++; } } } void tempchang(void) { dsreset(); delay50us(20); tempwrite(0xcc); //
tempwrite(0x44); // } uint gettemp() { // 获取温度 // // uchar a,b; dsreset(); delay50us(2000); tempwrite(0xcc); tempwrite(0xbe); a=tempread(); b=tempread(); temp=b; temp<<=8; temp=temp|a; ftemp=temp*0.0625; temp=ftemp*10+0.5; ftemp=ftemp+0.05; return temp; //延时 100 毫秒消除恐怖 85 度 // // ////// // // // // } /*------------------检查忙位-----------------------------*/ void chkbusy() { rs=0; rw=1; e=1; P0=0xff ; while((P0&0x80)==0x80); e=0; } /*************读数据************/ uchar read() { uchar shuju; chkbusy(); P0=0xff; rs=1; rw=1; e=0; delay50us(1); e=1; shuju=P0; // delay(5); e=0;
return(shuju); } //增加画点子程序 void DrawPoint(uchar X,uchar Y,uchar Color) { uchar Row,Tier,Tier_bit ; uchar ReadOldH,ReadOldL ; writecom(0x34); writecom(0x36); Tier=X>>4 ; Tier_bit=X&0x0f ; if(Y<32) { Row=Y ; } else { Row=Y-32 ; Tier+=8 ; } writecom(Row+0x80); writecom(Tier+0x80); read(); ReadOldH=read(); ReadOldL=read(); writecom(Row+0x80); writecom(Tier+0x80); if(Tier_bit<8) { switch(Color) { case 0 : ReadOldH&=(~(0x01<<(7-Tier_bit))); break ; case 1 : ReadOldH|=(0x01<<(7-Tier_bit)); break ; case 2 : ReadOldH^=(0x01<<(7-Tier_bit)); break ; default : break ; } writedat(ReadOldH);
writedat(ReadOldL); } else { switch(Color) { case 0 : ReadOldL&=(~(0x01<<(15-Tier_bit))); break ; case 1 : ReadOldL|=(0x01<<(15-Tier_bit)); break ; case 2 : ReadOldL^=(0x01<<(15-Tier_bit)); break ; default : break ; } writedat(ReadOldH); writedat(ReadOldL); } writecom(0x30); } //写命令 void writecom(uchar com) { chkbusy(); rw=0; rs=0; delay50us(1); P0=com; e=1; delay50us(10); e=0; delay50us(10); } //写数据 void writedat(uchar dat) { chkbusy(); rw=0; rs=1; delay50us(1);
P0=dat; e=1; delay50us(10); e=0; delay50us(10); } //初始化 void initinal(void) { delay50us(2); writecom(0x30); delay50us(4); writecom(0x30); delay50us(4); writecom(0x0e); delay50us(4); writecom(0x01); delay50us(240); writecom(0x06); delay50us(10); } { void clrscreen() writecom(0x01); delay50us(10); } //------------------清整个 GDRAM 空间---------------------------- void clrgdram() { unsigned char x,y ; for(y=0;y<64;y++) for(x=0;x<16;x++) { writecom(0x34); writecom(y+0x80); //行地址 writecom(x+0x80); //列地址 writecom(0x30); writedat(0x00); writedat(0x00); } }
//------------------------------------------------------------ //主函数 void main() { uchar i,j,e,colour=1; uint a ; rw=0; initinal(); clrgdram(); delay50us(2); clrscreen(); writecom(0x34); // while(1) { uint a,b,c,d; DrawPoint(17,6,colour); DrawPoint(17,22,colour); DrawPoint(17,38,colour); DrawPoint(17,54,colour); for(j=16;j<124;j++) { } { DrawPoint(16,j-16,colour); DrawPoint(j,63,colour); DrawPoint(i,e,colour); writecom(0x80); writedat(table[6]); writedat(table[7]); writecom(0x90); writedat(table[5]); writedat(table[1]); writecom(0x88); writedat(table[3]); writedat(table[5]); writecom(0x98); writedat(table[1]); writedat(table[9]); for(i=16;i<124;i++) tempchang();
a=gettemp(); e=73-a/10; DrawPoint(i,e,colour); delay50us(10000); b=a/100; c=a%100/10; d=a%100%10; writecom(0x83); writedat(table[b]); delay50us(1); writedat(table[c]); delay50us(1); writedat(table[10]); delay50us(1); writedat(table[d]); delay50us(1); writedat(table[11]); delay50us(4); writecom(0x83); } clrgdram(); writecom(0x36); delay50us(5); clrgdram(); clrscreen(); tempchang(); a=gettemp(); } // // // // // // }
分享到:
收藏