?? led7disp.c
字號(hào):
/*****************************************************************************
MCS8051-III學(xué)習(xí)板演示程序
(c) Copyright 2007-2007,廣州恒芯電子
All Rights Reserved
*****************************************************************************/
/*****************************************************************************
程序說(shuō)明
名稱: MCS8051-III學(xué)習(xí)板演示程序(數(shù)碼管顯示)
功能: 實(shí)現(xiàn)數(shù)碼管顯示,并實(shí)現(xiàn)數(shù)值遞增
版本:2007-03-01
*****************************************************************************/
/*****************************************************************************
硬件說(shuō)明
單片機(jī): 兼容MCS-51單片機(jī)/STC89C51
晶振頻率: 12MHz
*****************************************************************************/
#include <reg51.h>
#include <stdio.h>
/****************************************************************************
說(shuō)明: 程序預(yù)定義
*****************************************************************************/
sbit LED7A_STATUS=P1^7;/*數(shù)碼管第一位控制引腳(0為有效,1為無(wú)效)*/
sbit LED7B_STATUS=P1^6;/*數(shù)碼管第二位控制引腳(0為有效,1為無(wú)效)*/
sbit LED7C_STATUS=P1^5;/*數(shù)碼管第三位控制引腳(0為有效,1為無(wú)效)*/
sbit LED7D_STATUS=P1^4;/*數(shù)碼管第四位控制引腳(0為有效,1為無(wú)效)*/
sbit dot=P0^7;/*數(shù)碼管中間點(diǎn)控制*/
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit P14=P1^4;
sbit P01=P0^1;
unsigned int cout_time=0;
bit dot_state=1;
/****************************************************************************
說(shuō)明: 變量定義
*****************************************************************************/
code unsigned char m_ucLedTab[]=
{
//0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d ,
//0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c ,
// 0x39 , 0x5e , 0x79 , 0x71 , 0x00
0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90,
0x88, 0x83, 0xC6, 0xa1 ,0x86 ,0x8e, 0xff
};/*數(shù)碼管十六進(jìn)制編碼表*/
unsigned char m_ucLedBuf[4];/*七段數(shù)碼管顯示值緩存*/
/****************************************************************************
名稱: Led7Scan()-
說(shuō)明: 數(shù)碼管動(dòng)態(tài)掃描處理程序
參數(shù): 無(wú)
返回: 無(wú)
*****************************************************************************/
void Led7Scan();
/*****************************************************************************
程序開(kāi)始
*****************************************************************************/
void main()
{
unsigned int uiNumber=0;/*計(jì)數(shù)值置0*/
/*T0中斷設(shè)定*/
TMOD=0x01;/*使用T0:GATE=0,C/T=0(定時(shí)),M1 M0=01(工作方式1)*/
TH0=0xec;/*定時(shí)時(shí)間5ms*/
TL0=0x78;
ET0=1;/*允許T0中斷*/
TR0=1;/*使T0工作*/
EA=1;/*總中斷開(kāi)啟*/
P10=0;
P11=1;
P12=0;
P13=1;
P14=0;
P01=0;
uiNumber=5;
while(1)
{
if(uiNumber>3599)/*若數(shù)值大于3599,則置為0*/
{
uiNumber=0;
}
m_ucLedBuf[0]=(uiNumber/60)/10;/*取出分鐘十位數(shù)*/
m_ucLedBuf[1]=(uiNumber/60)%10;/*取出分鐘個(gè)位數(shù)*/
m_ucLedBuf[2]=(uiNumber%60)/10;/*取出秒鐘十位數(shù)*/
m_ucLedBuf[3]=(uiNumber%60)%10;/*取出秒鐘個(gè)位數(shù)*/
if(cout_time<102&&cout_time>98)
{
P11=0;
}
if(cout_time==200)
{
uiNumber++;/*數(shù)值加1*/
cout_time=0;/*復(fù)位計(jì)時(shí)器計(jì)數(shù)*/
P11=1;
}
}
}
/*****************************************************************************
名稱: Interrupt1Handler
說(shuō)明: T0中斷入口
參數(shù): 無(wú)
返回 :無(wú)
*****************************************************************************/
void Interrupt1Handler() interrupt 1
{
TH0=0xec;/*重新設(shè)置T0定時(shí)值*/
TL0=0x78;
cout_time++;
Led7Scan();/*數(shù)碼管動(dòng)態(tài)掃描處理程序*/
}
/****************************************************************************
名稱: Led7Scan()
說(shuō)明: 數(shù)碼管動(dòng)態(tài)掃描處理程序
參數(shù): 無(wú)
返回: 無(wú)
*****************************************************************************/
void Led7Scan()
{
static unsigned char a=0;
switch(a)/*判斷數(shù)碼管動(dòng)態(tài)掃描值*/
{
case 0:/*處理數(shù)碼管第一位*/
LED7D_STATUS=1;/*設(shè)置數(shù)碼管第四位為無(wú)效*/
LED7A_STATUS=0;/*設(shè)置數(shù)碼管第一位位有效*/
break;
case 1:/*處理數(shù)碼管第二位*/
LED7A_STATUS=1;/*設(shè)置數(shù)碼管第一位為無(wú)效*/
LED7B_STATUS=0;/*設(shè)置數(shù)碼管第二位位有效*/
break;
case 2:/*處理數(shù)碼管第三位*/
LED7B_STATUS=1;/*設(shè)置數(shù)碼管第二位為無(wú)效*/
LED7C_STATUS=0;/*設(shè)置數(shù)碼管第三位位有效*/
break;
case 3:/*處理數(shù)碼管第四位*/
LED7C_STATUS=1;/*設(shè)置數(shù)碼管第三位為無(wú)效*/
LED7D_STATUS=0;/*設(shè)置數(shù)碼管第四位位有效*/
break;
}
P0=m_ucLedTab[m_ucLedBuf[a]];/*將顯示碼送數(shù)碼管狀態(tài)引腳*/
if(a==2||a==3)
{
dot=dot_state;/*取反,使之一秒鐘閃爍一次*/
}
a++;/*數(shù)碼管動(dòng)態(tài)掃描值加1,若該值4則置為0*/
if(a>3)
a=0;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -