📄 allgai1.c
字号:
led[6]=i; /*日的十位*/
i=j;
i&=0x0f;
led[7]=i; /*日的个位*/
//时
i=rd[2];
i&=0x3f;
j=i;
i&=0xf0;
i>>=4;
led[9]=i; /*时的十位*/
i=j;
i&=0x0f;
led[10]=i; /*时的个位*/
//分
i=rd[1];
i&=0x7f;
j=i;
i&=0xf0;
i>>=4;
led[11]=i; /*分的十位*/
i=j;
i&=0x0f;
led[12]=i; /*分的个位*/
//秒
i=rd[0];
i&=0x7f;
j=i;
i&=0xf0;
i>>=4;
led[13]=i; /*秒的十位*/
i=j;
i&=0x0f;
led[14]=i; /*秒的个位*/
}
/*********************************************************************************
显示函数
*********************************************************************************/
void Display(uchar *s)
{ uchar i,k=0;
P3=0x00;
for(i=0;i<15;i++)
{ k=*s;
P0=tab[k];
Delay1ms(1);
P3+=1;
s++;
}
}
/**************************************************************************************
isd4004驱动
**************************************************************************************/
void Delay(uint i) /*isd4004专用延时程序*/
{
while(i--);
}
void Stopmode() /*停止*/
{
uchar m,i,j;
_cs=1;
_sclk=0;
_cs=0;
m=0x30;
for(i=0;i<8;i++)
{
m=_cror_(m,1);
j=m<<1;
_mosi=CY;
_sclk=0;
_sclk=1;
}
_cs=1;
}
void Powerdown() /*下电*/
{
uchar m,i,j;
_cs=1;
_sclk=0;
_cs=0;
m=0x10;
for(i=0;i<8;i++)
{
m=_cror_(m,1);
j=m<<1;
_mosi=CY;
_sclk=0;
_sclk=1;
}
_cs=1;
}
void Powerup() /*上电*/
{
uchar m,i,j;
_cs=1;
_sclk=0;
_cs=0;
m=0x20;
for(i=0;i<8;i++) /*参照8位命令格式*/
{
m=_cror_(m,1); /*循环右移*/
j=m<<1;
_mosi=CY; /*主控器应在串行时钟上升沿之前半个周期将数据送到本端*/
_sclk=0;
_sclk=1;
}
_cs=1;
}
void Record4004(uint address) /*录音 address--录音地址 0---2400*/
{
uchar i,m,j;
uchar *pointer;
uint datasoute;
Powerup();
Delay1ms(50);/*上电延时*/
Powerup();
Delay1ms(50);/*上电延时*/
Delay1ms(50);/*上电延时*/
_cs=1;
_sclk=0;
m=0xa0;
_cs=0;
for(i=0;i<16;i++) /*发地址为00的SETREC命令*/
{
address=_iror_(address,1);
datasoute=address<<1;
_mosi=CY;
_sclk=0;
_sclk=1;
}
for(i=0;i<8;i++)
{
m=_cror_(m,1);
j=m<<1;
_mosi=CY;
_sclk=0;
_sclk=1;
}
_cs=1;
_sclk=0;
m=0xb0;
_cs=0;
for(i=0;i<8;i++) /*发REC指令*/
{
m=_cror_(m,1);
j=m<<1;
_mosi=CY;
_sclk=0;
_sclk=1;
}
_cs=1;
P1=0xff;
TMOD=0x50; /*T1工作在计数方式1 154321us*/
pointer=&address; /*预置计数初值*/
TL1=*(pointer+1);
TH1=*pointer;
TR1=1; /*启动T1*/
while(kbscan()!=0x77) /*当确定键没有按下*/
{
}
Stopmode(); /*停止录音*/
TR1=0; /*停止T1*/
TL1+=3;
pointer=&rac_address;
*(pointer+1)=TL1;
*pointer=TH1; /*将T1的值加3后赋给rac_address*/
racaddress[tag]=rac_address; /*保存每段的首地址*/
segment[tag]=seg_ment; /*保存录音段的短号*/
tag++;
seg_ment++;
if(tag==10)
tag=0;
if(seg_ment==10)
seg_ment=0;
}
void Audioout(uint address) /*放音程序*/
{
uchar i,m,j;
unsigned int datasoute;
Powerup();
Delay1ms(50);//上电延时
_cs=1;
_sclk=0;
_cs=0;
m=0xe0;
for(i=0;i<16;i++)
{
address=_iror_(address,1);
datasoute=address<<1;
_sclk=0;
_mosi=CY;
_sclk=1;
}
for(i=0;i<8;i++)
{
m=_cror_(m,1);
j=m<<1;
_sclk=0;
_mosi=CY;
_sclk=1;
}
_cs=1;
_sclk=0;
m=0xf0;
_cs=0;
for(i=0;i<8;i++)
{
m=_cror_(m,1);
j=m<<1;
_sclk=0;
_mosi=CY;
_sclk=1;
}
_cs=1;
P1=0xff;
while(_int==1)
{
}//while end;
}
/***************************************************************************************
LED开机检测
***************************************************************************************/
void Ledcheck()
{
uchar j;
uchar i,k=0;
for(j=0;j<255;j++)
{
P3=0x00;
for(i=0;i<15;i++)
{
P0=0xff;
Delay1ms(1);
P3+=1;
}
}
}
/***************************************************************************************
按键转化为相应的数字
***************************************************************************************/
uchar Key_number(uchar keycode)
{
uchar number;
if(keycode==0xee)
number=0;
if(keycode==0xde)
number=1;
if(keycode==0xbe)
number=2;
if(keycode==0x7e)
number=3;
if(keycode==0xed)
number=4;
if(keycode==0xdd)
number=5;
if(keycode==0xbd)
number=6;
if(keycode==0x7d)
number=7;
if(keycode==0xeb)
number=8;
if(keycode==0xdb)
number=9;
if(keycode==0xbb)
number=10;
if(keycode==0x7b)
number=11;
if(keycode==0xe7)
number=12;
if(keycode==0xd7)
number=13;
if(keycode==0xb7)
number=14;
if(keycode==0x77)
number=15;
if(keycode==0xff)
number=16;
return(number);
}
/**************************************************************************************
时间设置函数
**************************************************************************************/
void Settime()
{
uchar keycode,keynumber;
uchar i=2;
while(kbscan()!=0x77)
{
keycode=kbscan();
keynumber=Key_number(keycode);
do
{
Display(led);
}while(keycode==kbscan());
Delay1ms(5);
if(keynumber!=10&&keynumber!=11&&keynumber!=12&&keynumber!=13&&keynumber!=14&&keynumber!=15&&keynumber!=16)
{
led[i]=keynumber;
i++;
}
if(i==15)
{
i=2;
}
Display(led);
}
}
/**************************************************************************************
合成
**************************************************************************************/
void Led_change()
{
uchar i;
i=led[2];
i<<=4;
td[8]=i+led[3]; //年
i=led[4];
i<<=4;
td[7]=i+led[5]; //月
i=led[6];
i<<=4;
td[5]=i+led[7]; //日
td[6]=led[8]; //星期
i=led[9];
i<<=4;
td[4]=i+led[10]; //时
i=led[11];
i<<=4;
td[3]=i+led[12]; //分
i=led[13];
i<<=4;
td[2]=i+led[14]; //秒
}
/*************************************主程序******************************************/
void main()
{
//Ledcheck(); /*开机后LED全亮3秒*/
//ISendStr(PCF8563,WRADDR,td,0x09);
while(1)
{
//IRcvStr(PCF8563,RDADDR,rd,0x07);
//Change_Led();
//Display(led); /*LED显示*/
//if(kbscan()==0xe7) /*如果设置键按下就可以设置时间*/
{
//Settime(); /*设置时间*/
//Led_change(); /*重写td*/
//ISendStr(PCF8563,WRADDR,td,0x09); /*写pcf8563*/
}
if(kbscan()==0xbb) /*如果录音键按下就可以录音*/
{
if(rac_address==2400)
{
rac_address=0; /*如果录满了从头开始*/
}
Record4004(rac_address); /*录音*/
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -