DS1621+MAX1241(12位串行ADC)電壓溫度采樣程序Proteus仿真 LCD12864顯示
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
1.gif (77.58 KB)
下載附件
2021-7-6 17:26 上傳
單片機(jī)部分源程序如下:(完整源碼請下載附件)
- ****************************************************
- 字符為16*16顯示,分為兩個(gè)部分寫入32個(gè)字節(jié)
- 前16個(gè)字節(jié)寫入第一頁(16*8),后16個(gè)字節(jié)寫入
- 第二頁(16*8)
- 左側(cè)寫入"歡迎",右側(cè)寫入"使用"
- *****************************************************/
- C_display_L(uchar C_Pagenum,uchar C_Tiernum,uchar C_Temp)
- {
- uchar k;
- C_Pagenum=PAGEADD|C_Pagenum;
- C_Tiernum=TIERADD|C_Tiernum;
- WRCommand_L(C_Pagenum);
- WRCommand_L(C_Tiernum);
- for(k=0;k<16;k++)
- {
- WRdata_L(table2[C_Temp*32+k]);
- };
- C_Pagenum=C_Pagenum+1;
- WRCommand_L(C_Pagenum);
- WRCommand_L(C_Tiernum);
- for(k=0;k<16;k++)
- {
- WRdata_L(table2[C_Temp*32+k+16]);
- };
- }
- C_display_R(uchar C_Pagenum,uchar C_Tiernum,uchar C_Temp)
- {
- uchar k;
- C_Pagenum=PAGEADD|C_Pagenum;
- C_Tiernum=TIERADD|C_Tiernum;
- WRCommand_R(C_Pagenum);
- WRCommand_R(C_Tiernum);
- for(k=0;k<16;k++)
- {
- WRdata_R(table2[C_Temp*32+k]);
- };
- C_Pagenum=C_Pagenum+1;
- WRCommand_R(C_Pagenum);
- WRCommand_R(C_Tiernum);
- for(k=0;k<16;k++)
- {
- WRdata_R(table2[C_Temp*32+k+16]);
- };
- }
- /****************************************
- 寫入西文字符,共11個(gè)字符,左側(cè)寫入6個(gè)
- 右側(cè)寫入5個(gè),左側(cè)起始從16開始,右側(cè)從
- 0開始
- *****************************************/
- E_Display_L(uchar E_Pagenum,uchar E_Tiernum,uchar E_Temp)
- {
- uchar k;
- WRCommand_L(PAGEADD|E_Pagenum);
- WRCommand_L(TIERADD|E_Tiernum);
- for(k=0;k<8;k++)
- {
- WRdata_L(table1[E_Temp*8+k]);
- };
- }
- E_Display_R(uchar E_Pagenum,uchar E_Tiernum,uchar E_Temp)
- {
- uchar k;
- WRCommand_R(PAGEADD|E_Pagenum);
- WRCommand_R(TIERADD|E_Tiernum);
- for(k=0;k<8;k++)
- {
- WRdata_R(table1[E_Temp*8+k]);
- };
- }
- /*********************************
- 清除所有顯示RAM內(nèi)容
- **********************************/
- CLR_DisplayRAM()
- {
- uchar C_page,i,k;
- for(i=0;i<8;i++)
- {
- C_page=PAGEADD|i;//清除起始頁為0
- WRCommand_L(C_page);//清除起始頁寫入
- WRCommand_L(TIERADD);//清除起始行地址寫入
- WRCommand_R(C_page);
- WRCommand_R(TIERADD);
- for(k=0;k<64;k++)
- {
- WRdata_L(0x00);
- WRdata_R(0x00);//lcm的ram自動(dòng)加一,只許循環(huán)64次即可
- };
- };
- }
- /*********************************
- 初始化 設(shè)置啟使行
- **********************************/
- void Init_LCD(void)
- {
- CLR_DisplayRAM();//清除所有顯示寄存器
- WRCommand_L(DIS_STARADD);
- WRCommand_R(DIS_STARADD);//設(shè)置顯示起始行地址
- WRCommand_L(0x3f);
- WRCommand_R(0x3f);//開顯示
- }
- /***************************************
- max1241讀轉(zhuǎn)換結(jié)果
- ****************************************/
- uint read_max1241()
- {
- uint voltage_temp=0;
- uchar ucloop=12;
- cs=High;
- //dout=low;
- sclk=Low;
- cs=Low;
- while(dout==0);//EOC信號(hào)為高表示轉(zhuǎn)換結(jié)束
- sclk=High;
- sclk=Low;
- while(ucloop--)
- {
- sclk=High;//上升沿?cái)?shù)據(jù)穩(wěn)定并讀出
- voltage_temp<<=1;
- if(dout==1)
- voltage_temp+=1;
- sclk=Low;
- };
- //sclk=low;
- cs=High;
- return voltage_temp;
- }
- main()
- {
- uchar a=0,temp=0,b=0,number=0,pagenum=0;
- uchar etable[]={0,0,0,0,0,45,53,60,51,63,61,53,10,69,67,53};//Welcome use
- uchar ttable[]={42,57,61,53,19,10,2,0,0,6,18,1,1,18,0,7};//Time:2006/11/07
- char count_remain=0,count_c=0;
- bit flag=1;
- char temperature_buf[2]={0};
- uchar temperature_display[8]={0};
- //uchar voltage=0; //測試0831時(shí)使用
- double voltage=0;
- double temp_buffer=0;
- cs=High;
- sclk=High;
- Init_LCD();
- I2C_init();
- DS1621_init();//初始化
- DS1621_start();//開始溫度采集
- /***************************************
- 利用開機(jī)顯示時(shí)間(大概三秒)空讀一次DS1621
- ***************************************/
- for(b=0;b<2;b++)
- {
- for(number=0;number<20;number++)
- {
- //中文顯示:歡迎使用液晶模塊
- pagenum=1;//在第二行開始顯示
- for(a=0;a<4;a++)
- {
- C_display_L(pagenum,a*16,a);
- C_display_R(pagenum,a*16,a+4);
- };
-
- //英文顯示:Welcome use
- pagenum=5;//在第六行顯示
- for(a=0;a<3;a++)
- {
- E_Display_L(pagenum,(a+5)*8,etable[a+5]);
- };
- for(a=0;a<8;a++)
- {
- E_Display_R(pagenum,a*8,etable[a+8]);
- };
-
- //顯示制作時(shí)間:Time:2006/11/07
- pagenum=7;//在第八行顯示
- for(a=0;a<8;a++)
- {
- E_Display_L(pagenum,a*8,ttable[a]);
- E_Display_R(pagenum,a*8,ttable[a+8]);
- }
- Delay_nms(100);
- };
- if(flag)
- {
- read_temperature(temperature_buf);//在轉(zhuǎn)到下一個(gè)顯示界面之前空讀一次
- read_count_remain();
- read_count_c();
- DS1621_start();
- flag=0;
- };
- };
- WRCommand_L(0x3e);
- WRCommand_R(0x3e);
- CLR_DisplayRAM(); //清除顯示ram
- WRCommand_L(0x3f);
- WRCommand_R(0x3f);
-
- while(1)
- {
- while(read_temperature(temperature_buf)==0);//讀溫度值(兩字節(jié)有符數(shù)),并檢測應(yīng)答位,只使用第一字節(jié)
- count_remain=read_count_remain();//讀斜率
- count_c=read_count_c();//讀計(jì)數(shù)器
- temp_buffer = temperature_buf[0] -0.75 + (count_c-count_remain) / (double)count_c;
- DS1621_start();//讀完數(shù)據(jù)后,重新開始一次溫度轉(zhuǎn)化
復(fù)制代碼
完整單片機(jī)程序源碼和仿真文件.zip
(118.1 KB, 售價(jià): 3 E幣)
2021-7-6 17:28 上傳
點(diǎn)擊文件名下載附件
售價(jià): 3 E幣 [記錄]
[ 購買]
【必讀】版權(quán)免責(zé)聲明
1、本主題所有言論和內(nèi)容純屬會(huì)員個(gè)人意見,與本論壇立場無關(guān)。2、本站對所發(fā)內(nèi)容真實(shí)性、客觀性、可用性不做任何保證也不負(fù)任何責(zé)任,網(wǎng)友之間僅出于學(xué)習(xí)目的進(jìn)行交流。3、對提供的數(shù)字內(nèi)容不擁有任何權(quán)利,其版權(quán)歸原著者擁有。請勿將該數(shù)字內(nèi)容進(jìn)行商業(yè)交易、轉(zhuǎn)載等行為,該內(nèi)容只為學(xué)習(xí)所提供,使用后發(fā)生的一切問題與本站無關(guān)。 4、本網(wǎng)站不保證本站提供的下載資源的準(zhǔn)確性、安全性和完整性;同時(shí)本網(wǎng)站也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的損失或傷害。 5、本網(wǎng)站所有軟件和資料均為網(wǎng)友推薦收集整理而來,僅供學(xué)習(xí)用途使用,請務(wù)必下載后兩小時(shí)內(nèi)刪除,禁止商用。6、如有侵犯你版權(quán)的,請及時(shí)聯(lián)系我們(電子郵箱1370723259@qq.com)指出,本站將立即改正。
|