2989|3

3

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

如下代码为什么不能实现动态扫描 [复制链接]

#include
#include
unsigned char LED_CODE[]={0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f};
void delay(void)
{ int k;
  for(k=0;k<=600;k++);
}
void main()  
{
      P2=0x1; //位选
      P1=LED_CODE[k/1000]; //显示千万位数字
      delay(); //延时

      P2=0x2; //位选
      P1=LED_CODE[k%1000/100]; //显示百万位数字
      delay(); //延时

      P2=0x4; //位选
      P1=LED_CODE[k%100/10]; //显示十万位数字
      delay(); //延时

      P2=0x8; //位选
      P1=LED_CODE[k%10]; //显示万位数字
   delay(); //延时

      P2=0x10;
      P1=LED_CODE[k%10000/1000];  //千
      delay();

      P2=0x20;
      P1=LED_CODE[k%1000/100];    //百
      delay();

      P2=0x40;
      P1=LED_CODE[k%100/10];    //十
      delay();
      
      P2=0x80;      
      P1=LED_CODE[k%10];          //个
     delay();

     P2=0xff;
}

我自认为这段代码的MAIN函数就类似汇编里的 void delay(void)就类似汇编里的DELAY_1MS
MOV  A , #3FH
MOV  P1 , A
MOV  P2 , #1H
LCALL DELAY_1MS

MOV A , #6H
MOV P1, A
MOV P2 , #2H
LCALL DELAY_1MS
........
MOV A , #80H
MOV P1 , A
MOV P2 , #7H
LCALL DELAY_1MS

delay_1ms: mov  r6,#2
temp:      mov  r5,#0ffh
               djnz r5,$
              djnz r6,temp
              ret
end
但汇编能正常显示0-7为什么C就不行了呢,我还想问下汇编里DELAY_1MS后面个步的具体意思~~~~

[ 本帖最后由 ohno0126 于 2009-2-6 14:00 编辑 ]
此帖出自单片机论坛

最新回复

没加循环是初级错误,用delay使用软件,用中断使用硬件,使用资源不同,不过使用中断是要不使用延时程序好些!个人建议!  详情 回复 发表于 2009-2-11 13:04
点赞 关注
 

回复
举报

1759

帖子

0

TA的资源

裸片初长成(高级)

沙发
 

Re: [求助] 如下代码为什么不能实现动态扫描

程序是顺序运行的  你这个程序运行仅仅一次就结束了 按照下面的程序就是可以的
void main()  
{
while(1)
{     
P2=0x1; //位选
      P1=LED_CODE[k/1000]; //显示千万位数字
      delay(); //延时

      P2=0x2; //位选
      P1=LED_CODE[k%1000/100]; //显示百万位数字
      delay(); //延时

      P2=0x4; //位选
      P1=LED_CODE[k%100/10]; //显示十万位数字
      delay(); //延时

      P2=0x8; //位选
      P1=LED_CODE[k%10]; //显示万位数字
   delay(); //延时

      P2=0x10;
      P1=LED_CODE[k%10000/1000];  //千
      delay();

      P2=0x20;
      P1=LED_CODE[k%1000/100];    //百
      delay();

      P2=0x40;
      P1=LED_CODE[k%100/10];    //十
      delay();
      
      P2=0x80;      
      P1=LED_CODE[k%10];          //个
     delay();

     P2=0xff;
}
}
此帖出自单片机论坛

赞赏

1

查看全部赞赏

 
个人签名南京璞晓电子   www.cpx0.com需要
msn:njlianjian@hotmail.com
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

Re: [求助] 如下代码为什么不能实现动态扫描

就看了几眼你的程序,一个建议:动态扫描用定时器中断来做是目前企业里采取的比较标准的做法,用delay程序不规范。
此帖出自单片机论坛

赞赏

1

查看全部赞赏

 
 
 

回复

537

帖子

0

TA的资源

五彩晶圆(初级)

4
 

Re: [求助] 如下代码为什么不能实现动态扫描

没加循环是初级错误,用delay使用软件,用中断使用硬件,使用资源不同,不过使用中断是要不使用延时程序好些!个人建议!
此帖出自单片机论坛

赞赏

1

查看全部赞赏

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
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
快速回复 返回顶部 返回列表