📄 2402test.c
字号:
void beep_a(void)
{
beep(250,16,150,40);
}
//------------------扬声器--成功音--------------------------
void beep_y(void)
{
beep(50,30,100,50);
}
//------------------扬声器--无效音--------------------------
void beep_n(void)
{
beep(50,80,100,100);
}
****** 扬声器--无效音 *********************************************************/
void beep_n(void)
{
unsigned int a; //定义变量用于发声的长度设置
for(a=100;a>0;a--) //第一个声音的长度
{
Bell_Out=~Bell_Out; //取反扬声器驱动口,以产生音频
Delay(100); //音调设置延时
}
for(a=160;a>0;a--)
{ //同上
Bell_Out=~Bell_Out;
Delay(80); //音调设置延时
}
Bell_Out=1;
}
/****** 扬声器--闹钟报警 *******************************************************/
void beep_a(void)
{
unsigned char a; //定义变量用于发声的长度设置
for(a=60;a>0;a--)
{ //第一个声音的长度
Bell_Out=~Bell_Out; //取反扬声器驱动口,以产生音频
Delay(100); //音调设置延时
}
for(a=100;a>0;a--)
{ //同上
Bell_Out=~Bell_Out;
Delay(80);
}
for(a=100;a>0;a--)
{ //同上
Bell_Out=~Bell_Out;
Delay(30);
}
}
/****** 扬声器--成功音 **********************************************/
void beep_y(void)
{
unsigned char a; //定义变量用于发声的长度设置
for(a=250;a>0;a--)
{ //第一个声音的长度
Bell_Out=~Bell_Out; //取反扬声器驱动口,以产生音频
Delay(20); //音调设置延时
}
for(a=100;a>0;a--)
{ //同上
Bell_Out=~Bell_Out;
Delay(80);
}
}
/****** 扬声器--按键音 ********************************************************/
void beep_k(void)
{
unsigned char a; //定义变量用于发声的长度设置
for(a=100;a>0;a--)
{ //声音的长度
Bell_Out=~Bell_Out;
Delay(50); //音调设置延时
}
}
//================================纯软件部分=========================================//
//显示项目 时间部分 在第一行全行显示时间
/******************************************************************************************/
void RealTime_Display(void)
{
print(0x80,"20");
print2(0x82,(read_clock(0x8d)/16)+0x30);
print2(0x83,(read_clock(0x8d)%16)+0x30);
print(0x84,"-"); // 显示年
print2(0x85,(read_clock(0x89)/16)+0x30);
print2(0x86,(read_clock(0x89)%16)+0x30);
print(0x87,"-"); // 显示月
print2(0x88,(read_clock(0x87)/16)+0x30);
print2(0x89,(read_clock(0x87)%16)+0x30);
print(0x8a," ^"); // 显示[
print2(0x8c,read_clock(0x8b)%16); // 显示星期
print(0x8d,"^ "); // 显示]
print2(0x8f,(read_clock(0x85)/16)+0x30); // 显示小时
print2(0x90,(read_clock(0x85)%16)+0x30);
print(0x91,":"); // 显示cgram第一个字模":"
print2(0x92,(read_clock(0x83)/16)+0x30); // 显示分钟
print2(0x93,(read_clock(0x83)%16)+0x30);
print(0x94,":"); // 显示cgram第一个字模":"
print2(0x95,(read_clock(0x81)/16)+0x30); // 显示秒
print2(0x96,(read_clock(0x81)%16)+0x30);
// print(0x8a," "); // 在主显示区空白处写入空格 防止乱码
// print(0x8d," ");
print(0x97," ");
print(0xc0," ");
}
/********************************************************************************************
//显示项目 定时时间部分 在第一行全行显示时间
********************************************************************************************/
void alarm_Display(void)
{
print(0x80,"AL");
print2(0x82,(AT24C02_Read1Byte(0x05+(rom*10))/16)+0x30);
print2(0x83,(AT24C02_Read1Byte(0x05+(rom*10))%16)+0x30);
print(0x84,"-"); // 显示年
print2(0x85,(AT24C02_Read1Byte(0x06+(rom*10))/16)+0x30);
print2(0x86,(AT24C02_Read1Byte(0x06+(rom*10))%16)+0x30);
print(0x87,"-"); // 显示月
print2(0x88,(AT24C02_Read1Byte(0x07+(rom*10))/16)+0x30);
print2(0x89,(AT24C02_Read1Byte(0x07+(rom*10))%16)+0x30);
print(0x8a," ^"); // 显示[
if(AT24C02_Read1Byte(0x08+(rom*10))==0xff)
{
print(0x8c,"?");
}
else
{
print2(0x8c,AT24C02_Read1Byte(0x08+(rom*10))%16); // 显示星期
}
print(0x8d,"^ "); // 显示]
print2(0x8f,(AT24C02_Read1Byte(0x09+(rom*10))/16)+0x30); // 显示小时
print2(0x90,(AT24C02_Read1Byte(0x09+(rom*10))%16)+0x30);
print(0x91,":"); // 显示cgram第一个字模":"
print2(0x92,(AT24C02_Read1Byte(0x0a+(rom*10))/16)+0x30); // 显示分钟
print2(0x93,(AT24C02_Read1Byte(0x0a+(rom*10))%16)+0x30);
print(0x94,":"); // 显示cgram第一个字模":"
print2(0x95,(AT24C02_Read1Byte(0x0b+(rom*10))/16)+0x30); // 显示秒
print2(0x96,(AT24C02_Read1Byte(0x0b+(rom*10))%16)+0x30);
print2(0xc0,AT24C02_Read1Byte(0x04+(rom*10))/16+0x30); //显示控制项值 控制项值
print2(0xc1,AT24C02_Read1Byte(0x04+(rom*10))%16+0x30);
}
/********************************************************************************************
//清屏+刷新显示+延时+清空DT 一体函数
//LRDD()
********************************************************************************************/
void LRDD(void)
{
LCM2402_Init();
RealTime_Display();
DelayS(500);
DT=0xff;
}
/********************************************************************************************
//清屏+刷新定时值显示+延时+清空DT 一体函数
//LADD()
********************************************************************************************/
void LADD(void)
{
LCM2402_Init();
alarm_Display();
DT=0xff;
}
/********************************************************************************************
//闹钟呜响查寻程序
//BEEPing();
********************************************************************************************/
void BEEPing(void)
{
uint8 a;
LADD();
print(0xc3,"Time is up! AV: Exit");
for(a=0;a<250&&DT==0xff;a++)
{
beep_a();
}
DT=0xff;
}
/********************************************************************************************
//闹钟和无线遥控的键值处理
//ALARMing();
********************************************************************************************/
void ALARMing(void)
{
uint8 alarm_bit;
alarm_bit=AT24C02_Read1Byte(0x03); // 从AT24C02的地址0x03读出定时报警设置数据
if(AT24C02_Read1Byte(0x04+(rom*10))<2&&alarm_bit==1||alarm_bit==3)
{ //键值值为0则是闹钟,不为0则是无线控制
if(AT24C02_Read1Byte(0x04+(rom*10))==0)
{
BEEPing();
}
else
{
beep_y();
}
}
if(AT24C02_Read1Byte(0x04+(rom*10))==0&&alarm_bit==2||alarm_bit==3)
{
//**这里将写入一个或是调用无线遥控键值处理程序**
}
}
/********************************************************************************************
//定时值校对&处理函数
//search_time() 整个流程必须在1秒里完成,不然将有部分定时值不响应。
********************************************************************************************/
void search_time(void)
{
uint8 timeS,s,i;
static unsigned char data alarmS[25];
alarm_con=0;
s=read_clock(0x81); //读取秒数据
for(i=0;i<25;i++)
{
alarmS[i]=AT24C02_Read1Byte(0x0B+i*10); //一次性将全部项目中的秒数据送入数组中
}
for(i=0;i<25;i++)
{
if(alarmS[i]!=0xff) //不为0xff则表示这项已经设置
{
alarm_con++; //定时项目个数寄存位
if(s==alarmS[i])
{
timeS=AT24C02_Read1Byte(0x0a+(i*10));
if(timeS==read_clock(0x83)||timeS==0xff) //校验 分钟
{
timeS=AT24C02_Read1Byte(0x09+(i*10));
if(timeS==read_clock(0x85)||timeS==0xff) //校验 小时
{
timeS=AT24C02_Read1Byte(0x08+(i*10));
if(timeS==read_clock(0x8b)||timeS==0xff) //校验 星期
{
timeS=AT24C02_Read1Byte(0x07+(i*10));
if(timeS==read_clock(0x87)||timeS==0xff) //校验 日
{
timeS=AT24C02_Read1Byte(0x06+(i*10));
if(timeS==read_clock(0x89)||timeS==0xff) //校验 月
{
timeS=AT24C02_Read1Byte(0x05+(i*10));
if(timeS==read_clock(0x8d)||timeS==0xff)//校验 年
{
rom=i; //走到响应的位置
ALARMing(); //闹钟和无线遥控的键值处理
//这里将调用一个到时的响应程序alarming();
}
}
}
}
}
}
}
}
}
}
/*void temp_reset(void)
{
uchar i;
bit flag=0;
while(~flag)
{
DQ=MINUS;
delay15us(40);
DQ=PLUS;
delay15us(4);
while(DQ&PLUS)
;
while(~(DQ|MINUS))
{
flag=1;
for(i=0;i<25;++i)
{;}
break;
}
}
DQ=PLUS;
return;
}
viod temp_bcd(void)
{
temp_plus=temp_value;
if(temp_plus&0xf800)
gotoxy(2,7);
display_LCD_string("-");
temp_minus=abs((int)temp_plus);
xiaoshu1=(temp_minus&0x000f)*10/16;
xiaoshu2=(temp_minus&0x000f)*100/16%10;
xiaoshu=xiaoshu1*10+xiaoshu2;
temp_minus>>=4;
temp_value=temp_minus;
if(temp_minus>=ALARM_TH||temp_minus<ALARM_TL)
{
LIGHT=1;
}
else
{
LIGHT=0;
}
else
{
xiaoshu1=(temp_plus&0x000f)*10/16;
xiaoshu2=(temp_plus&0x000f)*100/16%10;
xiaoshu=xiaoshu1*10+xiaoshu2;
temp_plus>>=4;
temp_value=temp_plus;
if(temp_plus>=ALARM_TH||temp_plus<ALARM_TL)
{
LIGHT=1;
}
else
{
LIGHT=0;
}
}
temp=temp_value;
return;
}
viod temp_convert(void)
{
temp_reset();
temp_write(0xcc);
temp_write(0x44);
return;
}
int temp_read(void)
{
ychar i,j,rbyte;
rbyte=0;
for(i=0;i<8;++i)
{
DQ=MINUS;
_nop_;
_nop_;
DQ=PLUS;
delay15us(1);
j=DQ&PLUS;
delay15us(4);
rbyte=(j<<7)|(rbyte>>1);
}
_nop_;
return(rbyte);
}
/********************************************************************************************
//系统主程序 菜单切换
//main()
********************************************************************************************/
void main(void)
{
beep_a();
keyboard_int();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -