⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cewen.c

📁 数字温度计 单片及课程设计 C 语言设计1
💻 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 + -