这两天写lcd1602的驱动程序,要用到延时程序,都是从别人那考现成的,不知道怎么调试,昨天看了用keil调试延时程序的文章,今天调好了两个程序,一个是1ms为基准的,1个100ms为基准的,
/*******************************延时函数******************************************/ #include <reg51.h> //#include <intrins.h> #define MHz 12 //晶振频率
void delay_1ms(unsigned char delay); // 基准为1ms的延时函数,最大255ms void delay_100ms(unsigned char delay);
/************************************1ms基准延时函数******************************/ /*延时函数,基准值为1ms,最大255毫秒 */ /*********************************************************************************/ void delay_1ms(unsigned char delay) { unsigned char i,j,tmp; tmp = (char)((100*MHz)/12+23); //根据晶振频率计算内层循环初值,调整23可以对延时时间进行微调 for(i=0;i<delay;i++) { for(j=0;j<tmp;j++); } }
/**********************************100ms基准延时函数******************************/ /*延时函数,基准值为100ms,最大25 秒 */ /*********************************************************************************/ void delay_100ms(unsigned char delay) { unsigned char i; unsigned int j, tmp; tmp = (int)100*((100*MHz)/12-17); //根据晶振频率计算内层循环次数,调整17可以对延时时间进行微调 for(i=0;i<delay;i++) { for(j=0;j<tmp;j++); } }
|