这两天写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++);
}
}
用户1821401 2015-4-19 13:11