智能车制作

 找回密码
 注册

扫一扫,访问微社区

12
返回列表 发新帖
楼主: lieklieke
打印 上一主题 下一主题

[咨询] 小弟一个简单C语言问题求教!!

[复制链接]

85

主题

877

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
7835

活跃会员奖章优秀会员奖章论坛骨干奖章在线王奖章论坛元老奖章

威望
5349
贡献
1386
兑换币
150
注册时间
2012-12-20
在线时间
550 小时
毕业学校
哈尔滨
11#
 楼主| 发表于 2013-2-17 15:01:55 | 只看该作者
灰原姐姐 发表于 2013-2-17 12:51
贴完整代码出来。包括变量申明。

#include<STC15F2K60S2.H>
#include<intrins.h>

#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

sbit RCK=P4^1;
sbit DS=P4^4;
sbit CLK=P4^2;

void write_595(uint dat);
void display_595(uchar i,uchar j);
void display_595_1(uchar i,uchar j);

uchar code wei[]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar code duan_1[]={0x40,0x79,0x24,0x30,0x19,0x02,0x02,0x78,0x00,0x10};

uchar result;
float vin;
void main()
{
        uchar i;
        uchar a=0,b=0,c=0,status;
        uint temp=0;
        P1ASF=0x10;
        ADC_CONTR=0x84;
        for(i=0;i<10;i++)
        {for(i=0;i<100;i++);}
        while(1)
        {
                ADC_CONTR=0x8c;
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                status=0;
                while(status==0)
                {
                        status=ADC_CONTR&0x10;
                }
                ADC_CONTR=0x81;
                result=ADC_RES;
                vin=(result*5.0)/256.0;
                temp=vin*100;
                a=temp/100;
                b=(temp/10)%10;
                c=(temp%100)%10;
                display_595_1(1,a);
                display_595(2,b);       
                display_595(3,c);       
                P0=~result;
       
        }
}


void write_595(uint dat)
{
        uchar i;
        for(i=0;i<16;i++)
        {
                CLK=0;
                if((dat&0x8000)==0x8000)
                {
                        DS=1;
                }
                else
                {
                        DS=0;
                }
                CLK=1;
                dat<<=1;
        }               
                RCK=0;       
                RCK=1;

}

void display_595(uchar i,uchar j)
{
        uint a=0x0000;
        uchar b=wei;
        uchar c=duan[j];
        a=b<<8;
        a=a+c;
        write_595(a);       
}

void display_595_1(uchar i,uchar j)
{
        uint a=0x0000;
        uchar b=wei;
        uchar c=duan_1[j];
        a=b<<8;
        a=a+c;
        write_595(a);       
}

回复 支持 反对

使用道具 举报

85

主题

877

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
7835

活跃会员奖章优秀会员奖章论坛骨干奖章在线王奖章论坛元老奖章

威望
5349
贡献
1386
兑换币
150
注册时间
2012-12-20
在线时间
550 小时
毕业学校
哈尔滨
12#
 楼主| 发表于 2013-2-17 15:02:59 | 只看该作者
灰原姐姐 发表于 2013-2-17 12:51
贴完整代码出来。包括变量申明。

望灰原姐姐赐教哈  
回复 支持 反对

使用道具 举报

8

主题

337

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2131
威望
1054
贡献
481
兑换币
110
注册时间
2009-6-14
在线时间
298 小时
13#
发表于 2013-2-17 16:51:06 | 只看该作者
去看C语言隐式强转那部分
不是优化的问题,别听她扯淡。
如果result不是double而是int,整个表达式不会隐式强转,除法两边都是int,则做int的整除操作。
如果换成5.0,5.0是double型,乘以result则隐式强转为double,除法两边存在double,做的是除法操作。
回复 支持 反对

使用道具 举报

8

主题

337

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2131
威望
1054
贡献
481
兑换币
110
注册时间
2009-6-14
在线时间
298 小时
14#
发表于 2013-2-17 16:52:10 | 只看该作者
你的result是uchar的,result*5会隐式强转为int。
其他的就不多解释了。
回复 支持 反对

使用道具 举报

85

主题

877

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
7835

活跃会员奖章优秀会员奖章论坛骨干奖章在线王奖章论坛元老奖章

威望
5349
贡献
1386
兑换币
150
注册时间
2012-12-20
在线时间
550 小时
毕业学校
哈尔滨
15#
 楼主| 发表于 2013-2-17 18:07:08 | 只看该作者
jpbirdy 发表于 2013-2-17 16:52
你的result是uchar的,result*5会隐式强转为int。
其他的就不多解释了。

我真心明白了  谢谢哈
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-8 19:54 , Processed in 0.042115 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表