STC32G

延时函数控制LED闪烁

 

#include <STC32G.H>   //头文件 

#define ON     0        //共阳极LED,低电平点亮 宏定义
#define OFF 1        //共阳极LED,高电平熄灭 宏定义

#define MAIN_Fosc 12000000UL        //定义主频12MHz

typedef unsigned char u8;                //unsigned char            类型用u8 表示
typedef unsigned int u16;                //unsigned int            类型用u16表示
typedef unsigned long int u32;    //unsigned long int    类型用u32表示

sbit LED1 = P2^0;                //LED1使用P2.0
sbit LED2 = P2^1;                //LED1使用P2.1
sbit LED3 = P2^2;                //LED1使用P2.2
sbit LED4 = P2^3;                //LED1使用P2.3
sbit LED5 = P2^4;                //LED1使用P2.4
sbit LED6 = P2^5;                //LED1使用P2.5
sbit LED7 = P2^6;                //LED1使用P2.6
sbit LED8 = P2^7;                //LED1使用P2.7

void delay1(u16 ms);        //delay1 2层for循环实现
void delay2(u16 ms);        //delay2 do...while循环实现

void main()
{
    WTST = 0;                                        //设置读取指令等待时间为0,CPU运行程序速度最快
    P2M1 = 0x00;P2M0 = 0x00;        //设置P2口为准双向口模式
    while(1)
    {
        LED1 = ON;                                //点亮LED1
        LED2 = ON;
        LED3 = ON;
        LED4 = ON;
        LED5 = ON;
        LED6 = ON;
        LED7 = ON;
        
        delay1(2000);                            //延时1000毫秒(低电平延时,由delay1延时)                                
        LED1 = OFF;                                //熄灭LED1
        LED2 = OFF;
        LED3 = OFF;
        LED4 = OFF;
        LED5 = OFF;
        LED6 = OFF;
        LED7 = OFF;
        delay2(1000);                            //延时1000毫秒(高电平延时,由delay2延时)
    }
}

void delay1(u16 ms)                        //简单延时函数,自适应主频,1毫秒*ms
{
    volatile u16 i;
    volatile u32 j;                            //volatile关键字防止变量i,j被编译器优化
    for(i = 0; i < ms;i++)
        for(j = 0;j < MAIN_Fosc / 9000;j++);
}

void  delay2(u16 ms)                    //简单延时函数,自适应主频,1毫秒*ms
{
    u16 i;
    do{
            i = MAIN_Fosc / 6000;
            while(--i);
        }while(--ms);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值