|
本帖最后由 cccc888 于 2018-1-10 11:26 編輯
//#include <reg52.h>
#include <STC15F2K60S2.h>
/*
* 數(shù)碼管動(dòng)態(tài)顯示學(xué)號(hào)
* 朱建康
*/
sbit led1 = P3^7;
sbit led2 = P3^6;
sbit led3 = P3^5;
sbit led4 = P3^4;
unsigned char t;
//數(shù)碼管0~9緩存
unsigned char code LedChar[] = {
0x82, 0xE7, 0x2A, 0x26, 0x47, 0x16, 0x12, 0xA7,
0x02, 0x06
};
//學(xué)號(hào):150401114
unsigned char code IDBuff[] = {
0xFF, 0x7F, 0x7F, 0x7F, 0x43, 0x1a, 0xda, 0xda,
0x82, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF,
0xFF
};
unsigned char LedBuff[9];
unsigned char flag_200ms = 0;
/*
* 主函數(shù)
*/
//void main(void)
//{
//unsigned char t = 0;
//TMOD = 0X01;
//TH0 = 0XFC;
//TL0 = 0X67;
//TR0 = 1;
//EA = 1;
//ET0 = 1;
//while(1)
//{
//if(flag_200ms == 1)
//{
//flag_200ms = 0;
//LedBuff[0] = IDBuff[t];
//LedBuff[1] = IDBuff[t+1];
//LedBuff[2] = IDBuff[t+2];
//LedBuff[3] = IDBuff[t+3];
//t++;
//if(t>=18) t = 0;
//}
//}
//}
void InterruptTime0() interrupt 1
{
static unsigned char i = 0;
static unsigned char cnt = 0;
TH0 = 0xFC;
TL0 = 0X67;
cnt++;
if (cnt > 200)
{
//flag_200ms = 0;
LedBuff[0] = IDBuff[t];
LedBuff[1] = IDBuff[t + 1];
LedBuff[2] = IDBuff[t + 2];
LedBuff[3] = IDBuff[t + 3];
t++;
if (t >= 18)
t = 0;
}
P2 = 0xFF; //消隱
switch (i)
{
case 0:
led1 = 0;
led2 = 1;
led3 = 1;
led4 = 1;
i++;
P2 = LedBuff[0];
break;
case 1:
led1 = 1;
led2 = 0;
led3 = 1;
led4 = 1;
i++;
P2 = LedBuff[1];
break;
case 2:
led1 = 1;
led2 = 1;
led3 = 0;
led4 = 1;
i++;
P2 = LedBuff[2];
break;
case 3:
led1 = 1;
led2 = 1;
led3 = 1;
led4 = 0;
i = 0;
P2 = LedBuff[3];
break;
default:
break;
}
}
//程序二:蜂鳴器放歌
//#include <STC15F2K60S2.h>
unsigned char Count;
sbit _Speak = P5 ^ 4;
unsigned char code SONG[] = { //祝你平安
0x26, 0x20, 0x20, 0x20, 0x20, 0x20, 0x26, 0x10, 0x20, 0x10, 0x20, 0x80, 0x26, 0x20, 0x30, 0x20,
0x30, 0x20, 0x39, 0x10, 0x30, 0x10, 0x30, 0x80, 0x26, 0x20, 0x20, 0x20, 0x20, 0x20, 0x1c, 0x20,
0x20, 0x80, 0x2b, 0x20, 0x26, 0x20, 0x20, 0x20, 0x2b, 0x10, 0x26, 0x10, 0x2b, 0x80, 0x26, 0x20,
0x30, 0x20, 0x30, 0x20, 0x39, 0x10, 0x26, 0x10, 0x26, 0x60, 0x40, 0x10, 0x39, 0x10, 0x26, 0x20,
0x30, 0x20, 0x30, 0x20, 0x39, 0x10, 0x26, 0x10, 0x26, 0x80, 0x26, 0x20, 0x2b, 0x10, 0x2b, 0x10,
0x2b, 0x20, 0x30, 0x10, 0x39, 0x10, 0x26, 0x10, 0x2b, 0x10, 0x2b, 0x20, 0x2b, 0x40, 0x40, 0x20,
0x20, 0x10, 0x20, 0x10, 0x2b, 0x10, 0x26, 0x30, 0x30, 0x80, 0x18, 0x20, 0x18, 0x20, 0x26, 0x20,
0x20, 0x20, 0x20, 0x40, 0x26, 0x20, 0x2b, 0x20, 0x30, 0x20, 0x30, 0x20, 0x1c, 0x20, 0x20, 0x20,
0x20, 0x80, 0x1c, 0x20, 0x1c, 0x20, 0x1c, 0x20, 0x30, 0x20, 0x30, 0x60, 0x39, 0x10, 0x30, 0x10,
0x20, 0x20, 0x2b, 0x10, 0x26, 0x10, 0x2b, 0x10, 0x26, 0x10, 0x26, 0x10, 0x2b, 0x10, 0x2b, 0x80,
0x18, 0x20, 0x18, 0x20, 0x26, 0x20, 0x20, 0x20, 0x20, 0x60, 0x26, 0x10, 0x2b, 0x20, 0x30, 0x20,
0x30, 0x20, 0x1c, 0x20, 0x20, 0x20, 0x20, 0x80, 0x26, 0x20, 0x30, 0x10, 0x30, 0x10, 0x30, 0x20,
0x39, 0x20, 0x26, 0x10, 0x2b, 0x10, 0x2b, 0x20, 0x2b, 0x40, 0x40, 0x10, 0x40, 0x10, 0x20, 0x10,
0x20, 0x10, 0x2b, 0x10, 0x26, 0x30, 0x30, 0x80, 0x00
};
//void Time1_Init()
//{
//TMOD = 0x10;
//IE = 0x82;
//TH1 = 0xD8;
//TL1 = 0xEF; //12MZ晶振,10ms
//}
void Time0_Int() interrupt 3
{
TH1 = 0xD8;
TL1 = 0xEF;
Count++; //長(zhǎng)度加1
}
/*-------------------------------------------------
功能:1MS延時(shí)子程序
------------------------------------------------- */
void Delay_xMs(unsigned int x)
{
unsigned int i, j;
for (i = 0; i < x; i++)
{
for (j = 0; j < 3; j++) ;
}
}
void Play_Song(unsigned char i)
{
unsigned char Temp1, Temp2;
unsigned int Addr;
Count = 0; //中斷計(jì)數(shù)器清0
Addr = i * 217;
while (1)
{
Temp1 = SONG[Addr++];
if (Temp1 == 0xFF) //休止符
{
TR1 = 0;
Delay_xMs(100);
}
else if (Temp1 == 0x00) //歌曲結(jié)束符
{
return;
}
else
{
Temp2 = SONG[Addr++];
TR1 = 1;
while (1)
{
_Speak = ~_Speak;
Delay_xMs(Temp1);
if (Temp2 == Count)
{
Count = 0;
break;
}
}
}
}
}
/*-------------------------------------------------
功能:主程序
------------------------------------------------- */
void main()
{
//unsigned char t = 0;
TMOD = 0X11;
TH0 = 0XFC;
TL0 = 0X67;
TR0 = 1;
EA = 1;
ET0 = 1; ET1 = 1;
//IE = 0x82;//8a
TH1 = 0xD8;
TL1 = 0xEF; //12MZ晶振,10ms
TR1 = 1;
//Time1_Init(); //定時(shí)器0中斷初始化
while (1)
{
Play_Song(0); //播放
}
}
//PS:我使用的是IAPF2K60S2(stc15F2K60S2)
|
|