0
程序大大大大神帮帮忙,数码管显示不正确,但是程序应该没问题啊啊
#include "reg51.h"
#include "intrins.h" //_nop_();延时函数用
#define uchar unsigned char //用uchar代替unsigned char,1字节0-255
#define uint unsigned int //用uint代替nsigned int,2字节0-26653
***it SO=P1^0; //P1.0口与SO相连
***it SCK=P1^1; //P1.1口与SCK相连
***it CS=P1^2; //P1.2口与CS相连
uint j;
float wendu;
uint Read_AD(); //AD转换数据数据读取,并返回值
void Display_temp(); //温度显示
void delay(uint t);
uchar qian=0,bai=0,shi=0,ge=0,xiao=0; //初始化LED
uint temp;
uchar code tab_1[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //共阳LED段码表
uchar code tab_2[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //含小数点共阳段码 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
uchar code tab_3[4]={0x01,0x02,0x04,0x08}; //位码
void delay(uint t)
{
uchar x;
uchar y;
for(x=0;x
for(y=0;y<110;y++);
}
uint Read_AD( ) // AD转换数据读取子函数,并返回值
{
uchar i;
unsigned long Temp_2;
Temp_2=0;
CS=1;
SCK=0;
_nop_(); //这个_nop_()等效与汇编里面的NOP指令,即空一个机器周期,
CS=0;
for(i=0;i<16;i++) //16位数据读取
{
Temp_2<<=1; //向左移一位
_nop_();
SCK=1; //上升沿脉冲
if(SO==1) {Temp_2=Temp_2|0x01;}
else Temp_2=Temp_2|0x00;
_nop_();
SCK=0;
_nop_();
}
CS=1;
Temp_2=Temp_2&0x7FF8; //取3-14位
Temp_2=Temp_2*1024/4096; //变换为温度值
return(Temp_2); //返回值
}
void Display_temp() //温度显示子函数
{
uint temp=wendu*10;
if(wendu<=1000) //最高读取温度设定为500摄氏度
{
bai=temp%10000/1000; //取百位数字
shi=temp%1000/100; //取十位数字
ge=temp%100/10; //取个位数字
xiao=temp%10; //动态扫描显示各位数字,P3.1-P3.4口输出位码
P3=0x00;
P0=tab_1[bai];
P3=tab_3[0]; //显示百位数字
delay(10); //延时
P3=0x00;
P0=tab_1[shi];
P3=tab_3[1]; //显示十位数字
delay(10);
P3=0x00;
P0=tab_2[ge];
P3=tab_3[2]; //显示个位数字
delay(10);
P3=0x00;
P0=tab_1[xiao];
P3=tab_3[3]; //显示小数位
delay(10);
}
}
void main( ) //主程序
{
delay(10);
while(1)
{
wendu=Read_AD(); // 热电偶数据读取,返回温度
Display_temp(); //温度显示
}
}
|
|