[示例代码]

看了官方这个例子,我学到了不少写延时函数技能

[复制链接]
5600|30
手机看帖
扫描二维码
随时随地手机跟帖
jiekou001|  楼主 | 2021-4-25 15:19 | 显示全部楼层 |阅读模式
/****************************************************************************************
*
* 文件名: main.c
* 项目名: 14-LED_8x8
* 版 本: v1.0
* 日 期: 2016年05月31日 15时33分45秒
* 作 者: Administrator
* 程序说明:8X8LED模块循环显示Led_Power_Code[8]中的数据。
* 适用芯片: 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[8] =         {
                                         0X00C8,  //200
                                                                   0X0190,  //400
                                                                   0X0320,  //800
                                                                   0X03E8,  //1000
                                                                   0X0514,  //1300
                                                                   0X0640,  //1600
                                                                   0X0708,  //1800
                                                                   0X0834,  //2100
                                                            };
int display_data;
unsigned int  temp_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[thound];
        LEDDATA2 = smg_arr[hundred];
        LEDDATA3 = smg_arr[decade];
        LEDDATA4 = smg_arr[unint];
}
//主函数
void main()
{
        int i=0;
        init_mcu();
        init_led();
        while(1)
        {
                if(i<7)
                {
                        i++;
                }
                else
                {
                        i=0;
                }
                display_data = Led_Power_Code[i];
                delay_ms(2000);
                display_LED();
        }
}


65308608517d4a2e87.png
有没有发现,那个j=0;
而后面有个while(j--);
这非常好啊,j--是先使用,不管后面是个几,都进行了判断,但是什么都不再继续进行。
学了一个大招,这样也不用担心被优化了。

使用特权

评论回复
两只袜子| | 2021-4-27 16:14 | 显示全部楼层
楼主厉害

使用特权

评论回复
weifeng90| | 2021-5-7 19:18 | 显示全部楼层
延时函数是考研软件攻城狮的能力

使用特权

评论回复
单片小菜| | 2021-5-7 22:46 | 显示全部楼层
感谢楼主的分享,不错的例子程序的。

使用特权

评论回复
嵌入小菜菜| | 2021-5-7 23:49 | 显示全部楼层
感谢楼主的分享,仔细的复习一下,也是好的。

使用特权

评论回复
yangxiaor520| | 2021-5-11 08:10 | 显示全部楼层
延时函数很考验技能的

使用特权

评论回复
单片小菜| | 2021-5-12 11:55 | 显示全部楼层
记在小本本上,这样好一些。

使用特权

评论回复
weifeng90| | 2021-6-3 21:06 | 显示全部楼层
多看看别人的代码能学到不少

使用特权

评论回复
sanfuzi| | 2021-6-4 11:54 | 显示全部楼层
一些经典的延时函数  

使用特权

评论回复
uiint| | 2021-6-4 11:54 | 显示全部楼层
可使用不同类型的变量来进行延时设计

使用特权

评论回复
hellosdc| | 2021-6-4 11:55 | 显示全部楼层
可以通过定位器来测量  

使用特权

评论回复
mituzu| | 2021-6-4 11:55 | 显示全部楼层
一种是硬件延时   

使用特权

评论回复
suzhanhua| | 2021-6-4 11:56 | 显示全部楼层
要用到定时器/计数器,这种方法可以提高CPU的工作效率

使用特权

评论回复
isseed| | 2021-6-4 11:56 | 显示全部楼层
使用定时器/计数器实现精确延时  

使用特权

评论回复
wangdezhi| | 2021-6-4 11:56 | 显示全部楼层
可由晶振频率算出延时时间  

使用特权

评论回复
biechedan| | 2021-6-4 11:57 | 显示全部楼层
最简单的定时器中断  

使用特权

评论回复
chenci2013| | 2021-6-4 11:57 | 显示全部楼层
怎么用C语言做单片机的精确延时  

使用特权

评论回复
gygp| | 2021-6-4 11:57 | 显示全部楼层
Delay()函数延时的时间是怎么计算的

使用特权

评论回复
suzhanhua| | 2021-6-4 11:58 | 显示全部楼层
主要采用循环体进行。   

使用特权

评论回复
isseed| | 2021-6-4 11:58 | 显示全部楼层
单片机的延时程序通过执行指令来达到延时效果  

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

118

主题

1238

帖子

2

粉丝