| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 18037 人关注过本帖, 1 人收藏
标题:这是一段4位共阳极数码管”从0到9循环显示数字“的程序,不知道是什么意思望 ...
只看楼主 加入收藏
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
结帖率:81.82%
收藏(1)
已结贴  问题点数:10 回复次数:4 
这是一段4位共阳极数码管”从0到9循环显示数字“的程序,不知道是什么意思望前辈们来看看~~
这是一段4位共阳极数码管”从0到9循环显示数字“的程序,其中有好多地方都不理解,比如说“di”是什么,如何实现数字的从0到9的来回循环显示等。望各位前辈详细讲解一下,最好是在各关键代码上详细注释一下。小弟必将虚心采纳,致谢!
程序代码:
#include "reg51.h" 
#include "intrins.h" 
#include"absacc.h" 
#include"math.h" 
typedef unsigned char BYTE; 
typedef unsigned int   WORD; 
/* LED口地址*/ 
#define led_data XBYTE[0x6000] //写命令
BYTE led_w; 
BYTE 
led_dm[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0:0xc0,1:0xf9,2:0xa4,3:0xb0,4:0x99,5:0x92,6:0x82,7:0xf8,8:0x80,9:0x90 
BYTE di; 
/*****************LED显示位置********************/ 
void LED_crt(BYTE val)  
{ 
led_data=led_dm[val];//0:0xc0,1:0xf9,2:0xa4,3:0xb0,4:0x99,5:0x92,6:0x82,7:0xf8,8:0x80,9:0x90 
 P2 |= 0xff; 

 P2 &= led_w; 
led_w>>=1; 
if (led_w==0x0f) led_w=0xf7; 
} 
void Delay(WORD n) 
{ 
WORD x; 
while(n--) 
{ 

 x=500;  while(x--); 
} 
} 
void main() 
{ 
led_w=0xf7; 
di=0;
while(1)   
{ 
  LED_crt(di); 
  di++; 
  if(di>0x09) di=0; 

 Delay(1000);  } 
搜索更多相关主题的帖子: 数码管 如何 最好 
2015-05-18 10:05
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
收藏
得分:0 
回复 楼主 弟大勿勃
有木有人~~
2015-05-18 11:20
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:10 
不懂单片机
2015-05-18 14:07
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
收藏
得分:0 
2015-05-18 20:27
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
收藏
得分:0 
程序代码:
#include "reg51.h" 
#include "intrins.h" 
#include"absacc.h" 
#include"math.h" 
typedef unsigned char BYTE; 
typedef unsigned int   WORD; 
/* LED口地址*/ 
#define led_data XBYTE[0x6000] //写命令
BYTE led_w; 
BYTE 
led_dm[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0:0xc0,1:0xf9
,2:0xa4,3:0xb0,4:0x99,5:0x92,6:0x82,7:0xf8,8:0x80,9:0x90 
BYTE di; 
/*****************LED显示位置********************/ 
void LED_crt(BYTE val) // val与主函数的di对应,di初值等于0则相当于数组取第0位(数码管显示0)//
{ 
led_data=led_dm[val];//0:0xc0,1:0xf9,2:0xa4,3:0xb0,4:0x99,5:0x92,6:0x82,7:0xf
8,8:0x80,9:0x90 
 P2 |= 0xff; //p2与1111 1111相或,使p2为1111 1111(此时位选都不亮)
 P2 &= led_w; //p2与led-w的初值1111 0111相与,相当于点亮第四位数码管
led_w>>=1; //1111 0111右移一位,变成0111 1011(第3位数码管亮)
if (led_w==0x0f) led_w=0xf7; //当led-w==0000 1111时使led-w重新置为1111 0111
} 
void Delay(WORD n) 
{ 
WORD x; 
while(n--) 
{ 
 x=500;  while(x--); 
} 
} 
void main() 
{ 
led_w=0xf7; //led=11110111,第四位数码管点亮
di=0; 

while(1)   
{ 
  LED_crt(di); //选取led-dm数组中的值
  di++;//di自加 
  if(di>0x09) di=0; //当di加到9的时候使di又置0
 Delay(1000); //延迟,为了使数码管循环能被肉眼清楚看到 
} 
}
2015-05-18 21:38
快速回复:这是一段4位共阳极数码管”从0到9循环显示数字“的程序,不知道是什么 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018369 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved