一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 4102|回复: 18

[其他综合] 数码管的段选问题?流水灯的问题?

[复制链接]
发表于 2012-5-30 07:48 | 显示全部楼层 |阅读模式
#include <reg52.h>
#include <intrins.h>

typedef unsigned char uint8 ;
typedef unsigned int  uint16;
sbit BZ=P3^3;
/*
void delay(uint16 k) // k=1时,延时1.321ms
{
uint16 i,j;
for(i=0;i<k;i++)
  for(j=0;j<257;j++);
}
void delay_us(uint8 t)     //1~255   US    12MHZ
{
uint8 s;
for(s=0;s<t;s++)
_nop_();
}
*/
void delay_ms(uint16 m)  //1~65535 MS 12MHZ
{
uint16 d,g;
for(d=0;d<m;d++)
{
   for(g=0;g<1000;g++)
   _nop_();
}
  
}

void BZ_P(bit tt,uint8 d,uint16 z) // NO/OFF;N;delay
{
uint8 s;
if(tt==1)
{
  for(s=0;s<d;s++)
  {
   BZ=~BZ;
   delay_ms(z);
   
  }
}

}

void LED_L(bit q,bit i,uint16 ww,uint16 jj)
{
LED_Left(q,ww);
LED_Right(i,jj);

}
void LED_Left(bit cc,uint16 aa)    //ON/OFF,ON/OFF,delay;delay
{
uint8 n,tm;
//cc=0;
if(cc==1)
{
  tm=0x80;
  for(n=0;n<8;n++)
  {
   P1=~tm;
   BZ_P(1,4,50);
   delay_ms(aa);
   tm>>=1;
  }
}
}
void LED_Right(bit dd,uint16 bb)
{
uint8 n,tm;
//dd=0;
if(dd==1)
{
  tm=0x01;
  for(n=0;n<8;n++)
  {
   P1=~tm;
   BZ_P(1,6,40);
   delay_ms(bb);
   tm<<=1;
  }
}
   
}   

/*void LED_L2(bit ff,dd,uint16 a,b)    //ON/OFF,ON/OFF,delay;delay
{
uint8 m;
if(ff==1)
{
  for(m=8;m>0;m--)
  {
   P1=~(1<<m-1);
   BZ_P(0,3,100);
   delay(a);
  }

}

else if(dd==1)
{
   for(m=0;m<8;m++)
  {
   P1=~(1<<m);
   BZ_P(1,1,500);
   delay(b);
}
}
void main()
{
while(1)
{
  LED_L(0,1,100,10);
   
}
}

实现开/关左右流水灯+延时的功能,为什么就编译不过去呢?
还有就是数码管的段操作
bai=temp/100;
   shi=temp%100/10;
   ge=temp%10;
这是3为数码管的推算,如果要是6,8位数码管,该怎么推算呢?

请教高手!!!
发表于 2012-5-30 09:12 | 显示全部楼层
bai=temp/100;
   shi=temp%100/10;
   ge=temp%10;
如果4位 你在设一个qian 变量,
回复

使用道具 举报

发表于 2012-5-30 09:16 | 显示全部楼层
uchar ge,shi,bsi,qian;


qian=temp/1000
bai=temp/100%10;
   shi=temp/10%10;
   ge=temp%10;
回复

使用道具 举报

 楼主| 发表于 2012-5-30 09:25 | 显示全部楼层
不明白,设计千变量或万变量;是如何计算的是怎么使用计算求余,求莫运算的,求余代表分出那个位?求莫代表分出那个位?是从高位到底为分出,还是低位到高分出(千万到个位还是个位到千万)?怎么就能分出 千万,百万,十万,万,千,百,十,个位的显示段位?请说的细一点,谢谢,总之就是不明白利用“%”“/”是怎么分出千万位到个位的,或者分到更高的位数
回复

使用道具 举报

发表于 2012-5-30 12:48 | 显示全部楼层
1234%10=4

被10除剩下4

qian=temp/1000
这个事里面有几个1000,,1234的话就是1
回复

使用道具 举报

 楼主| 发表于 2012-5-31 00:37 | 显示全部楼层
谢谢你的指导;"1237"
qian=temp/1000          取出商1
bai=temp/100%10;      这个怎么能计算的?
shi=temp/10%10;        这个怎么能计算的?
ge=temp%10;              取出余7

”temp=12345678“
qianwan=temp/10000000
banwan=?
shiwan=?
wan=?

gw168sh :可以加你QQ吗:
回复

使用道具 举报

发表于 2012-5-31 21:39 | 显示全部楼层
建议楼主啃几天c语言
回复

使用道具 举报

 楼主| 发表于 2012-6-1 00:37 | 显示全部楼层
正要准备买书呢,高手给推荐几本好书嘛?
回复

使用道具 举报

 楼主| 发表于 2012-6-1 08:24 | 显示全部楼层
怎么又没人搭理了
回复

使用道具 举报

发表于 2012-6-5 13:51 | 显示全部楼层
谢谢你的指导;"1237"
qian=temp/1000          取出商1
bai=temp/100%10;      这个怎么能计算的?
shi= ...
酷爱diy 发表于 2012-5-31 00:37 https://www.yleee.com.cn/images/common/back.gif



    这个错了吧,正确的应该是这样的:
qian=temp%10000/1000;   //先对10000求余,再对1000求商
bai=temp%1000/100;
shi=temp%100/10;
ge=temp%10;
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-11-4 20:16 , Processed in 0.039355 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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