❶ 求51单片机 延时1秒钟的子程序(没什么要求)
如果使用的是11.0592MHz的晶振,那么编写延时子程序的方式可以如下所示:
void delay(uint xms) { int i,j; for(int i=xms;i>0;i--) for(j=148;j>0;j--); }
在上述代码中,delay(1)代表延时1毫秒(ms),因此要实现1秒的延时,只需调用delay(1000)。这种方法基于内部循环和固定值148的外部循环来实现延时。
值得注意的是,这个延时函数的具体实现可能需要根据实际情况进行调整,以确保准确的延时时间。例如,148这个数值是基于特定晶振频率计算得出的,如果晶振频率不同,这个值也需要相应调整。
此外,如果你对延时子程序的编写有更多疑问或需要进一步的帮助,可以随时提问。
在实际应用中,这种简单的延时方法可能不够精确,特别是在需要高精度延时的情况下。为了提高延时的准确性,可以考虑使用更复杂的方法,如使用定时器中断等。
如果你在编写延时子程序时遇到困难或想要了解更多信息,不妨详细描述你的问题,以便得到更具体的帮助。
❷ 单片机,为什么一秒的延时不起作用了
程序确实存在一些问题,数码管显示异常可能是因为P2端口的8个引脚并没有正确控制数码管的显示。直接使用LED = i;这样的语句会导致输出的数字不是连续递增的,而是可能跳跃或不连续。这是由于单片机在执行该指令时,并不能保证立即更新LED的状态。
为了确保数码管能够正确显示数字,需要考虑以下几个方面:首先,确保数码管的每一位都有独立的控制信号,以便可以逐位更新显示内容。其次,使用延时函数以确保每次更新LED状态之间有足够的时间间隔,避免因更新速度过快而导致显示异常。再次,检查程序中的循环和逻辑是否正确,确保每次循环都能正确地更新LED的值。
此外,还可以尝试使用位操作来控制P2端口,例如P2.0 = i & 0x01; P2.1 = i & 0x02;等,这样可以更精确地控制LED的状态。同时,增加适当的延时,如使用delay_us(100);或delay_ms(1);等函数,确保每次更新LED状态之间有足够的间隔,以避免输出不连续的问题。
综上所述,程序的问题主要在于未正确控制数码管的显示和未使用适当的延时函数。通过改进程序结构,确保数码管的每一位都有独立的控制信号,并使用适当的延时函数,可以解决数码管显示异常的问题。