还是关于预编译的各位大侠帮小弟看看?该怎么解决
发布时间:2010-06-14 15:42:06 文章来源:www.iduyao.cn 采编人员:星星草
还是关于预编译的各位大侠帮小弟看看??
这是disp.h
#ifndef _DISP_H_
#define _DISP_H_
extern void ddelay(unsigned char i);
///*显示数码*/
#ifdef _DISLED_
void display(unsigned char n,unsigned char s);
#endif
/*根据量程high-low,转换为十进制数*/
#ifdef _DECPV_
extern float DecToPv(unsigned char,float,float);
#endif
///*显示P E*/
#ifdef _DISERR_
extern void displayPErr();
#endif
#ifdef _DISI_
void make_led_inumber(int i_num);
void displayIF(int num);
#else
/** 制作数码管整数数据*/
void make_led_fnumber(float f_num);
void displayIF(float num);
#endif
#endif
disp.c
#include <reg52.h>
#include <intrins.h>
#include "disp.h"
extern unsigned int LED_buf[4];
extern unsigned char code LEDn[15]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
0xf8,0x80,0x90,/*0-9*/0xff/*不显示*/,0xbf/*-*/,0x86/*E*/,0x7f/*小数点*/,0x8c/*p*/};
extern unsigned char code LEDs[4]={0xf7/*right*/,0xfb,0xfd,0xfe/*left*/};
void ddelay(unsigned char i)
{
unsigned char j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
#ifdef _DISLED_
void display(unsigned char n,unsigned char s)
{
P2=LEDs[s];
P0=LEDn[n];
}
#endif
#ifdef _DECPV_
/*char型转化为float,根据量程*/
float DecToPv(unsigned char in,float low,float high)
{
float ren;
ren=(high-low)*(float)((float)in/256);
return ren;
}
#endif
#ifdef _DISERR_
void displayPErr()
{
P0=0XFF; //P
P2=LEDs[3];
P0=LEDn[14];
//display(14,3);
ddelay(10);
P0=0XFF; //E
P2=LEDs[2];
P0=LEDn[12];
//display(12,2);
ddelay(10);
}
#endif
#ifdef _DISI_
/** 制作数码管整数数据*/
void make_led_inumber(int i_num)
{
bit s_flag=0;
int sit;
unsigned int i;
if (i_num < 0)
{
s_flag = 1;
i_num = -i_num;
}
// ET0 = 0;
for (i=2, sit=100; i>=1; i--, sit/=10)
{
if (i_num >= sit)
break;
LED_buf[i] = LEDn[10];
i_num -= i_num/sit*sit;
}
for (;i>=1; i--, sit/=10)
{
LED_buf[i] = LEDn[i_num/sit];
i_num -= i_num/sit*sit;
}
LED_buf[0] = LEDn[i_num] & 0x7F;
if (s_flag)
LED_buf[3] = LEDn[11];
else
LED_buf[3] = LEDn[10];
// ET0 = 1;
}
void displayIF(int num)
{
unsigned char Led_n=0;
make_led_inumber(num);
for(Led_n=0;Led_n<=3;Led_n++)
{
P0=0XFF;
P2=LEDs[Led_n];
P0=LED_buf[Led_n];
ddelay(5);
}
}
#else
/** 制作数码管浮点数据*/
void make_led_fnumber(float f_num)
{
bit s_flag=0;
int num;
int sit;
char i, decimal, dot_sit=0;
if (f_num < 0)
{
s_flag = 1;
f_num = -f_num;
}
num = (int)(f_num*100+0.5);
for (decimal=2; decimal>0; decimal--)
{
if (num % 10 != 0)
break;
num /= 10;
}
dot_sit = decimal;
if (f_num >= 100)
dot_sit = 0;
else if (f_num >= 10)
if (decimal >= 1)
dot_sit = 1;
else if (f_num >= 1)
if (decimal >= 2)
dot_sit = 2;
for (i=0; i<dot_sit; i++)
f_num *= 10;
num = (int)(f_num+0.5);
// ET0 = 0;
for (i=2, sit=100; i>=1; i--, sit/=10)
{
if (num >= sit)
break;
if (i == dot_sit)
break;
LED_buf[i] = LEDn[10];
num -= num/sit*sit;
}
for (;i>=1; i--, sit/=10)
{
LED_buf[i] = LEDn[num/sit];
num -= num/sit*sit;
}
LED_buf[0] = LEDn[num];
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
c51串口求助!
串口接收程序如下
void rec_gps(void) interrupt 4 {
uchar str;
uint i,k;
k=0;
i=0;...
-
win7运行CodeWarrior IDE出错
我的本安装了CodeWarrior IDE,一运行就会出现提示:
IDE 4.1 Build 0622 已停止工作。
或者提示:
Unha...
-
关于AT指令控制GSM短信猫的问题
C/C++ code
打开串口
BOOL CComm::OpenComm(const char* pPort,
int nBaudRa...
-
关于51中断求教
各位大虾,我现在要做一个GPS授时的小程序,遇到如下困惑,求大虾们解答:
1 线路板上带有时钟芯片,平时显示时间是...
-
atd指令拨号,如何判断电话状态
在网上找了许久,终于找到一位仁心解决方案,这个指令是可以得到手机当时的状态,但是不管是空号、欠费、...
-
知道在哪跑飞,跑飞的详细原因有谁能解释一下。
今天出现这样的问题:
将这个中断函数注释掉:
#pragma vector=USCI_B2_VECTOR
__in...
-
51程序移植到2051
大牛们,我想吧一个51的程序移植到2051中,用NXP的89V51芯片时用到的I/O口只有P1.0 P1.1 P1.2 3三个,我现在移植到AT...
-
一道课程设计题:基于单片机的波形发生器的设计
设计要求:
1.能产生正弦波、方波、三角波、锯齿波等4种周期性波形,并且可通过调节变...
-
解析单片机最小系统及相关电路
原文出自:电子发烧友论坛——单片机论坛[color=#FF0000][/color]
单片机最小系统单片机最小系统介...
-
单片机学习书籍大全推荐
在电子发烧友论坛里看到了单片机学习资料汇总,特地搜罗了过来,不知道大家看过几本,也希望让需要学习的人 都...