找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2138|回复: 7
收起左侧

为什么小于20时奇数取余错了。比如3除2取余显示的是1.0不是1.5

[复制链接]
ID:853017 发表于 2020-12-2 17:15 | 显示全部楼层 |阅读模式
#include<reg51.h>
#define uchar unsigned char

#define dula P0
#define wela P2

sbit k4=P3^6;
sbit k5=P3^7;
sbit beep=P2^3;


bit stop=1,scp=0;

unsigned char j,k,num0,num1,num2,num3,sec,min,count=0;
unsigned char time_count;
unsigned char code weitable[]={0x8f,0x4f,0x2f,0x1f};

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                                                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
                                                        0x87,0xff,0xef};

void delay(unsigned char i)
{
        for (j=i;j>0;j--)
         for(k=125;k>0;k--);
}



void display1 (uchar wei,uchar shu)
{
        wei=wei-1;
        wela|=0xf0;

        if(wei==3)
        P0=table1[shu];
        else
        P0=table[shu];
        wela=wela&weitable[wei];
        delay(10);


        if(sec<10)
        if(wei==1)
        P0=table1[shu];
        else
        P0=table[shu];
        wela=wela&weitable[wei];
        delay(10);

}

void display(unsigned char c,unsigned char d)
{
        display1 (4,0);
        display1 (3,5);

        if(sec<10)
                {       
                display1 (1,c);
                display1 (2,d);
                }
                else if(sec>9)
                {
                display1 (2,c);
                display1 (1,d);       
                }

}

void start_timer()
{
        ET0=1;
        EA=1;
        TR0=1;
}

void stop_timer()
{

        ET0=0;
        EA=0;
        TR0=0;
}

void main()
{
        int z=0;
        TMOD=0x01;
        TH0=(65536-46080)/256;
        TL0=(65536-46080)%256;

while(1)
{
        if(k4==0)
                {
                        delay(10);
                        if(k4==0)
                        {
                                 while(k4==0);
                                {
                                        if(stop)
                                        {
                                        start_timer();
                                        scp=~scp;
                                        stop=~stop;
                                        beep=1;
                                        sec=0;
                                       
                                        }                               
                                }
                       
                         }
               
                  }
        if(k5==0)
          {
                   delay(10);
                if(k5==0)
                {               
                                       
                        while(k5==0);
                        {
                       
                        stop_timer();
                        scp=~scp;               
                        stop=1;                                                                                                                                                                                       
                        }                               
                }
                     
          }
                 

                if(time_count==20)
          {
                  count=0;
                time_count=0;
                sec++;
                if(sec==100)
                {
                        sec=0;
               
                }
                beep=0;
                delay(10);
                beep=1;
          }
          if(scp==1)
          {          
          num0=sec%10;
          num1=sec/10;          
          display(num1,num0);
          }
          else if(scp==0)
          {                                           
          num0=sec/2%10;
          num1=sec/2/10;          
          display(num1,num0);          
          }
}
}

void rimer0()interrupt 1
{
        TH0=(65536-46080)/256;
        TL0=(65536-46080)%256;
        time_count++;       
}                                                                               

回复

使用道具 举报

ID:451718 发表于 2020-12-2 17:30 | 显示全部楼层
51不支持浮点运算的,你一定是哪里地方10倍值换算的时候搞错了。
回复

使用道具 举报

ID:278840 发表于 2020-12-2 17:46 | 显示全部楼层
3/2取余数不就是1吗????
回复

使用道具 举报

ID:853017 发表于 2020-12-2 17:55 | 显示全部楼层
robinsonlin 发表于 2020-12-2 17:30
51不支持浮点运算的,你一定是哪里地方10倍值换算的时候搞错了。

好的谢谢
回复

使用道具 举报

ID:57657 发表于 2020-12-2 22:03 | 显示全部楼层
浮点运算需要float或double数据类型
回复

使用道具 举报

ID:83493 发表于 2020-12-2 22:34 | 显示全部楼层
3/2取余数就是1啊,没毛病么
回复

使用道具 举报

ID:213173 发表于 2020-12-3 07:40 | 显示全部楼层
楼主把小学算术忘了吧,3÷2=1余1。取余,不是取商!
回复

使用道具 举报

ID:712493 发表于 2020-12-3 09:34 | 显示全部楼层
楼主把小学算术忘了吧,3÷2=1余1。取余,不是取商!
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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