?? 四位數顯溫度計1.c
字號:
#include <REG51.H>
unsigned char code dispbitcode[]={0X01,0X02,0X04,0X08,};//選擇顯示位
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};//led代碼顯示
unsigned char dispbuf[]={0X01,0X02,0X04,0X08};//百位十位個位數據暫存
unsigned char dispcount; //一位計數
unsigned char getdata; //數據緩存
unsigned int temp;
sbit ST=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
sbit CLK=P3^3;
void dis_make()//顯示處理函數
{
int temp_data;
int temp1_data;
temp_data = 2*getdata;//溫度算法V=(2.73+T/100)
temp1_data = temp_data - 273;//溫度算法
if((temp1_data)>=0)
{
temp = temp_data - 273;//取溫度值
dispbuf[0]=10; //清一位顯示
}
else
{
temp = 273-temp_data;//取溫度值
dispbuf[0]=11; //顯示負號
}
if((temp1_data < 155)&(temp1_data>-55))//范圍內
{
dispbuf[1]=temp/100; //取百位
dispbuf[2]=(temp%100)/10;//取十位
dispbuf[3]=(temp%100)%10;//取個位
}
else //溢出
{
dispbuf[0]=11;//顯示“-”
dispbuf[1]=11;
dispbuf[2]=11;
dispbuf[3]=11;
}
}
void main(void)
{
TMOD=0x12;
TH0=0XF6;//0.01ms時間
TL0=0XF6;
TR1=1; //tr1開始計時
TR0=1; //tr0開始計時
ET0=1; //開定時器0中斷
ET1=1; //開定時器1中斷
EA = 1; //開總中斷
while(1)
{
ST=0;
ST=1; //清空數據
ST=0; //開始記轉換
while(!EOC);//等待數據轉換完成
OE=1; //使能數據輸出
getdata=P0;//獲取數據
OE=0; //禁止數據輸出
dis_make(); //顯示處理
}
}
void t0(void) interrupt 1 //100K方波
{
CLK=~CLK; //位取反
}
void t1(void) interrupt 3
{
TH1=(65536-4000)/256; //4MS
TL1=(65536-4000)%256;
P2 = 0X00; //消影
P1=~dispcode[dispbuf[dispcount]];//顯示字符
P2=dispbitcode[dispcount]; //顯示位
dispcount++; //移位計數
if(dispcount>3)
{
dispcount=0;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -