如果你不会写程序,给你了也没用给你个思路:预先定于一个寄存器keynum,首先有按键检测程序,每检测到一次按键,keynum ,在显示程序里判断keynum是几,如果是,第一个灯亮,其他的灭,依次类推,如果keynum=,第八个灯亮,同时清除kwenum。main中的while(;后面有分号,程序不断停留在while(;导致以后的大括号中语句都是废的.去掉这个分号立即搞定。
单片机的流水灯程序,因为程序就这么写的,决定了流水灯左移,,再右移,,结束两个循环后,才能执行下面的while(!key),按键才有效,而在循环过程中,不执行while(!key),所以按键无效。下图画红框内的两个循环。要想按键随时有效,应该把两个移位函数_cror_,_crol_放在主程中。state,(state,<, ,//本语句的前半截为左移,,则低,变为,需要补充,,即,,=,,以关闭低,的灯。
你这程序应该编译都无法过的。includedefineucharunsignedchardefineuintunsignedintvoidDelayMS(uchara){uchari,;while(a–)for(i=,i<,i );}voidmain(){ucharnum=,fe;uinti,j,m,n;P,=,ff;while({for(j=,j<,j;j ){P。每个LED三格管脚,假设,,,亮红,,,亮绿,,,亮黄,则,发光二级管共需,管脚,取P,和P,控制,LED,P,P,P,LED,P,p,p,LED,P,p,p,LED,p,p,p,P,,;P,,;亮,红灯;P。
很简单。按下时,灯亮,同时累加计时。松开时,递减计时,减到了零,灯灭。includesbitkey,=P,,sbitkey,=P,,sbitled,=P,,sbitled,=P,,voidDelay(unsignedintx){unsignedinti,j;for(i=,i<x;i )for(j=,j<=,j );}//KEY,一下LED,再按一下LED,//KEY,下LED。
暂无评论内容