我想要实现的动能:当我一直按下按键的时候,点阵上一直显示文字,直到松开时才熄灭。。但是我写出来的这个程序是当我按下按键的时候,点阵上的文字只是亮了一下,然后就灭了,没有等到松手就灭了,再次按下也是亮一下就灭了。
单片机源码如下:
- #include<reg51.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
-
- sbit SRCLK=P3^6;
- sbit RCLK=P3^5;
- sbit SER=P3^4;
- sbit k2=P3^0;
- sbit led=P2^5;
- uchar ledduan[]={0x10,0x30,0x70,0xff,0x70,0x34,0x1e,0x00};
- uchar ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
- void delayms(uint ms)
- {
- uchar i;
- while(ms--)
- for(i=0;i<123;i++);
- }
- void h595send(uchar t)
- {
- uchar i;
- SRCLK=0;
- RCLK=0;
- for(i=0;i<8;i++)
- {
- SER=t>>7;
- t<<=1;
- SRCLK=1;
- _nop_();
- _nop_();
- SRCLK=0;
-
- }
- RCLK=1;
- _nop_();
- _nop_();
- RCLK=0;
- }
- void main()
- {
- uchar i;
- h595send(0x00);
- P0=0x7f;
-
- while(1)
- {
- if(k2==0)
- {
- delayms(10);
- if(k2==0)
- {
- for(i=0;i<8;i++)
- {
- P0=ledwei[i];
- h595send(ledduan[i]);
- delayms(1);
- h595send(0x00); //消隐
- }
- }
- while(!k2); //松手检测
- }
- else h595send(0x00);
- }
- }
复制代码
|