|
|
PT100測(cè)溫仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (18.83 KB, 下載次數(shù): 65)
下載附件
2019-6-17 13:13 上傳
0.png (17.65 KB, 下載次數(shù): 58)
下載附件
2019-6-17 13:09 上傳
單片機(jī)源程序如下:
- #include<reg51.h>
- #include<intrins.h> //包含_nop_()函數(shù)定義的頭文件
- typedef unsigned char uchar;
- typedef unsigned int uint;
- sbit SDA1=128;//串行數(shù)據(jù)輸入,對(duì)應(yīng)595的14腳SER
- sbit SCL1=129;//移位寄存器時(shí)鐘輸入,對(duì)應(yīng)595的11腳SCK
- sbit SCL2=130;//存儲(chǔ)寄存器時(shí)鐘輸入,對(duì)應(yīng)595的12腳RCK
- sbit SDA2=131;//串行數(shù)據(jù)輸入,對(duì)應(yīng)595的14腳SER
- sbit SCL3=132;//移位寄存器時(shí)鐘輸入,對(duì)應(yīng)595的11腳SCK
- sbit SCL4=133;//存儲(chǔ)寄存器時(shí)鐘輸入,對(duì)應(yīng)595的12腳RCK
- //ADC0832端口引腳定義
- sbit CS=P1^0;//將CS位定義為P3.4引腳
- sbit CLK=P1^1;//將CLK位定義為P1.0引腳
- sbit DIO=P1^2;//將DIO位定義為P1.1引腳
- sbit k1=161;//加按鍵
- sbit k2=162;//減按鍵
- sbit k3=160;//設(shè)置按鍵
- sbit beep=163;//蜂鳴器
- uchar aa=60,bb=10,num;
- //以下是LCD1602驅(qū)動(dòng)程序
- void delay1000(uint aaaaaa)
- {
- uint bbbbbb,cccccc;
- for(bbbbbb=aaaaaa;bbbbbb>0;bbbbbb--)
- for(cccccc=110;cccccc>0;cccccc--);
- }
- void delay(uint z)
- {
- uint x,y;
- for(x=100;x>1;x--)
- for(y=z;y>1;y--);
- }
- void in(uchar dddddd)
- {
- uchar eeeeee;
- for(eeeeee=0;eeeeee<8;eeeeee++) //循環(huán)8次,剛好移完8位
- {
- dddddd<<=1;
- SCL1=CY;
- SDA1=1; //先將移位寄存器控制引腳置為低
- _nop_();
- _nop_();
- SDA1=0;
- }
- }
- void out()
- {
- SCL2=0; //先將存儲(chǔ)寄存器引腳置為低
- _nop_();
- SCL2=1; //再置為高,產(chǎn)生移位時(shí)鐘上升沿,上升沿時(shí)移位寄存器的數(shù)據(jù)進(jìn)入數(shù)據(jù)存儲(chǔ)寄存器,更新顯示數(shù)據(jù)。
- _nop_();
- SCL2=0;
- }
- void in1(uchar ffffff)
- {
- uchar gggggg;
- for(gggggg=0;gggggg<8;gggggg++) //循環(huán)8次,剛好移完8位
- {
- ffffff<<=1;
- SCL3=CY;
- SDA2=1; //先將移位寄存器控制引腳置為低
- _nop_();
- _nop_();
- SDA2=0;
- }
- }
- void out1()
- {
- SCL4=0; //先將存儲(chǔ)寄存器引腳置為低
- _nop_();
- SCL4=1; //再置為高,產(chǎn)生移位時(shí)鐘上升沿,上升沿時(shí)移位寄存器的數(shù)據(jù)進(jìn)入數(shù)據(jù)存儲(chǔ)寄存器,更新顯示數(shù)據(jù)。
- _nop_();
- SCL4=0;
- }
- void write_com(uchar hhhhhh)
- {
- in(248);//再傳段碼
- out();
- delay1000(2);//延遲時(shí)間2ms以內(nèi)
- in1(hhhhhh); //再傳段碼
- out1();
- delay1000(2); //延遲時(shí)間2ms以內(nèi)
- in(252);//再傳段碼
- out();
- delay1000(2);//延遲時(shí)間2ms以內(nèi)
- in(248);//再傳段碼
- out();
- delay1000(2);//延遲時(shí)間2ms以內(nèi)
- }
- void write_date(uchar iiiiii)
- {
- in(249);//再傳段碼
- out();
- delay1000(2);//延遲時(shí)間2ms以內(nèi)
- in1(iiiiii); //再傳段碼
- out1();
- delay1000(2); //延遲時(shí)間2ms以內(nèi)
- in(253);//再傳段碼
- out();
- delay1000(2);//延遲時(shí)間2ms以內(nèi)
- in(249);//再傳段碼
- out();
- delay1000(2);//延遲時(shí)間2ms以內(nèi)
- }
- //LCD1602液晶初始化子函數(shù)
- void init_LCD1602()
- {
- write_com(56);
- write_com(12);
- write_com(6);
- write_com(128);
- write_com(1);
- write_com(0xc0);
- write_date('T');
- write_date('H');
- write_date('=');
- write_date(48+aa/100);
- write_date(48+aa%100/10);
- write_date(48+aa%10);
- write_date(' ');
- write_date(' ');
- write_date('T');
- write_date('L');
- write_date('=');
- write_date(48+bb/100);
- write_date(48+bb%100/10);
- write_date(48+bb%10);
- }
- //ADC0832模數(shù)轉(zhuǎn)換芯片采集子函數(shù)
- uchar A_D()
- {
- uchar aaa,bbb;
- CS=1; //一個(gè)轉(zhuǎn)換周期開始
- CLK=0; //為第一個(gè)脈沖作準(zhǔn)備
- CS=0; //CS置0,片選有效
- DIO=1; //DIO置1,規(guī)定的起始信號(hào)
- CLK=1; //第一個(gè)脈沖
- CLK=0; //第一個(gè)脈沖的下降沿,此前DIO必須是高電平
- DIO=1; //DIO置1, 通道選擇信號(hào)
- CLK=1; //第二個(gè)脈沖,第2、3個(gè)脈沖下沉之前,DI必須跟別輸入兩位數(shù)據(jù)用于選擇通道,這里選通道CH0
- CLK=0; //第二個(gè)脈沖下降沿
- DIO=0; //DI置0,選擇通道0
- CLK=1; //第三個(gè)脈沖
- CLK=0; //第三個(gè)脈沖下降沿
- DIO=1; //第三個(gè)脈沖下沉之后,輸入端DIO失去作用,應(yīng)置1
- CLK=1; //第四個(gè)脈沖
- for(aaa=0;aaa<8;aaa++) //高位在前
- {
- CLK=1; //第四個(gè)脈沖
- CLK=0;
- bbb<<=1; //將下面儲(chǔ)存的低位數(shù)據(jù)向右移
- bbb|=(uchar)DIO; //將輸出數(shù)據(jù)DIO通過或運(yùn)算儲(chǔ)存在dat最低位
- }
- CS=1; //片選無(wú)效
- return bbb; //將讀書的數(shù)據(jù)返回
- }
- //按鍵掃描子函數(shù)
- void key()
- {
- if(k3==0)//設(shè)置按鍵
- {
- delay(10);
- if(k3==0)
- { //設(shè)置位置設(shè)定
- while(k3==0);
- num++;
- if(num==1) // 無(wú)設(shè)置位置
- {
- write_com(0xc0+5);//液晶第二行第4個(gè)位置
- write_com(0x0f);//光標(biāo)閃爍
- }
- if(num==2)//光標(biāo)閃爍
- {
- write_com(0xc0+13);
- }
- if(num==3)//正常模式
- {
- num=0;//num值清0
- write_com(0x0c);//光標(biāo)不閃爍
- }
- }
- }
- if(k1==0)
- {
- delay(10);
- if(k1==0)
- {
- if(num==1)
- {
- aa++;
- if(aa>110)
- aa=bb+10;
- write_com(0xc5);
- write_date(48+aa%10);
- write_com(0xc3);
- write_date(48+aa/100);
- write_com(0xc4);
- write_date(48+aa%100/10);
- }
- if(num==2)
- {
- bb++; //bbbbb1>aaaaa1時(shí) 是個(gè)錯(cuò)誤,這里避免此情況發(fā)生
- if(bb>=aa)
- bb=aa-10;
- write_com(0xc0+13);
- write_date(48+bb%10);
- write_com(0xc0+11);
- write_date(48+bb/100);
- write_com(0xc0+12);
- write_date(48+bb%100/10);
- }
- }
- while(k1==0);
- }
- if(k2==0)
- {
- delay(10);
- if(k2==0)
- {
- if(num==1)
- {
- aa--; //aaaaa1<bbbbb1時(shí) 是個(gè)錯(cuò)誤,這里避免此情況發(fā)生
- if(aa<=bb)
- aa=aa+10;
- write_com(0xc5);
- write_date(48+aa%10);
- write_com(0xc3);
- write_date(48+aa/100);
- write_com(0xc4);
- write_date(48+aa%100/10);
- }
- if(num==2)
- {
- if(bb>0)
- bb--;
- if(bb==0)
- bb=0;
- write_com(0xc0+13);
- write_date(48+bb%10);
- write_com(0xc0+11);
- write_date(48+bb/100);
- write_com(0xc0+12);
- write_date(48+bb%100/10);
- }
- }
- while(k2==0);
- }
- }
- void display()//u=2.55+T/100, 2.55反映在AD上為0x83
- {
- uchar aaaa,bbbb,cccc; //儲(chǔ)存A/D轉(zhuǎn)換后的值
- uchar tab[4];
- aaaa=A_D(); //進(jìn)行A/D轉(zhuǎn)換
- aaaa=aaaa-0x83;
- bbbb=aaaa*2-4;
- if(bbbb<=110)
- {
- bbbb=bbbb-2;
- tab[3]=bbbb/100;
- tab[2]=bbbb/10-tab[3]*10;
- tab[1]=bbbb%10;
- tab[0]=cccc%5*2;
- write_com(0x80);
- write_date('T');
- write_date('=');
- write_date(48+tab[3]);
- write_date(48+tab[2]);
- write_date(48+tab[1]);
- write_date('.');
- write_date(48+tab[0]);
- if(bbbb>aa)
- {
- beep=0;
- }
- else
- beep=1;
- if(bbbb<bb)
- {
- beep=0;
- }
- else
- beep=1;
- }
- else
- {
- bbbb=256-bbbb;
- tab[3]=11;
- tab[2]=bbbb/10;
- tab[1]=bbbb%10;
- tab[0]=cccc%5*2;
- write_com(0x80);
- write_date('T');
- write_date('=');
- write_date('-');
- write_date(48+tab[2]);
- write_date(48+tab[1]);
- write_date('.');
- write_date(48+tab[0]);
-
- }
- }
- //主函數(shù)
- void main()
- {
- init_LCD1602(); //將液晶初始化
- while(1)
- {
- if(num==0)
- {
- display();
- }
- else
- beep=1;
- key();
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
1、源程序.zip
(32.46 KB, 下載次數(shù): 242)
2019-6-16 20:20 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
2、仿真圖.zip
(69.53 KB, 下載次數(shù): 229)
2019-6-16 20:20 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|