c语言一位共阳数码管编程,求一个共阳四位数码管滚动显示1234的程序
/*******************************************************************************
* 文件名: 數碼管
* 描??述:
* 功??能:數碼管的使用
* 作??者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
#include "stc15w.h"//頭文件
#include "intrins.h"
/*******************************************************************************
* 文件名: 重定義
* 描??述:
* 功??能:
* 作??者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
typedef unsigned char uint8;
typedef unsigned int??uint16;
typedef unsigned long uint32;
/*******************************************************************************
* 文件名:共陽數碼管真值表
* 描??述:
* 功??能:
* 作??者:大核桃
* 版本號:1.0.1(2015.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(2017.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(2017.05.23)
*******************************************************************************/
void Mcu_Port_Init();
void LedScan();
void Delay500ms(); //24MHZ
void Time0_Init();//定時器0
/*******************************************************************************
* 文件名
* 描??述: 主函數
* 功??能:入口
* 作??者:大核桃
* 版本號:1.0.1(2017.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(2017.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(2017.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(2017.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(2017.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(2017.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(2017.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);
//}
總結
以上是生活随笔為你收集整理的c语言一位共阳数码管编程,求一个共阳四位数码管滚动显示1234的程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言是以文件为单位编译,c语言从头开始
- 下一篇: c语言检测文件bom,C语言关联TC中B