300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > c语言一位共阳数码管编程 求一个共阳四位数码管滚动显示1234的程序

c语言一位共阳数码管编程 求一个共阳四位数码管滚动显示1234的程序

时间:2023-09-01 00:04:48

相关推荐

c语言一位共阳数码管编程 求一个共阳四位数码管滚动显示1234的程序

/*******************************************************************************

* 文件名: 数码管

* 描述:

* 功能:数码管的使用

* 作者:大核桃

* 版本号:1.0.1(.05.23)

*******************************************************************************/

#include "stc15w.h"//头文件

#include "intrins.h"

/*******************************************************************************

* 文件名: 重定义

* 描述:

* 功能:

* 作者:大核桃

* 版本号:1.0.1(.05.23)

*******************************************************************************/

typedef unsigned char uint8;

typedef unsigned intuint16;

typedef unsigned long uint32;

/*******************************************************************************

* 文件名:共阳数码管真值表

* 描述:

* 功能:

* 作者:大核桃

* 版本号:1.0.1(.03.03)

*******************************************************************************/

code uint8 LedChar[] = {

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e

};

uint8 counter = 0;

/*******************************************************************************

* 文件名:单独位定义

* 描述:

* 功能:

* 作者:大核桃

* 版本号:1.0.1(.05.23)

*******************************************************************************/

sbit LED0 = P1^0;//第1组LED

sbit LED1 = P1^1;//第2组LED

sbit LED2 = P1^2;//第3组LED

sbit LED3 = P1^3;//第4组LED

sbit LED4 = P1^4;//第5组LED

sbit LED5 = P3^2;//第6组LED

sbit LED6 = P0^0;//第7组LED

sbit LED7 = P0^1;//第8组LED

sbit LEDS1 = P3^3;//数码管1

sbit LEDS2 = P3^4;//数码管2

sbit LEDS3 = P3^6;//数码管3

sbit LEDS4 = P3^7;//数码管4

/*******************************************************************************

* 文件名:函数前置声明

* 描述:

* 功能:

* 作者:大核桃

* 版本号:1.0.1(.05.23)

*******************************************************************************/

void Mcu_Port_Init();

void LedScan();

void Delay500ms(); //24MHZ

void Time0_Init();//定时器0

/*******************************************************************************

* 文件名

* 描述: 主函数

* 功能:入口

* 作者:大核桃

* 版本号:1.0.1(.05.23)

*******************************************************************************/

void main(void)

{

uint8 count = 0;

Mcu_Port_Init();//IO上电初始化

Time0_Init();

LED0 = 0;//第1组LED,如果使能请置为1

LED1 = 0;

LED2 = 0;

LED3 = 0;

LED4 = 0;

LED5 = 0;

LED6 = 0;

LED7 = 0;

while(1);

}

/*******************************************************************************

* 文件名:void LedScan()

* 描述: LED刷新

* 功能:

* 作者:大核桃

* 版本号:1.0.1(.05.23)

*******************************************************************************/

void LedScan()

{

static uint8 i = 0;

P2 = 0Xff;

switch(i)

{

case 0: LEDS4 = 0;LEDS1 = 1;P2 = LedChar[counter];i++;break;

case 1: LEDS1 = 0;LEDS2 = 1;P2 = LedChar[counter];i++;break;

case 2: LEDS2 = 0;LEDS3 = 1;P2 = LedChar[counter];i++;break;

case 3: LEDS3 = 0;LEDS4 = 1;P2 = LedChar[counter];i = 0;break;

default:break;

}

}

/*******************************************************************************

* 文件名:void Time0_Init()

* 描述: 定时器0初始化

* 功能:1毫秒@11.0592MHz

* 作者:大核桃

* 版本号:1.0.1(.05.23)

*******************************************************************************/

void Time0_Init(void)

{

AUXR |= 0x80; //定时器时钟1T模式

TMOD &= 0xF0; //设置定时器模式

TL0 = 0xCD; //设置定时初值

TH0 = 0xD4; //设置定时初值

ET0 = 1;

TR0 = 1; //定时器0开始计时

EA = 1;

}

/*******************************************************************************

* 文件名:

* 描述: 中断函数

* 功能:1毫秒@11.0592MHz

* 作者:大核桃

* 版本号:1.0.1(.05.23)

*******************************************************************************/

void ET0_IRQHandler() interrupt 1

{

static uint16 tmr500ms = 0;

TL0 = 0xCD; //设置定时初值

TH0 = 0xD4; //设置定时初值

LedScan();

tmr500ms++;

if(tmr500ms == 500)

{

tmr500ms = 0;

//小灯间隔500ms亮灭

counter++;

if(counter > 9)

{

counter = 0;

}

}

}

/*******************************************************************************

* 文件名:void Mcu_Port_Init()

* 描述: io初始化

* 功能:

* 作者:大核桃

* 版本号:1.0.1(.05.23)

*******************************************************************************/

void Mcu_Port_Init()

{

//将P0口低二位配置为推挽输出

//234567位配置位高阻输入

P0M1 = 0xFC;//1111 1100

P0M0 = 0X03;//0000 0011

//P0 = 0X01;//第6个

//P0 = 0X02;//第7个

//高3位配置高阻输入,用作模拟口

//其他配置推挽输出,驱动LED

P1M1 = 0xE0;//1110 0000

P1M0 = 0X1F;//0001 1111

//P2口配置准双向口

P2M1 = 0X00;

P2M0 = 0X00;

P2 = 0Xff; //上电为1111 1111

// //P54,P55口为推挽输出

P5M1 = 0X00;

P5M0 = 0X00;

P5 = 0xFF;

//P37,P36,3.2,P3.3 P3.4口为推挽输出

P3M1 = 0X00;

P3M0 = 0XFC;

P3 = 0X23; //0010 0111//第5个LED端口

}

/*******************************************************************************

* 文件名:void Delay500ms() //@24.000MHz

* 描述:Y5内核延时

* 功能:

* 作者:大核桃

* 版本号:1.0.1(.05.23)

*******************************************************************************/

void Delay500ms() //@24.000MHz

{

unsigned char i, j, k;

_nop_();

_nop_();

i = 46;

j = 153;

k = 245;

do

{

do

{

while (--k);

} while (--j);

} while (--i);

}

/*******************************************************************************

* 文件名:void Delay500ms() //@24.000MHz

* 描述:Y1内核延时

* 功能:

* 作者:大核桃

* 版本号:1.0.1(.05.23)

*******************************************************************************/

//void Delay500ms() //@24.000MHz

//{

// unsigned char i, j, k;

//

// _nop_();

// i = 8;

// j = 154;

// k = 122;

// do

// {

// do

// {

// while (--k);

// } while (--j);

// } while (--i);

//}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。