📄 c_asm_twotager.c
字号:
//#include <AT89X51.H>
#include <REG51.H>
#include <stdio.h>
sbit BEEP=P2^7;
unsigned char th0_f; //在中断中装载的T0的值高8位
unsigned char tl0_f; //在中断中装载的T0的值低8位
void dems(void);
//----------------------------------
void delay400ms(void)
{
unsigned char TempCycA = 5;
unsigned int TempCycB;
while(TempCycA--)
{
TempCycB=1000;//2000;//7269;
while(TempCycB--);
}
}
//----------------------
//定时中断0,用于产生唱歌频率
timer0() interrupt 1
{
TL0 =tl0_f ;TH0 =th0_f; //调入预定时值
BEEP =~BEEP; //取反音乐输出IO
}
void delay(unsigned char times)
{unsigned char t,i =times;
for(;i!=0;i--)
for(t=500;t!=0;t--)
;
}
void twotager(void)
{
unsigned char yuepu[33] ={0x44 ,0x54 ,0x64 ,0x44 ,
0x44 ,0x54 ,0x64 ,0x44 ,
0x64 ,0x74 ,0x88 ,
0x64 ,0x74 ,0x88 ,
0x82 ,0x92 ,0x82 ,0x72 ,0x64 ,0x44 ,
0x82 ,0x92 ,0x82 ,0x72 ,0x64 ,0x44 ,
0x44 ,0x84 ,0x48 ,
0x44 ,0x14 ,0x48 ,
0x00 };
unsigned int yingao[15] ={64260, 64400, 64524, 64580,
64684, 64777, 64820, 64898,
64968, 65030, 65058, 65110,
65157, 65178, 65217 };
unsigned int templ =0,temph =0,flag = 0; //定义循环用的变量
unsigned int b,loop,c =0,end = 30000;//loop1,loop2,loop3,
unsigned char p2k =0x00;
TMOD = 0x01;
TR0 = 0;
ET0 = 1;
EA = 1;
do{
c++;
for (b=4; b!=0 ;b--)
dems();
for (b=0; yuepu[b]!=0 ;b++) //b<33; b++) //逐个符号演奏
{
templ = yuepu[b] & 0x0f ;
temph = yuepu[b] & 0xf0 ;
temph = temph>>4;
temph--;
th0_f = (yingao[temph] ) / 256 ;
tl0_f = (yingao[temph] ) % 256 ;
TL0 = tl0_f;
TH0 = th0_f;
TR0 = 1;
for(loop = 1;loop <= templ -1; loop++)
dems( );
TR0 =0;
delay(2);
}
}while(c < 5);
}
void main(void)
{ while(1)
{//hua();
//delay400ms();
//hello();
//delay400ms();
//zyy();
//delay400ms();
twotager();
delay400ms();
}
}
void dems(void)
{ //在Keil uVision2中右键点击c文件,properties项使能对话框中的Generate Assembler SRC File和Assembler SRC File选项。
//在Keil uVision2中将文件编辑成.hex文件,然后再在\星研中跟踪或直接写入芯片.
#pragma asm
delay: mov r7,#02h
d2: mov r4,#125
d3: mov r3,#248
djnz r3,$
djnz r4,d3
djnz r7,d2
end
#pragma endasm;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -