?? cewen.c
字號:
/***************************************單片機課程設計**************************************/
/*溫度測量程序*/
/*設計題目:數字式雙通道溫度計*/
/*設計要求:
對兩路溫度信號進行測量,同時用數字方法顯示當前被測通道的溫度值。
要求利用一定的時間間隔輪流顯示兩路的溫度值和通道標志,具備用按鈕選
擇顯示某路信號的溫度情況。*/
#include<reg51.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define AD_START XBYTE[0XFF]
sbit P2_7=P2^7; //A或B通道選擇位
sbit P2_6=P2^6; //清0允許ADC0809讀寫
sbit P3_4=P3^4; //置位允許164接收
sbit TXD1=P1^6; //為164提供時鐘信號
sbit RXD1=P1^7; //模擬串行發送
sbit Key1=P1^0; //按鍵1
sbit Key2=P1^1; //按鍵2
bit A_B=0; //A或B通道的顯示標志(0-A通道,1-B通道)
uchar Temp0; //溫度變量
uchar T1_Add=0; //定時器T0定時50ms,每產生一次中斷T1_Add加1,循環100次,實現5s延時
void delay(uchar k) //延時1ms
{
uint i=0;
uchar j=0;
for(j;j<k;j++)
{
for(i;i<1000;i++);
}
}
void LED(uchar tem[3]) //數碼管串行顯示
{
uchar i=0;
uchar temp;
uchar j=0;
uchar code AB[2]={0x77,/*A*/
0x7C,/*b*/};
for(i;i<4;i++)
{
if(i==3) temp=AB[A_B];
else temp=tem[i];
for(j;j<8;j++)
{
RXD1=temp^7;
TXD1=0;
TXD1=1;
temp<<=temp;
}
}
}
void temp_code(uchar temp) //代碼轉換
{
uchar j;
uchar i=0;
uchar tem[3];
uchar code LED_code[10]={0x3F,/*0*/
0x06,/*1*/
0x5B,/*2*/
0x4F,/*3*/
0x66,/*4*/
0x6D,/*5*/
0x7D,/*6*/
0x07,/*7*/
0x7F,/*8*/
0x6F,/*9*/};
for(i;i<3;i++)
{
tem[i]=temp%10;
temp/=10;
j=tem[i];
tem[i]=LED_code[j];
}
LED(tem);
}
void ADC0809_read() //從ADC0809讀取溫度
{
uchar temp;
P2_6=0;
P2_7=A_B; //選擇A或B通道
AD_START=0X00;
delay(1);//延時1ms,等待ADC0809產生中斷
/***********執行中斷函數,讀取溫度***********/
temp_code(temp); //將讀取到的溫度值轉換為LED能夠顯示的編碼并顯示出來
}
void read_int0() interrupt 0 //讀取ADC0809的中斷函數
{
Temp0=P0;
}
void T_1() interrupt 3 //定時器1中斷
{
T1_Add++;
TH1=0x4C;
TL1=0x01;
if(T1_Add==100) //判斷延時是否為5s
{
ADC0809_read();
A_B=!A_B;
T1_Add=0;
}
TR1=1; //啟動T1
}
void keycheck()//鍵盤查詢程序
{
while(1)
{
if(Key1==0)
{
A_B=0;
ADC0809_read();
}
else if(Key2==0)
{
A_B=1;
ADC0809_read();
}
}
}
void main()
{
P3_4=1; //置位允許164接收
P2_6=0; //清0允許ADC0809讀寫
EA=1; //置位總中斷允許位
EX0=1; //置位INT0中斷允許位
ET1=1; //置位T1中斷允許位
IT0=1; //選擇外部中斷INT0為跳沿觸發方式
ADC0809_read();
/*********************************************/
TMOD=0x10; //設定定時器T1為工作方式1(16位定時器)
TH1=0x4C;
TL1=0x01;
TR1=1; //啟動T1
/*********************************************/
keycheck();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -