本帖最后由 inazuma 于 2015-8-26 17:48 编辑
- #include <msp430x14x.h>
- #define wei_h P5OUT |= BIT5
- #define wei_l P5OUT&= ~BIT5
- #define duan_l P6OUT&= ~BIT6
- #define duan_h P6OUT |= BIT6
- #define keyin (P1IN & 0x0f)
- typedef unsigned char uchar;
- uchar duan[6]={0x3f,0x06,0x5b,0x4f,0x66,0x00};
- uchar wei [9]={0x00,0xfe,0xfd,0xfb,0xf7,
- 0xef,0xdf,0xbf,0x7f};
- void delay(void);
- void shumaguan(void);
- void main(void)
- {
- WDTCTL = WDTPW + WDTHOLD;
- uchar temp,k,x=0,a=5,b=5,c=5,d=5,e=5,f=5,g=5,h=5;
- P6DIR |= BIT2;
- P6OUT |= BIT2;
- P1DIR = 0;
- P1OUT = 0;
- P4DIR = 0xff;
- P4OUT = 0xff;
- P5DIR = 0xff;
- P6DIR = 0xff;
- while (1)
- {
- loop:if (keyin !=0x0f)
- {
- delay();
- if (keyin !=0x0f)
- {
- temp=keyin;
- while (keyin !=0x0f);
- switch (temp)
- {
- case 0x0e: k = 1; break;
- case 0x0d: k = 2; break;
- case 0x0b: k = 3; break;
- case 0x07: k = 4; break;
- default: k = 0; break;
- }
- x++;
- if (x>8)x=1;
- switch (x)
- {
- case 1:a=k;break;
- case 2:b=k;break;
- case 3:c=k;break;
- case 4:d=k;break;
- case 5:e=k;break;
- case 6:f=k;break;
- case 7:g=k;break;
- case 8:h=k;break;
- default:break;
- }
- while (1)
- {
- shumaguan();
- P4OUT=duan[a];
- duan_h;
- duan_l;
- P4OUT=wei[1];
- wei_h;
- wei_l;
- P4OUT=duan[b];
- duan_h;
- duan_l;
- P4OUT=wei[2];
- wei_h;
- wei_l;
- P4OUT=duan[c];
- duan_h;
- duan_l;
- P4OUT=wei[3];
- wei_h;
- wei_l;
- P4OUT=duan[d];
- duan_h;
- duan_l;
- P4OUT=wei[4];
- wei_h;
- wei_l;
- P4OUT=duan[e];
- duan_h;
- duan_l;
- P4OUT=wei[5];
- wei_h;
- wei_l;
- P4OUT=duan[f];
- duan_h;
- duan_l;
- P4OUT=wei[6];
- wei_h;
- wei_l;
- P4OUT=duan[g];
- duan_h;
- duan_l;
- P4OUT=wei[7];
- wei_h;
- wei_l;
- P4OUT=duan[h];
- duan_h;
- duan_l;
- P4OUT=wei[8];
- wei_h;
- wei_l;
- if(keyin !=0x0f)
- {
- goto loop;
- }
- }
- }
- }
- }
- }
- void delay(void)
- {
- unsigned int x;
- for(x = 12000;x > 0;x--);
- }
- void shumaguan(void)
- {
- unsigned int w;
- for(w=3000;w>0;w--);
- }
复制代码
最近买了一个学习板,想做一个按键控制数码管显示的功能,但是不知道哪里有错一直显示不正常。希望给位能帮帮我谢谢!
功能如下:
1:4个按键按下后能分别显示1~4的数字在数码管上。
2:数码管由两个4位八段数码管组成,并使用两个74HC573控制。
3:当第一次按下任意一个按键时,数码管第一位点亮相应的数字,
4:当第二次按下任意一个按键时,数码管第二位点亮相应的数字,同时第一位不变,····
5:当第九次按下任意一个按键时,数码管第一位点亮相应的数字,其他位不变。
但是显示有问题
1:第一次按下按键1时
数码管第一位和第八位同时点亮
2:第二次按下按键2时
数码管第3位显示2,第二位显示的是1和2的合体。
希望各位能指正一下程序的错误出在哪里谢谢!!
此帖出自
小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
goto语句明明可以用break语句代替的,非得用强行跳转,这样程序结构会显得混乱,别人看不懂程序会在哪循环,很少人会跟着你的程序去跳转的。
第二个就是变量名称不明确,我到现在没看明白里面的x是用来干嘛的,程序也几乎看不下去,是通过现象来分析故障原因的。
第三个,程序几乎没有注释,加上变量、函数命名混乱,几乎是连蒙带猜才搞明白程序的大概运行流程。想细查都没查,实在查不下去了。
谢谢!
其实最近才开始学C语言,汇编重来没学过。
一周热门 更多>