|
代码如下
- #include <reg52.h>
- #include <intrins.h>
- sbit CLOCK=P1^6; /*2543时钟*/
- sbit D_IN=P1^4 ;/*2543输入*/
- sbit D_OUT=P1^3; /*2543输出*/
- sbit _CS=P1^5; /*2543片选*/
- #define uint unsigned int
- #define uchar unsigned char
- uchar code string[16]={"value of v"};
- uchar code DispStr[16]={"TLM2543"};
- sbit lcden=P3^4;
- sbit lcdrs=P3^5;
- sbit dula=P2^6;
- sbit wela=P2^7;
- void display(); //待显温度值转换
- void delay(uchar n)
- {
- uchar i;
- for(i=0;i<n;i++)
- {
- _nop_();
- }
- }
- uint read2543(uchar port)
- {
- uint ad=0,i;
- CLOCK=0;
- _CS=0;
- port<<=4;
- for(i=0;i<12;i++)
- {
- if(D_OUT) ad|=0x01;
- D_IN=(bit)(port&0x80);
- CLOCK=1;
- delay(3);
- CLOCK=0;
- delay(3);
- port<<=1;
- ad<<=1;
- }
- _CS=1;
- ad>>=1;
- return(ad);
- }
- void DelayMs(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void write_com(uchar com)//write common
- {
- lcdrs=0;
- P0=com;
- DelayMs(5);
- lcden=1;
- DelayMs(5);
- lcden=0;
- }
- void write_data(uchar date) //write data
- {
- lcdrs=1;
- P0=date;
- DelayMs(5);
- lcden=1;
- DelayMs(5);
- lcden=0;
- }
- void LCDInit()
- {
- dula=0;
- wela=0;
- lcden=0;
- write_com(0x38);//dispaly mode
- write_com(0x0c);// guanbiaoshanshuo
- write_com(0x06);
- write_com(0x01);//clear displayer
- write_com(0x80);//*p
- }
- DisplayChar(uchar X, uchar Y, uchar DData)
- {
- Y &= 0x1;
- X &= 0xF; //限制X不能大于15,Y不能大于1
- if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
- X |= 0x80; // 算出指令码
- write_com(X); //这里不检测忙信号,发送地址码
- write_data(DData);
- return X;
- }
- DisplayStr(uchar X,uchar Y,uchar code *DData)
- {
- uchar ListLength;
- ListLength = 0;
- Y &= 0x1;
- X &= 0xF; //限制X不能大于15,Y不能大于1
- while (DData[ListLength]>0x20) //若到达字
- {
- if (X <= 0xF) //X坐标应小于0xF
- {
- DisplayChar(X, Y, DData[ListLength]); //显示单个字符
- ListLength++;
- X++;
- }
- }
- return X ;
- }
- void main()
- {
- uint ad,ad1,ad_val,ad_val1;
- DelayMs(255);//等待电源稳定,液晶复位完成
- LCDInit(); //1602 液晶初始化
- DisplayStr(0,0,string);//显示"温度:"
- DisplayStr(0,1,DispStr);//显示"系列号"
- DelayMs(250);
- DelayMs(250);
- DelayMs(250);
- DelayMs(250);
- DelayMs(250);
- write_com(0x01); // 清屏
- DelayMs(50);
- ad=read2543(0);
- DelayMs(50);
- ad1=read2543(1);
- ad_val = (uint)(((ad*5.0)/4096.0)*10000);
- ad_val1 = (uint)(((ad1*5.0)/4096.0)*10000);
- while(1)
- {
- display();
- }
- }
- void display()
- {
- uint ad_val,ad_val1;
- uint ge,x1,x2,x3,x4,ge1,x11,x21,x31,x41;
- ge = ad_val/10000;
- x1 = ad_val%10000/1000;
- x2 = ad_val%1000/100;
- x3 = ad_val%100/10;
- x4 = ad_val%10;
- ge1 = ad_val1/10000;
- x11 = ad_val1%10000/1000;
- x21 = ad_val1%1000/100;
- x31 = ad_val1%100/10;
- x41 = ad_val1%10;
- DisplayChar(4,0,ge+0x30);//个位
- DisplayChar(5,0,0x2e); //小数点 .
- DisplayChar(6,0,x1+0x30);
- DisplayChar(7,0,x2+0x30);
- DisplayChar(8,0,x3+0x30);
- DisplayChar(9,0,x4+0x30);
- DisplayChar(10,0,'V');
- DisplayChar(4,1,ge1+0x30);//个位
- DisplayChar(5,1,0x2e); //小数点 .
- DisplayChar(6,1,x11+0x30);
- DisplayChar(7,1,x21+0x30);
- DisplayChar(8,1,x31+0x30);
- DisplayChar(9,1,x41+0x30);
- DisplayChar(10,1,'V');
- ad_val = (uint)(((read2543(0)*5.0)/4096.0)*10000);//不断扫描
- ad_val1 = (uint)(((read2543(1)*5.0)/4096.0)*10000);//不断扫描
- }
-
复制代码
|
|