📄 四位数显温度计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 + -