段控制P0到P17(共8條線)。位控制P1.0連接P16的Q1B;P1.1連接Q2B;P1.2連接Q3BP;1.3連接Q4B。
P15的2腳18B20輸出腳,連接到P3.2。
0.jpg (23.38 KB, 下載次數: 41)
下載附件
2018-4-10 01:06 上傳
單片機源程序如下:
- /***************************************************************************
- 標題: 溫感實驗
- 效果: 讀取溫度值數碼管顯示
- 工作于:光匯i51開發板
- 作者: 光匯科技
- 說明: 板使用12M晶振
- ******************************************************************************/
- //頭文件:
- #include "reg51.h"
- #include "ds18b20.h" //引入DS18B20頭文件
- //變量定義:
- unsigned char ly_dis[4];//定義顯示緩沖區
- code unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc6};
- unsigned int i=0;
- char ltemp; //表:共陽數碼管 0-9 C
- unsigned char l_posit=0; //顯示位置
- //引腳定義:
- sbit SMG_q = P1^0; //定義數碼管陽級控制腳(千位)
- sbit SMG_b = P1^1; //定義數碼管陽級控制腳(百位)
- sbit SMG_s = P1^2; //定義數碼管陽級控制腳(十位)
- sbit SMG_g = P1^3; //定義數碼管陽級控制腳(個位)
- sbit SMKG=P3^6;
- //函數聲明:
- void display(void);//顯示函數,顯示緩沖區內容
- void delay(void);
- //主函數,C語言的入口函數:
- void main()
- {
-
- while(1){
-
- display(); //調用顯示
- delay();
- }
- }
- //顯示函數,參數為顯示內容
- void display()
- {
- SMKG=0;
- P0=0XFF; //
- switch(l_posit){
- case 0: //選擇千位數碼管,關閉其它位
- SMG_q=0;
- SMG_b=1;
- SMG_s=1;
- SMG_g=1;
- P0=table[ly_dis[0]]; //輸出顯示內容
- break;
- case 1: //選擇百位數碼管,關閉其它位
- SMG_q=1;
- SMG_b=0;
- SMG_s=1;
- SMG_g=1;
- P0=table[ly_dis[1]];
- break;
- case 2: //選擇十位數碼管,關閉其它位
- SMG_q=1;
- SMG_b=1;
- SMG_s=0;
- SMG_g=1;
- P0=table[ly_dis[2]];
- break;
- case 3: //選擇個位數碼管,關閉其它位
- SMG_q=1;
- SMG_b=1;
- SMG_s=1;
- SMG_g=0;
- P0=table[ly_dis[3]];
- break;
- }
- l_posit++; //每調用一次將輪流顯示一位
- if(l_posit>3)
- l_posit=0;
- if(i==0) //先發轉換命令,再讀數值,以減少速度慢帶來的顯示抖動
- tmpchange(); //溫度轉換
- if(i==100){
- ltemp=tmp()/16; //得到十進制溫度值,因為DS18B20可以精確到0.0625度,這里取整數顯示
- if(ltemp<0){ //判斷第一位顯示整數還是負號
- ly_dis[0]=0xbf;
- ltemp=0-ltemp;
- }
- else
- // ly_dis[0]=ltemp/100;//顯示百位值
- ltemp=ltemp/100%100;
- ly_dis[0]=ltemp/10; //顯示溫度十位值
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
12 數碼管顯示18B20溫度.rar
(86.34 KB, 下載次數: 60)
2018-4-9 21:13 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|