2593|6

78

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

数码管电子钟的开机显示, [复制链接]

我想叫开机的时候初始化位00—00—00;
我感觉自己写的很麻烦的,希望大家给个简单的。
#include
#define uchar unsigned char
#define uint  unsigned int
char num;
uchar code table[8]={0x03,0x03,0xfd,0x03,0x03,0xfd,0x03,0x03};//00-00-00
uchar code table1[10]={0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09}; //0-9
void delay(uint del)
{
        uchar i, j;
        for(i=0; i         for(j=0; j<=148; j++);

}
//***************开机显示 00-00-00 *************
void init ()
{
           P2=0x80;
          P0=table[0];
          delay(5);
          P2=0x40;
          P0=table[1];
          delay(5);
          P2=0x20;
          P0=table[2];
          delay(5);
          P2=0x10;
          P0=table[3];
          delay(5);
          P2=0x08;
          P0=table[4];
          delay(5);
          P2=0x04;
          P0=table[5];
          delay(5);
          P2=0x02;
          P0=table[6];
          delay(5);
          P2=0x01;
          P0=table[7];
          delay(5);         

}
void main()
{
   while(1)
   {
      init();
        }
}

最新回复

恩,的确用>>好些  详情 回复 发表于 2010-3-7 08:09
点赞 关注
 

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
#include
#include  记得添加这个文件,否则用不了左移指令
#define uchar unsigned char
#define uint  unsigned int
char num;
uchar code table[8]={0x03,0x03,0xfd,0x03,0x03,0xfd,0x03,0x03};//00-00-00
uchar code table1[10]={0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09}; //0-9
void delay(uint del)
{
uchar i, j;
for(i=0; i for(j=0; j <=148; j++);

}
//***************开机显示 00-00-00 *************
void init ()
{                   uchar i,b;
b=0x80;
for(i=0;i<8;i++)
    { P2= b;
          P1=table;
          b=  _cror_ (b,i) ;
delay(5);
        }
void main()
{
  while(1)
  {
      init();
}
}
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
给楼上的建议:
1.如果不是必须,最好不使用芯片专用的指令。如_cror_ (b,i) ;这样会给你的代码移植带来问题
2.C语言提供了左右移的运算符:<<和>>,有兴趣的话,你可以比较一下它和_cror_ (b,i) ;的驱别

要是可能,要不你写一个用C运算符下的版本?

呵呵

 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
建议都用数组,用一个for循环,从数组中还是比较快的,用左右移动的也可以
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用楼主 kangyonghui 的回复:
//***************开机显示 00-00-00 *************
void init ()
{
? ? ? ? ? P2=0x80;
? P0=table[0];
? delay(5);
? P2=0x40;
? P0=table[1];
? delay(5);
? P2=0x20;
? P0=table[2];
? delay(5);
? P2=0x10;
? P0=table[3];
? delay(5);
? P2=0x08;
? P0=table[4];
? delay(5);
? P2=0x04;
? P0=table[5];
? delay(5);
? P2=0x02;
? P0=table[6];
? delay(5);
? P2=0x01;
? P0=table[7];
? delay(5);
}

用for循环就可以实现了.

  1. void init()
  2. {
  3.   uchar i;
  4.   for(i=0;i<8;i++)
  5.   {
  6.      P2=1<<(7-i);
  7.      P1=table[i];
  8.      delay(5);
  9.   }
  10. }
  11. }
复制代码
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 4 楼 tcdzyq 的回复:
引用楼主 kangyonghui 的回复://***************开机显示 00-00-00 ************* void init () { ? ? ? ? ? P2=0x80; ? P0=table[0]; ? delay(5); ? P2=0x40; ? P0=table[1]; ? delay(5); ? P2=0x20; ? P0=table[2]; ? delay(5); ? P2=0x10; ? P0=table[3]; ? delay(5); ? P2=0x08; ? P0=table[4]; ? delay(5); ? P2=0x04; ? P0=table[5]; ? delay(5); ? P2=0x02; ? P0=table[6]; ? delay(5); ? P2=0x01; ? P0=table[7]; ? delay(5); }
用for循环就可以实现了.
C/C++ codevoid init()
{
  uchar i;for(i=0;i<8;i++)
  {
     P2=1<<(7-i);
     P1=table;
     delay(5);
  }
}
}

下载到板子里面没有显示啊,好像不对吧。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 2 楼 lbing7 的回复:
给楼上的建议:
1.如果不是必须,最好不使用芯片专用的指令。如_cror_ (b,i) ;这样会给你的代码移植带来问题
2.C语言提供了左右移的运算符: < <和>>,有兴趣的话,你可以比较一下它和_cror_ (b,i) ;的驱别

要是可能,要不你写一个用C运算符下的版本?

呵呵


恩,的确用>>好些
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
艾睿电子& Silicon Labs 有奖直播 | 全新蓝牙信道探测:从技术创新到实际应用
直播时间:3月12日(周三)上午10:00
直播奖励:多功能榨汁机、蓝牙音箱、手机支架

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表