请选择 进入手机版 | 继续访问电脑版
查看: 1029|回复: 0

LEd流水灯中断和数码管中断

[复制链接]
发表于 2018-7-25 18:10:21 | 显示全部楼层 |阅读模式
/*****************************************************
*项目名称:LED流水灯中断
*使用芯片:STC15F2K60S2
*使用晶振:12.000MHz
*日    期:2018.07.25
*作    者:Ice_image
*备    注:无
*版    本:v1.0
*实现功能:8位LED数码管显示
**********头文件********************************************/
#include<STC15F2K60S2.H>

/**********宏定义*************************************************/
#define u8 unsigned char
#define u16 unsigned int

/**************端口定义*******************************************/
//sbit led = P0^4;       //直接在内存中定义
//#define led P04       //定义好之后换了一个名字
#define ledP P0
//#define led1 P05
#define Key P10

//注意变量覆盖问题

/**********************************************************
*函数名称:delay
*函数功能:执行延时程序
*入口函数:z
*出口参数:无
*备    注:无
**********************************************************/
void delay(u16 z){
    u8 x;
    u16 y;
    for(y = z; y > 0; y--){
        for(x = 255; x > 0; x--);
    }
}

/**********************************************************
*函数名称:IO_Init
*函数功能:IO初始化程序
*入口函数:无
*出口参数:无
*备    注:无
**********************************************************/
void IO_Init(){
    P0M0 = 0x00;        //普通I/O输出
    P0M1 = 0x00;
    //led = 0x01;
}

/**********************************************************
*函数名称:main
*函数功能:执行主程序
*入口函数:无
*出口参数:无
*备    注:无
**********************************************************/
void main(){
    bit flag = 1;
    IT0 = 1;         //外部中断0下降沿触发
    EX0 = 1;        //外部中断0允许位
    EA = 1;
    IO_Init();
    while(1){
        if(flag){
            u8 x;
            u8 A = 0x01;
            for(x = 0; x < 8; x++){
                ledP = ~A;
                A = (A << 1);
                delay(5000);
            }
            flag = 0;
        }else{
            u8 x;
            u8 A = 0x40;
            for(x = 0; x < 6; x++){
                ledP = ~A;
                A = (A >> 1);
                delay(5000);
            }
            flag = 1;
        }
    }
}

/***************************************
*函数名称:Int0
*函数功能:实现硬件中断
***************************************/

//中断处理函数的写法  中断之后需要处理的程序放置在中断函数中

void Int0() interrupt 0{
    ledP = 0x00;
    delay(1000);   
}

/**********************************************************数码管中断*************************************************************************************************/
/*****************************************************
*项目名称:LED数码管中断(从左到右)
*使用芯片:STC15F2K60S2
*使用晶振:12.000MHz
*日    期:2018.07.24
*作    者:Ice_image
*备    注:无
*版    本:v1.0
*实现功能:8位LED数码管显示
**********头文件********************************************/
#include<STC15F2K60S2.H>

/**********宏定义*************************************************/
#define u8 unsigned char
#define u16 unsigned int

/**************端口定义*******************************************/
//sbit led = P0^4;       //直接在内存中定义
//#define led P04       //定义好之后换了一个名字
#define ledP P0
//#define led1 P05
#define Key P10
static u8 i;

//注意变量覆盖问题

/**********************************************************
*函数名称:delay
*函数功能:执行延时程序
*入口函数:z
*出口参数:无
*备    注:无
**********************************************************/
void delay(u16 z){
    u8 x;
    u16 y;
    for(y = z; y > 0; y--){
        for(x = 255; x > 0; x--);
    }
}

/**********************************************************
*函数名称:IO_Init
*函数功能:IO初始化程序
*入口函数:无
*出口参数:无
*备    注:无
**********************************************************/
void IO_Init(){
    P0M0 = 0xff;        //P0.4为推挽输出
    P0M1 = 0x00;
    //led = 0x01;
    ledP = 0x3f;
}

/**********************************************************
*函数名称:main
*函数功能:执行主程序
*入口函数:无
*出口参数:无
*备    注:无
**********************************************************/
void main(){
    //u8 time[16] = {0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09, 0x11, 0xc1, 0x63, 0x85, 0x61, 0x71};        //共阳极
    u8 time[16] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};              //共阴极
    IT0 = 1;
    EX0 = 1;
    EA = 1;
    IO_Init();                        //IO初始化
    while(1){
        for(i = 0; i < 10; i++){
            ledP = time[i];
            delay(5000);
        }
    }
}

void Int1() interrupt 0 {
    i = 0;
    ledP = 0x3f;
    delay(2000);
}



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表