|
1黑幣
在網(wǎng)上找的程序,有一個(gè)地方不是很明白,改了半天一直出錯(cuò),求大佬們幫幫忙,晚上做夢(mèng)都在想。。程序上我會(huì)標(biāo)出不明白的地方希望有大佬解答。一共有兩個(gè)問(wèn)題,紅色部分標(biāo)出了,還有一個(gè)用大號(hào)字體說(shuō)明了。
單片機(jī)源程序如下:
#include <reg51.h> //頭文件
#include<math.h>
#define uchar unsigned char //宏定義
#define uint unsigned int
sbit STAR=P2^4;
sbit EOC=P2^6;
sbit CLOCK=P2^5;
sbit OE=P2^7;
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
uchar getdata;
double change;
long int temp;
uchar code table1[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,
0x6F,0X77,0x40};//0-9,-,無(wú)小數(shù)點(diǎn)
uchar code table2[]={0xbF,0x86,0xdB,0xcF,0xe6,0xeD,0xfD,0x87,0x7fF,
0xeF};//0-9,小數(shù)點(diǎn)
uchar dispbuf[6];
/****************************************************************************************/
//延時(shí)函數(shù):帶有入口參數(shù)m,代表ms毫秒
//
/****************************************************************************************/
void delay_ms(uchar m)
{
unsigned int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<123;j++)
{;}
}
}
/****************************************************************************************/
//
//數(shù)碼管顯示程序
/****************************************************************************************/
void display()
{
P0=table1[dispbuf[3]];//顯示百位
P20=0;
P21=1;
P22=1;
P23=1;
delay_ms(8);
P0=0X00;
P0=table1[dispbuf[2]];//顯示十位
P20=1;
P21=0;
P22=1;
P23=1;
delay_ms(8);
P0=0X00;
P0=table2[dispbuf[1]];//顯示個(gè)位
P20=1;
P21=1;
P22=0;
P23=1;
delay_ms(8);
P0=0X00;
P0=table1[dispbuf[0]];//顯示小數(shù)位
P20=1;
P21=1;
P22=1;
P23=0;
delay_ms(8);
P0=0X00;
}
/****************************************************************************************/
//
//計(jì)算溫度
/****************************************************************************************/
void PT100()
{
double deal,U;//
U=5.0/255.0*getdata; 紅色部分不是很明白其中的意思
deal=U*20*10;
temp=(long int)deal;
if(U<5.2&&U>0)
{
dispbuf[0]=temp%10;
dispbuf[1]=temp/10%10;
dispbuf[2]=temp/100%10;
dispbuf[3]=temp/1000;
}
else
{
dispbuf[0]=temp%10;
dispbuf[1]=temp/10%10;
dispbuf[2]=temp/100%10;
dispbuf[3]=11;
/*dispbuf[0]=0;
dispbuf[1]=0;
dispbuf[2]=0;
dispbuf[3]=0;*/
}
display();
}
/****************************************************************************************/
//
//
/****************************************************************************************/
main()
{
TMOD = 0x10; //定時(shí)器0,工作在定時(shí)器方式
TH1 = (65536-200)/256; //0x3c
TL1 = (65536-200)%256; //0xb0
EA = 1; //開(kāi)總中斷
ET1 = 1; //打開(kāi)(允許)定時(shí)器1中斷
TR1 =1; //開(kāi)始(啟動(dòng))定時(shí)
while(1)
{
STAR=0;
OE=0;
STAR=1;
STAR=0;
while(EOC==0)
{
OE=1;
delay_ms(10);
getdata=P1;
OE=0;
PT100();
}
}
}
/****************************************************************************************/
//
//
/****************************************************************************************/
void t1(void) interrupt 3 using 0 //0:int0 1: t0 2: int1 3:t1 4:串行口
{
TH1 = (65536-200)/256; //0x3c
TL1 = (65536-200)%256; //0xb0
CLOCK=~CLOCK;//給ADC0808一個(gè)時(shí)鐘脈沖(0.2ms) }
_N6GBL{E8776)I8ZIT[C]A3.png (29.03 KB, 下載次數(shù): 79)
下載附件
2021-5-13 11:29 上傳
計(jì)算部分的程序麻煩大佬幫我改一下,值小于0之后,數(shù)碼管一直顯示-25.6,負(fù)數(shù)就一直不變。
大佬們幫我解答一下吧,我太難了。
|
|