求解数码管的程序为什么走的是流水灯c语言程序,而数码管却不亮

数码管流水灯式显示数据
我的图书馆
数码管流水灯式显示数据
数码管流水灯式显示数据
&本文引用地址:电路图在下面下面是汇编程序代码:D0 BIT P2.0 D1 BIT P2.1 D2 BIT P2.2 D3 BIT P2.3 D4 BIT P2.5 ORG 0000H SJMP START ORG 0040HSTART:MOV SP,#60H MOV R0,#00H MOV R1,#20 MOV DPTR,#TABLE SETB D4 MOV A,R0 MOVC A,@A+DPTR //1
MOV P0,A CLR D0 LCALL DELAY MOV R1,#20 INC R0 MOV A,R0 MOVC A,@A+DPTR //2 MOV P0,A SETB D0 CLR D1 LCALL DELAY MOV R1,#20 INC R0 MOV A,R0 MOVC A,@A+DPTR //3 MOV P0,A SETB D1 CLR D2 LCALL DELAY MOV R1,#20 INC R0 MOV A,R0 MOVC A,@A+DPTR //4 MOV P0,A SETB D2 CLR D3 LCALL DELAY MOV R1,#20 INC R0 MOV A,R0 MOVC A,@A+DPTR //5 MOV P0,A SETB D3 CLR D0 LCALL DELAY MOV R1,#20 INC R0 MOV A,R0 MOVC A,@A+DPTR //6 MOV P0,A SETB D0 CLR D1 LCALL DELAY MOV R1,#20 INC R0 MOV A,R0 MOVC A,@A+DPTR //7 MOV P0,A SETB D1 CLR D2 LCALL DELAY MOV R1,#20 INC R0 MOV A,R0 MOVC A,@A+DPTR //8 MOV P0,A SETB D2 CLR D3 LCALL DELAY MOV R1,#20 INC R0 MOV A,R0 MOVC A,@A+DPTR //9 MOV P0,A SETB D3 CLR D0 LCALL DELAY MOV R1,#20 INC R0 MOV A,R0 MOVC A,@A+DPTR //10 MOV P0,A SETB D0 CLR D1 LCALL DELAY MOV R1,#20 INC R0 MOV A,R0 MOVC A,@A+DPTR //11 MOV P0,A SETB D1 CLR D2 LCALL DELAY MOV R1,#20 INC R0 MOV A,R0 MOVC A,@A+DPTR //12 MOV P0,A SETB D2 CLR D3 LCALL DELAY MOV R1,#20 INC R0 MOV A,R0 MOVC A,@A+DPTR //13 MOV P0,A SETB D3 CLR D0 LCALL DELAY MOV R1,#20 INC R0 MOV A,R0 MOVC A,@A+DPTR //14 MOV P0,A SETB D0 CLR D1 LCALL DELAY MOV R1,#20 INC R0 MOV A,R0 MOVC A,@A+DPTR //15 MOV P0,A SETB D1 CLR D2 LCALL DELAY MOV R1,#20 INC R0 MOV A,R0 MOVC A,@A+DPTR //16 MOV P0,A SETB D2 CLR D3 LCALL DELAY SETB D3 LJMP START DELAY:MOV R7,#200 DEL1:MOV R6,#125 DEL2:DJNZ R6,DEL2 DJNZ R7,DEL1 DJNZ R1,DELAY RETTABLE:DB 0C0H,0F9H,0A4H,0B0H DB 99H,92H,82H,0F8H DB 80H,90H,88H,83H DB 0C6H,0A1H,86H,8EH END&
喜欢该文的人也喜欢红外解码的数码管显示程序 sbit dula=P2^6; sbit wela=P2^7是..... - 单片机/MCU论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
红外解码的数码管显示程序 sbit dula=P2^6; sbit wela=P2^7是.....
13:36:36  
#include &reg51.h&
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
& && && && && && && && &0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
#define Imax 14000& & //此处为晶振为11.0592时的取值,
#define Imin 8000& & //如用其它频率的晶振时,
#define Inum1 1450& & //要改变相应的取值。
#define Inum2 700
#define Inum3 3000
unsigned char Im[4]={0x00,0x00,0x00,0x00};
uchar show[2]={0,0};
unsigned long m,Tc;
unsigned char IrOK;
void delay(uchar i)
&&uchar j,k;
&&for(j=i;j&0;j--)
& & for(k=125;k&0;k--);
void display()
& &dula=0;
& &P0=table[show[0]];
& &dula=1;
& &dula=0;
& &wela=0;
& &wela=1;
& &wela=0;
& &delay(5);
& &P0=table[show[1]];
& &dula=1;
& &dula=0;
& &wela=1;
& &wela=0;
& &delay(5);
..............
上面的sbit dula=P2^6; sbit wela=P2^7;分别是什么意思??
这里的P2^6和P2^7和IO口的P2^6,P2^7有什么关系??dula和wela是用来显示键值所用的数码管的段和位吗?把他们定义成P2^6和P2^7和数码管段与位所连接的IO口有关系吗?
另外uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,& && && && && &0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};是显示这些码代表的键?还是用这些码所代表的数码管的段和位或者别的什么的来显示按键值??本人菜鸟,望达人指教
13:54:47  
這是定義的段選和位選的I/O口,分別與連接數碼管段和位的兩個鎖存器的使能端。
14:45:58  
多谢楼上达人指点!
那就是如果我的数码管是接其他的IO,只要重新定义IO口,红外解码出来的信息会自动存储到对应的锁存器吗?
不明白的是红外解码出来的键值不是类似于0xfe,0x7f,0x5e等等之类的数吗,一位数码管比如上面程序里位选是P2^7,那不是一个数码管吗,也可以全部显示出来吗
助理工程师
18:29:46  
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71对应数码管显示0,1,2,3,4,5,6,7,8,9,a,b,c,,d,e,f
助理工程师
18:31:56  
io口随便定义,定义哪个就接哪个了
助理工程师
18:38:39  
建议还是看看数码管的结构吧,每个段不就是个发光LED灯嘛,P0口的每一位连到对应的段上(段就是上面那一杠杠,包括小数点就是8杠),你想哪段亮就哪段亮呗,大不了不是任何数字,只是我们需要某几个亮组成一个数字
助理工程师
18:39:13  
建议再看看单片机的基础知识
助理工程师
18:40:20  
这IO口最基础了,看看个把小时总比瞎想好
助理工程师
18:44:18  
最后再说一个就,多段数码管相当于多个单一的数码管的组合,只是这些数码管的段地址连在一起,我没用过数码管,可能说错了,百度相关器件文档自己看吧
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司查看: 736|回复: 5
求助,我希望按一下K1流水灯点亮一个,并在数码管显示点亮的个数,为什么不成功,而是按一下K1,数码管数字加1
主题帖子精华
新手入门, 积分 43, 距离下一级还需 -23 积分
在线时间0 小时
我希望按一下K1流水灯点亮一个,并在数码管显示点亮的个数,为什么不成功,而是按一下K1,数码管数字加1,但流水灯则不正确。
[C] 纯文本查看 复制代码#include \"stm32f10x.h\"
#include \"SysTick.h\"
#include \"led.h\"
#include \"KEY.h\"
#include \"LED.h\"
#include \"TIMER.h\"
void display(count)
switch(count)
LED0 = light&0x01
LED1 = light&0x02
LED2 = light&0x04
LED3 = light&0x08
LED4 = light&0x10
LED5 = light&0x20
LED6 = light&0x40
LED7 = light&0x80
case 0: LedValue(0x00);
case 1: LedValue(0x01);
case 2: LedValue(0x03);
case 3: LedValue(0x07);
case 4: LedValue(0x0f);
case 5: LedValue(0x1f);
case 6: LedValue(0x3f);
case 7: LedValue(0x7f);
case 8: LedValue(0xff);
* 函数名:main
int main(void)
int count=0;
int count1=0;
SysTick_Init();
Timerx_Init(1,720);
SEGTABLE_INIT();
LED_GPIO_Config();
// LED_SEL(1);
//LED灯点亮
Key_Config_Operation(1,1,1);
if(flag_100us==1)
LED_SEL(0);
SHOWNUM(7,count);
Delay_us(10);
LED_SEL(1);
KEY_CHECK(1,1,1);
if(key1_flag)
//key1按下去采取的动作
key1_flag=0;
if(count1%2==0)
if(count&=0&&count&8)
display(count);
LedValue(0xff);
//当LED灯全亮时,K1,K2键锁死
if(key2_flag)
//key2按下去采取的动作
key2_flag=0;
if(count1%2==0)
if(count&0&&count&=8)
display(count);
LedValue(0xff);
if(key3_flag) //key3按下去采取的动作
key3_flag=0;
switch(count1%2)
display(count);
case 1: LedValue(0xff);
Delay_us(10);
[C] 纯文本查看 复制代码void LedValue(unsigned char light)
LED1(light&0x01?1:0);
LED2(light&0x02?1:0);
LED3(light&0x04?1:0);
LED4(light&0x08?1:0);
LED5(light&0x10?1:0);
LED6(light&0x20?1:0);
LED7(light&0x40?1:0);
LED8(light&0x80?1:0);
/*用于点亮具体数码管及其显示的值*/
void SHOWNUM(int weixuan,int num)
// LED_SEL(1);
LedValue(0x00);
LED_SEL2(weixuan/4);
LED_SEL1(weixuan%4/2);
LED_SEL0(weixuan%2);
LED_SEL(0);
LedValue(segTable[num%10]);
请帮忙看一下代码。
11:15 上传
点击文件名下载附件
3.94 MB, 下载次数: 25
因為你寫得太亂 一堆名詞定義都很相近 有改掉一些
主题帖子精华
高级会员, 积分 545, 距离下一级还需 455 积分
在线时间110 小时
因為你寫得太亂 一堆名詞定義都很相近 有改掉一些
17:05 上传
点击文件名下载附件
3.5 MB, 下载次数: 42
主题帖子精华
高级会员, 积分 545, 距离下一级还需 455 积分
在线时间110 小时
你的LedValue
到底是控制LED&還是控制七段顯示器阿
註解搞得我好亂
主题帖子精华
新手入门, 积分 43, 距离下一级还需 -23 积分
在线时间0 小时
回复【2楼】Rocks:
---------------------------------
回复【2楼】Rocks:
---------------------------------
我打算设计的是按一次K1键一个LED灯点亮,并且在数码管上显示点亮灯的个数。
LED_SEL(0)表示点亮数码管
LED_SEL(1)表示点亮流水灯
主题帖子精华
新手入门, 积分 43, 距离下一级还需 -23 积分
在线时间0 小时
回复【4楼】Rocks:
---------------------------------
O(∩_∩)O谢谢
主题帖子精华
新手入门, 积分 43, 距离下一级还需 -23 积分
在线时间0 小时
回复【4楼】Rocks:&
---------------------------------
大神,main函数中true,与false未定义,是什么意思。
Powered by急求C51单片机12灯流水灯4位数码管控制程序啊,要求数码管跟灯都能亮,最好有注释_百度知道
急求C51单片机12灯流水灯4位数码管控制程序啊,要求数码管跟灯都能亮,最好有注释
我有更好的答案
我不知道你的数码管是不是共阴,如果是共阳的话在给你改一下。程序代码如下,你可以下载到你单片机测试一下。 #include&reg51.h&sbit
Shmag_01 = P0^0;sbit
Shmag_02 = P0^1;sbit
Shmag_03 = P0^2;sbit
Shmag_04 = P0^3;#define
// 宏定义LED灯数据端口 P2端口0-7#define
// 宏定义数码管数据端口 P1端口0-7 unsigned char code Volat_table[]={ 0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f }; //把LED位码放在code里unsigned char code Valat_Shmag[]={ 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
//数码管0-F显示段码
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 };/* * 带形参1ms的延时子函数**/void Delay_1ms(unsigned int Time){ unsigned int x,y; for(x = T x & 0; x--)
for(y = 120; y & 0; y--);}/* * 点亮LED流水灯子函数**/void Light_waterCmd(void){
//定义变量
for(i = 0; i & 8; i++)
// i= 0; 加加 i= 8;结束 {
DATA_Out = Volat_table[i];
//P2口 LED灯 从第一个到第八亮
Delay_1ms(500);
//延时500ms LED1亮500,熄灭 LED1亮500 熄灭............. }
}/* * 数码管扫描显示子函数**/void Shmag_waterCmd(void){ unsigned char Tfor(Temp = 0; Temp & 16; Temp++) {
DATE_Out = Valat_Shmag[Temp];
Delay_1ms(500);
}/* * 程序主函数【函数主体】**/int main(void){
Shmag_01 = 0;
//数码管位1显示开启 Shmag_02 = 0;
//数码管位2显示开启 Shmag_03 = 0;
//数码管位3显示开启 Shmag_04 = 0;
//数码管位4显示开启while(1)
//大循环 {
Light_waterCmd(); //一直循环点亮LED1---LED7;
Shmag_waterCmd();
//一直循环数码管显示0--F; }}
采纳率:85%
你可以用D1~D12控制12个LED灯的亮灭,用W1~W4以及ABCDEFGDp控制四个数码管,没有问题的,都可以亮,毫不冲突。这个程序只需要简单的端口定义和输出控制,如果你还是不会,留下邮箱。
都是问程序的,硬件的飘过-----
为您推荐:
其他类似问题
流水灯的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。周热销排行
用户评论(0)
在此可输入您对该资料的评论~
添加成功至
资料评价:}

我要回帖

更多关于 流水灯c语言程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信