程序一:数码管动态显示
#include <reg52.h>
/*
* 数码管动态显示学号
* 朱建康
*/
sbit led1 = P3^7;
sbit led2 = P3^6;
sbit led3 = P3^5;
sbit led4 = P3^4;
//数码管0~9缓存
unsigned char code LedChar[]={
0x82, 0xE7, 0x2A, 0x26, 0x47, 0x16, 0x12, 0xA7,
0x02, 0x06};
//学号:150401114
unsigned char 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;
/*
* 主函数
*/
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)
{
cnt = 0;
flag_200ms = 1;
}
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++; //长度加1
}
/*-------------------------------------------------
功能:1MS延时子程序
-------------------------------------------------*/
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; //中断计数器清0
Addr = i * 217;
while(1)
{
Temp1 = SONG[Addr++];
if ( Temp1 == 0xFF ) //休止符
{
TR1 = 0;
Delay_xMs(100);
}
else if ( Temp1 == 0x00 ) //歌曲结束符
{
return;
}
else
{
Temp2 = SONG[Addr++];
TR1 = 1;
while(1)
{
_Speak = ~_Speak;
Delay_xMs(Temp1);
if ( Temp2 == Count )
{
Count = 0;
break;
}
}
}
}
}
/*-------------------------------------------------
功能:主程序
-------------------------------------------------*/
void main()
{
Time1_Init(); //定时器0中断初始化
while(1)
{
Play_Song(0); //播放
}
}
PS:我使用的是IAPF2K60S2(stc15F2K60S2)
|