📄 tmp_final.c
字号:
#include<reg51.h>
#include<intrins.h>
sbit DQ=P1^3; //P1.3口接OUT
sbit T_CON=P1^4;//P1.4口接T_CON
sbit dis_DIN=P1^0; /*显示串行数据输入端*/
sbit dis_LOAD=P1^1; /*显示数据锁存端*/
sbit dis_CLK=P1^2; /*显示时钟输入端*/
unsigned int Temp;//温度
unsigned char temp_h,temp_l;/*温度值变量*/
unsigned char dispbuf[7]={0,0,0,0,0,0,0};
/*向MAX7219写入字节(8位)*/
void SendChar(unsigned char ch)
{
unsigned char i,temp;
_nop_();
for (i=0;i<8;i++)
{
temp=ch&0x80;
ch=ch<<1;
if(temp)
{dis_DIN=1; dis_CLK=0; dis_CLK=1; }
else
{dis_DIN=0; dis_CLK=0; dis_CLK=1; }
}
}
/*7219显示程序*/
void WriteWord(unsigned char addr,unsigned char num)
{
dis_LOAD=0;
_nop_();
SendChar(addr);
_nop_();
SendChar(num);
_nop_();
dis_LOAD=1;
}
void InitDis (void)
{
WriteWord (0x0b,0x5); /*设置扫描界限*/
WriteWord (0x09,0xff); /*设置译码模式*/
WriteWord (0x0a,0x0a); /*设置亮度*/
WriteWord (0x0c,0x01); /*设置电源工作模式*/
}
void delay(unsigned int count)
{
unsigned int i;
while(count)
{
i=200;
while(i>0)i--;
count--;
}
}
void Delay_us(unsigned char n)
{
unsigned char i;
i=0;
while(i<n)
{i++;}
return;
}
void dsreset(void)
{
unsigned int i;
DQ=0;
i=103;
while(i>0)i--;
DQ=1;
i=4;
while(i>0)i--;
}
unsigned char ReadByte(void){
unsigned char i,k;
i=8;
k=0;
while(i--)
{
DQ=1;
Delay_us(1);
DQ=0;
k=k>>1;
DQ=1;
_nop_();
if(DQ)k |= 0x80;
Delay_us(4);
}
return(k);
}
void tmpwrite(unsigned char dat)
{ unsigned int i;
unsigned char j;
bit testb;
for(j=1;j<=8;j++)
{ testb=dat&0x01;
dat=dat>>1;
if(testb)
{ DQ=0;i++;i++;
DQ=1;
i=8;while(i>0)i--;
}
else
{
DQ=0;
i=8;while(i>0)i--;
DQ=1;i++;i++;
}
}
}
void tmpchange(void)
{
dsreset(); /*复位*/
delay(1);
tmpwrite(0xcc); //跳过序列号命令
tmpwrite(0x44); //转换命令
}
void ReadWord(void)
{ temp_l=ReadByte(); //低位在前
temp_h=ReadByte(); //高位在后
Temp=temp_h;
Temp=Temp<<8;
Temp |= temp_l;
}
void tmp(void)
{ long T;
unsigned char i;
dsreset();
delay(1);
tmpwrite(0xcc);
tmpwrite(0xbe);
ReadWord();
if (Temp&0x8000)
Temp=(~Temp+1);
T=(long)Temp*625;
for(i=6;i>0;i--)
{dispbuf[i]=T%10;
T=T/10;
}
dispbuf[2] |= 0x80;
if (dispbuf[1]>=5)
T_CON=0;
else T_CON=1;
}
void disp(void)
{unsigned char i;
for(i=0;i<6;i++)
{WriteWord(i+1,dispbuf[i+1]);
}
}
/*主程序*/
void main()
{unsigned int T=0;
T_CON=0;
while(1)
{
tmpchange();
delay(10);
tmp();
InitDis();
disp();
Temp=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -