看了官方这个例子,我学到了不少写延时函数技能
/*****************************************************************************************
* 文件名: main.c
* 项目名: 14-LED_8x8
* 版 本: v1.0
* 日 期: 2016年05月31日 15时33分45秒
* 作 者: Administrator
* 程序说明:8X8LED模块循环显示Led_Power_Code中的数据。
* 适用芯片: KF8FXXX系列——KF8F2156、KF8F3156、KF8F4156
* KF8TSXXXX系列——KF8TS2716、KF8TS2516(4x8LED)
* KF8VXXX系列——KF8V327、KF8V427、KF8V429
****************************************************************************************/
#include<KF8TS2716.h>
//定义段码
char const smg_arr[] = {
0Xa0,//0
0Xbe,//1
0X62,//2
0X2a,//3
0X3c,//4
0X29,//5
0X21,//6
0Xba,//7
0X20,//8
0X28,//9
0xff,//关
0xdf, //:
};
int const Led_Power_Code = {
0X00C8,//200
0X0190,//400
0X0320,//800
0X03E8,//1000
0X0514,//1300
0X0640,//1600
0X0708,//1800
0X0834,//2100
};
int display_data;
unsigned inttemp_data;
unsigned char unint,decade,hundred,thound;
//;************************************************************************************
//;* 函 数 名:delay_ms
//;* 函数功能: 延时函数
//;* 入口参数: 无
//;* 返 回:无
//;************************************************************************************
void delay_ms(int ms_data)
{
int j=0;
while(ms_data--)
{
_CWDT();
j=100;
while(j--);
}
}
/****************************************************************************************
* 函数名: init_mcu
* 函数功能:mcu初始化函数
* 入口参数:无
* 返回: 无
****************************************************************************************/
void init_mcu()
{
/***时钟初始化****/
OSCCTL = 0x60; //设置为8M
/***端口初始化****/
TR0 = 0X04; //P02设置为输入,其余口为输出
TR1 = 0x00; //P1设置为输出
TR2 = 0X00; //P2设置为输出
TR3 = 0X00; //P3设置为输出
P0LR=0x00; //P0输出低
P1LR=0x00; //P1输出低
P2LR=0x00; //P2输出低
P3LR=0x00; //P3输出低
P0=0x00;
P1=0x00;
P2=0x00;
P3=0x00;
}
/****************************************************************************************
* 函数名: init_led()
* 函数功能:LED初始化函数
* 入口参数:无
* 返回: 无
****************************************************************************************/
void init_led()
{
LEDOMS0 = 0x00; //推挽输出
LEDOMS1 = 0x00; //推挽输出
LEDPRE = 0x60; //LED时钟源选择1:64分频;LED预分频比选择1:1 500hz
LEDDATA0 = 0XFF;
LEDDATA2 = 0XFF;
LEDDATA3 = 0XFF;
LEDDATA4 = 0XFF;
LEDLUM = 0x05; //设置辉度6:16
LEDCTL = 0x90; //打开LED模块,开通LEDDAT0--LEDDAT4;选择共阴数码管
}
/****************************************************************************************
* 函数名: display_LED()
* 函数功能:LED显示
* 入口参数:无
* 返回: 无
****************************************************************************************/
void display_LED()
{
DIVAH = display_data>>8;
DIVAL = display_data;
DIVB = 10;
DIVEN = 1;
while(!DIVOEN);
unint = DIVR; // 取余数
temp_data = DIVQH;
temp_data = (temp_data<<8) + DIVQL;
DIVAH = temp_data>>8;
DIVAL = temp_data;
DIVB = 10;
DIVEN = 1;
while(!DIVOEN);
decade = DIVR; // 取余数
temp_data = DIVQH;
temp_data = (temp_data<<8) + DIVQL;
DIVAH = temp_data>>8;
DIVAL = temp_data;
DIVB = 10;
DIVEN = 1;
while(!DIVOEN);
hundred = DIVR;
temp_data = DIVQH;
temp_data = (temp_data<<8) + DIVQL;
DIVAH = temp_data>>8;
DIVAL = temp_data;
DIVB = 10;
DIVEN = 1;
while(!DIVOEN);
thound = DIVR;
LEDDATA0 = smg_arr;
LEDDATA2 = smg_arr;
LEDDATA3 = smg_arr;
LEDDATA4 = smg_arr;
}
//主函数
void main()
{
int i=0;
init_mcu();
init_led();
while(1)
{
if(i<7)
{
i++;
}
else
{
i=0;
}
display_data = Led_Power_Code;
delay_ms(2000);
display_LED();
}
}
有没有发现,那个j=0;
而后面有个while(j--);
这非常好啊,j--是先使用,不管后面是个几,都进行了判断,但是什么都不再继续进行。
学了一个大招,这样也不用担心被优化了。
楼主厉害 延时函数是考研软件攻城狮的能力 感谢楼主的分享,不错的例子程序的。 感谢楼主的分享,仔细的复习一下,也是好的。
延时函数很考验技能的 记在小本本上,这样好一些。 多看看别人的代码能学到不少 一些经典的延时函数 可使用不同类型的变量来进行延时设计 可以通过定位器来测量 一种是硬件延时 要用到定时器/计数器,这种方法可以提高CPU的工作效率 使用定时器/计数器实现精确延时 可由晶振频率算出延时时间 最简单的定时器中断 怎么用C语言做单片机的精确延时 Delay()函数延时的时间是怎么计算的 主要采用循环体进行。 单片机的延时程序通过执行指令来达到延时效果
页:
[1]
2