📄 g.c
字号:
/*********************************************************************/
/* */
/* 本程序由胡寓洋编写,仅供学习使用 */
/* */
/* */
/* */
/*********************************************************************/
#include<at89x52.h>
#include<intrins.h>
//#define ovf P3_6
#define cs P3_7 //片选
#define pd P3_6 //功耗选择
#define oem P3_5 //放音时的一端结束标志,低有效
#define pr P3_4 //高时为放音,低时为录音
#define a8 P1_1 //为十条地址线
#define a9 P1_0
#define date P0
#define deng P1_6
#define deng1 P1_7
#define uchar unsigned char
#define uint unsigned int
void play1(void);
uchar display[6]={0x08,0x09,0x10,0x05,0x07,0x09};
void play(uchar a);
uchar addr[19]={0x00,0x0a,0x14,0x1e,0x28,
0x32,0x3c,0x46,0x50,0x5a,
0x64/*10*/,0x6e/*.点..*/,0x8c/*现在温度是*/,
0xaa/*摄氏度*/,0xb4/*分*/,0xbe/*秒*/,0xc8/*现在时间是*/,0xdc};//0到9的地址每个地址有1秒钟时间
void delay(uchar a);
uchar num;
uchar numb,numb1;
void play2(void);
/**********************************************
放音程序
***********************************************/
void play(uchar a)
{uchar b8=0,b9=0;
cs=1;
pd=0;
if(addr[a]|0x0a==addr[a++])
{
date=addr[a];
a8=b8;
a9=b9;
pr=1;_nop_();_nop_();_nop_();
cs=0;
while(oem==1);
cs=1;
pd=1;_nop_();_nop_();_nop_();
}
}
void play2(void)
{
uchar g;
for(g=7;g<19;g++)
{
play(g);
delay(1500);
}
}
void play3(void)
{
uchar ak;
for(ak=0;ak<19;ak++)
{ delay(40000);
play(ak);
}
}
/************************************************************
录音程序
**********************************************************/
void record(uchar a)
{ uchar b8=0,b9=0;
cs=1;
pd=0;
if(addr[a]|0x0a==addr[a++])
{
date=addr[a];
a8=b8;
a9=b9;
pr=0;_nop_();_nop_();_nop_();
cs=0;
while(!P2_0);
cs=1;
pd=1;_nop_();_nop_();_nop_();
P2_1=1;
}
}
/*****************************************************************************
录音主程序
ISD2560内部存储器共分600段地址,每一段对应0.1秒,故总共60秒,随便你分几段来用;
该段程序的用法:当按下某段的录音键时开始录音,当放开该键时录音结束,按一下该段
的放音键,可听听录音效果,不过该段录音时间要把握,以免覆盖到下
段地址去
*******************************************************************************/
/*******************************************
按键扫描
**********************************************/
void delay(uchar a)
{uchar i,j;
for(i=0;i<a;i++)
for(j=0;j<110;j++);
}
void keyscan()
{
if(P2_0==0)
{
delay(10);
if(P2_0==0)
{
TMOD=0x01;
TH0=0x15;
TL0=0Xa0;
EA=1;
ET0=1;
TR0=1;
deng=0;
delay(500);
delay(50);
if(P2_0==1)
{
delay(10);
if(P2_0==1)
{
num++;
}
}
if(num==19)
{ deng1=0;
num=0;
}
while(!P2_0);
deng=1;
}
}
if(P2_1==0)
{
delay(10);
if(P2_1==0)
{
play(numb);
while(!P2_1);
numb++;
}
if(numb==15)
{
numb=0;
}
}
if(P2_2==0)
{
delay(10);
if(P2_2==0)
{
play2();
}
}
if(P2_3==0)
{
delay(10);
if(P2_3==0)
{
delay(10000);
play3();
}
}
if(P2_6==0)
{
delay(10);
if(P2_6==0)
{
delay(510);
play(12);
delay(510);
play(display[0]);
delay(510);
play(10);
delay(510);
play(display[1]);
delay(510);
play(11);
delay(510);
play(display[5]);
delay(110);
play(16);
}
}
}
void t0(void) interrupt 1 using 0
{
EA=0;
ET0=0;
TR0=0;
deng1=1;
record(num);
}
/*void te(void) interrupt 2 using 1
{
EA=0;
ET1=0;
TR1=0;
deng=1;
numb1++;
if(numb1==15)
{
numb1=0;
}
} */ //0346
void main()
{P2=0xff;
P1=0xff;
P0=0xff;
P3=0xff;
num=16;
numb=0 ;
// numb1=9 ;
while(1)
{
keyscan();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -