/****************************************************************************************
*
* 文件名: 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();
}
}
有没有发现,那个j=0;
而后面有个while(j--);
这非常好啊,j--是先使用,不管后面是个几,都进行了判断,但是什么都不再继续进行。
学了一个大招,这样也不用担心被优化了。
|