打印

进制转换问题,希望高手详细分析下。

[复制链接]
3481|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lackan|  楼主 | 2011-4-4 22:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
lackan|  楼主 | 2011-4-4 22:58 | 只看该作者
呃,难道就没人能帮忙么?

使用特权

评论回复
板凳
梅开二度| | 2011-4-4 23:02 | 只看该作者
自己思考下,别人给你说的东西没什么意义。
(Value/10)<<4  取value的十位 左移4位
(Value%10) 取value的个位。
你自己觉得这样得到了什么呢?

使用特权

评论回复
地板
lackan|  楼主 | 2011-4-4 23:05 | 只看该作者
自己思考下,别人给你说的东西没什么意义。
(Value/10)
梅开二度 发表于 2011-4-4 23:02

我也学过c++的,就是不太知道那个value的值是怎么存储的而已。。。望指教,我之前有想过的,可是还是想问清楚点,所以。。。

使用特权

评论回复
5
lackan|  楼主 | 2011-4-4 23:20 | 只看该作者
好吧,我算是懂了点。。。

使用特权

评论回复
6
lackan|  楼主 | 2011-4-4 23:47 | 只看该作者
我觉得应该是十六进制转化为BCD码的式子,有不对的话希望大家指出,咱们交流下。。。

使用特权

评论回复
7
原野之狼| | 2011-4-5 00:26 | 只看该作者
不是十六进制转BCD
说整数转BCD更准确些

使用特权

评论回复
8
lackan|  楼主 | 2011-4-5 12:22 | 只看该作者
想请问下,为什么下面这个程序烧进单片机里面为什么不是显示11?
        #include<reg51.h>
                #define uchar unsigned char
                #define uint unsigned int
                sbit acc0=ACC^0;
                sbit acc7=ACC^7;
                sbit led1=P0^4;
                sbit led2=P0^5;
                sbit res=P2^0;
                sbit sclk=P2^1;
                sbit io=P2^2;
                void delay(uint m)
                {
                        uint i,j;
                        for(i=m;i>0;i--)
                                for(j=110;j>0;j--);
                }
                void display(uint num)
                {
                         uchar ge,shi;
                         shi=num/10;
                         ge=num%10;
                         P0=ge;
                            led1=1;
                         led2=0;
                         delay(10);
                         led2=1;
                         P0=shi;
                         led1=0;
                         delay(10);
                         led1=1;
                }
                typedef struct _time{
                        uchar sec;
                        uchar min;
                        uchar hour;
                        uchar day;
                        uchar mon;
                        uchar year;
                }time;
                uchar rd_byte()
                {
                    uint i;
                        for(i=8;i>0;i--)
                        {
                                ACC=ACC>>1;
                                acc7=io;
                                sclk=1;
                                sclk=0;
                        }
                        return(ACC);
                }
                void wr_byte(uchar d)
                {
                        uint i;
                        ACC=d;
                        for(i=8;i>0;i--)
                        {
                                io=acc0;
                                sclk=1;
                                sclk=0;
                                ACC=ACC>>1;
                        }
                }
                void write(uchar add,uchar dat)
                {
                        res=0;
                        sclk=0;
                        res=1;
                        wr_byte(add);
                        wr_byte(dat);
                        sclk=1;
                        res=0;
                }
                uchar read(uchar add)
                {
                        uchar dat;
                        res=0;
                        sclk=0;
                        res=1;
                        wr_byte(add);
                        dat=rd_byte();
                        sclk=1;
                        res=0;
                        return(dat);
                }
                void set_time(uchar add,uchar dat)
                {
                         write(0x8e,0x00);
                         write(add,((dat/10)<<4|(dat%10)));
                }
                void get_time(time *tim)
                {
                        uchar rd_dat;
                        rd_dat=read(0x81);
                        tim->sec=((rd_dat&0x70)>>4)*10 + (rd_dat&0x0F);
                        rd_dat=read(0x83);
                        tim->min=((rd_dat&0x70)>>4)*10 + (rd_dat&0x0F);
                        rd_dat=read(0x85);
                        tim->hour=((rd_dat&0x70)>>4)*10 + (rd_dat&0x0F);
                        rd_dat=read(0x87);
                        tim->day=((rd_dat&0x70)>>4)*10 + (rd_dat&0x0F);
                        rd_dat=read(0x89);
                        tim->mon=((rd_dat&0x70)>>4)*10 + (rd_dat&0x0F);
                        rd_dat=read(0x8d);
                        tim->year=((rd_dat&0x70)>>4)*10 + (rd_dat&0x0F);
                }
                void init()
                {
                        set_time(0x80,40);
                        set_time(0x82,30);
                        set_time(0x84,11);
                        set_time(0x86,7);  
                        set_time(0x88,4);  
                        set_time(0x8C,11);  
                }
                void main()
                {
                        time* t;
                        init();
                        get_time(t);
                        while(1)
                        {
                        display(t->year);
                        }
                }

使用特权

评论回复
9
hgjinwei| | 2011-4-5 12:24 | 只看该作者
准确地说是整数转单字节压缩格式BCD码

使用特权

评论回复
10
lackan|  楼主 | 2011-4-5 12:30 | 只看该作者
本帖最后由 lackan 于 2011-4-5 12:32 编辑

protues的电路图如下,求高手指教。。。

ds1302.png (14.46 KB )

ds1302.png

使用特权

评论回复
11
lackan|  楼主 | 2011-4-5 12:43 | 只看该作者
很急啊,不知道为啥会这样啊~~~

使用特权

评论回复
12
yuyi21ic| | 2011-4-5 13:48 | 只看该作者
LZ我给你个建议:keil中有个Start Debug功能!会使用他的话,你程序中所有的问题将不再是问题。

使用特权

评论回复
13
lackan|  楼主 | 2011-4-5 14:07 | 只看该作者
12# yuyi21ic 谢谢你的建议,我现在试下看看。

使用特权

评论回复
14
lackan|  楼主 | 2011-4-5 14:37 | 只看该作者
发现不会用啊。。。有谁能帮忙看下程序错在哪么?芯片是ds1302。。。

使用特权

评论回复
15
goldenriver| | 2011-4-5 18:06 | 只看该作者
我是来学习的。。。。

使用特权

评论回复
16
lackan|  楼主 | 2011-4-5 20:22 | 只看该作者
希望高手指点下,调了一天都没调好。。。

使用特权

评论回复
17
sdpz| | 2011-4-5 20:41 | 只看该作者
这种低级错误都能犯,悲哀啊。。。
time* t;
get_time(t);

t是个指针,指向未知的内存空间。连数据放在哪都不知道那还写什么程序?前面的代码还用看吗?
time  t;
get_time(&t);
这么简单的东西连猪都知道。好好记住这个教训啦!

使用特权

评论回复
18
GONGHCU| | 2011-4-5 20:58 | 只看该作者
:)

使用特权

评论回复
19
mbutterfly| | 2011-4-5 21:10 | 只看该作者
我也遇到过,不过我是换方式做的。

使用特权

评论回复
20
459571630| | 2011-4-5 22:19 | 只看该作者
建议使用Start Debug功能

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:菜鸟学习东西ing

0

主题

68

帖子

1

粉丝