感谢分享 |
哇,感谢楼主的分享,给我们这些小白提供了学习的资料 |
写得挺好的,点赞,,我下载了你的状态机程序,,为了省点黑币,其他两个我就没下载了,,我看了后自己有些看法,,如果我同一行一个按键压死,,然后我在同一行按下另一个按键呢????还有主函数10Ms检测一次,,为什么数码管显示也放在这个里面???上电数码管亮我觉得不是上面6#说的, readkey=Keyscan(); Display(readkey); 上电按键没按的换Keyscan()返回的应该是0吧,,display(0)对应你的数组不就是全亮???,我觉得应该是这样,试试把数组的全灭数据也就是0x00,放在第一个,,剩下的就按你的按键去排显示的数据就好了 |
感谢楼主 |
多谢楼主了 |
感谢楼主分享,学习一下 |
学习一下 |
很有用。非常感谢分享 |
感谢楼主分享![]() |
之前都是用反转法,现在试试状态机 |
目前用的反转,出了些问题,刚好学习学习 多谢楼主了 |
下载看了状态机,觉得上电数码管亮,好像是初始化显示函数Display_init();那里一开始就把位选全打开了,而每10Ms产生一次中断,主函数中一开始readkey=0xff;然后if(flag){flag=0;readkey=Keyscan();Display(readkey);一开始10ms就显示0XFF,觉得这个位选应该在按键松手才打开,修改如下 void Display_init() { P1=0xFF; //将所有的位选关闭,所有数码管不亮, wela=1; wela=0; P1=0x00; //将段选关闭,也就是刚开始的时候数码管都不亮 dula=1; dula=0; } void Display(uchar num1) { wela=1; P1=0x00; //将所有的位选打开,所有数码管同时亮, wela=0; dula=1; P1=smg_duan[num1]; dula=0; } |
哦,我看的是状态机那个。 下载看了,觉得上电数码管亮,好像是初始化显示函数Display_init();那里一开始就把位选全打开了,而每10Ms产生一次中断,主函数中一开始readkey=0xff;然后if(flag){flag=0;readkey=Keyscan();Display(readkey);一开始10ms就显示0XFF,觉得这个位选应该在按键松手才打开,修改如下 void Display_init() { P1=0xFF; //将所有的位选关闭,所有数码管不亮, wela=1; wela=0; P1=0x00; //将段选关闭,也就是刚开始的时候数码管都不亮 dula=1; dula=0; } void Display(uchar num1) { wela=1; P1=0x00; //将所有的位选打开,所有数码管同时亮, wela=0; dula=1; P1=smg_duan[num1]; dula=0; } |
下载看了,觉得上电数码管亮,好像是初始化显示函数Display_init();那里一开始就把位选全打开了,而每10Ms产生一次中断,主函数中一开始readkey=0xff;然后if(flag){flag=0;readkey=Keyscan();Display(readkey);一开始10ms就显示0XFF,觉得这个位选应该在按键松手才打开,修改如下 void Display_init() { P1=0xFF; //将所有的位选关闭,所有数码管不亮, wela=1; wela=0; P1=0x00; //将段选关闭,也就是刚开始的时候数码管都不亮 dula=1; dula=0; } void Display(uchar num1) { wela=1; P1=0x00; //将所有的位选打开,所有数码管同时亮, wela=0; dula=1; P1=smg_duan[num1]; dula=0; } |
![]() |
在刘平老师的《深入浅出玩转51单片机》里学习过状态机法,看得不是太懂。谢楼主分享了。 |