📄 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 + -