郭天祥的10天学会51单片机_第十一节
參考第十節(jié)的課件DS12887
RTC就是Real Time Clock實(shí)時(shí)時(shí)鐘
DS12887芯片是保持時(shí)間的,即當(dāng)前設(shè)定一個(gè)時(shí)間,然后斷電,而該芯片的時(shí)間還在走
DS12887-5指的是5伏,DS12887-33指的是3.3伏
OSC是時(shí)鐘振蕩器(給時(shí)鐘提供頻率),下面是電源控制及掉電自動(dòng)保護(hù),往下是總線接口
DIVID BY 8是八分頻
MOT是總線類型選擇,本節(jié)讓MOT接地或不接,即用于Intel模式
NC就是Not Connect不連接
AD0到AD7接單片機(jī)的P0口
TX-1C型單片機(jī)實(shí)驗(yàn)板原理圖上的24C02(圖中標(biāo)錯(cuò)了,標(biāo)成24C00)是EEPROM
AS就是Address strobe(地址閘門),接P1^5口,高電平寫地址,低電平鎖存數(shù)據(jù)
DS就是Data strobe(數(shù)據(jù)閘門),連到P1^7口,高電平寫數(shù)據(jù)
R/W連到P1^6口
?便找個(gè)口,這里用P1^4口,操作時(shí)拉低,不操作時(shí)拉高
IRQ(Interrupt Reques)是中斷,接P3^2口(只能接單片機(jī)的外部中斷1口P3^3口和外部中斷0口P3^2口),用于定時(shí)鬧鐘后,當(dāng)中斷發(fā)生時(shí)IRQ由高電平變成低電平,送到單片機(jī),讓單片機(jī)控制蜂鳴器響
RESET接VCC(高電平1)
SQW是方波輸出,見DS12887的P20表3,這里沒用到所以不接
一般時(shí)鐘是32.768KHZ石英晶體
見DS12CR887-DS12R887_cn的PDF的P14表2A,時(shí)分秒的地址,Second Alarm是秒定時(shí)器,例如Second,秒的地址是00H,可以從00H讀出秒的值,只使用BIT0到BIT5;0A到0D是四個(gè)定時(shí)器;讀的時(shí)候先賦地址再賦數(shù)據(jù)
寫程序的時(shí)候要考慮時(shí)間,見DS12887的P4時(shí)間表,指令時(shí)間寬度都是納秒,而一個(gè)機(jī)器周期至少是毫秒,肯定保證機(jī)器時(shí)間內(nèi)指令能完成,所以納秒可以不用管
見DS12887的P17給B寄存器設(shè)置為26開啟鬧鐘
蜂鳴器是P2^3口
見DS12CR887-DS12R887_cn的PDF的P18,如果不讀取C寄存器就會(huì)讓IRQ變低后一直保持低電平,只觸發(fā)一次中斷,而不能觸發(fā)下一次中斷
延時(shí)消抖的時(shí)間1毫秒是消抖不了的,可以設(shè)置成5毫秒
TX-1C型單片機(jī)實(shí)驗(yàn)板原理圖上的PL2303是下載口
點(diǎn)擊Options for Target按鈕,在Output菜單頁面上,將Browse Information 點(diǎn)上鉤,作用是要看函數(shù)的定義或引用可以用鼠標(biāo)右鍵選擇最后兩項(xiàng)
標(biāo)記,鼠標(biāo)右鍵選擇Toggle Bookmark,然后按F2即可選擇標(biāo)記所在的行
添加頭文件,寫完頭文件,保存完頭文件,再添加時(shí),保存類型選擇ALL Files,出現(xiàn)的對話框中的Type選擇Text Document File,再確定
以后可以把每個(gè)模塊都寫成頭文件,在源文件中添加即可
學(xué)完單片機(jī)要多練,單片機(jī)熟練后可以學(xué)嵌入式ARM7,然后ARM9,多鍛煉多實(shí)踐
我犯的錯(cuò)誤:外部中斷0接3^2口,外部中斷1接3^3口,把時(shí)鐘芯片的IRQ接單片機(jī)的3^2口
Shizhong.c:
#include<reg52.h>
#include<define.h>
void delay(uint z)
{
???????? uint x,y;
???????? for(x=z;x>0;x--)
?????????????????? for(y=110;y>0;y--);
}
void didi()
{
???????? beep=0;
???????? delay(50);
???????? beep=1;
???????? delay(100);
???????? beep=0;
???????? delay(50);
???????? beep=1;
}
void write_com(uchar com)
{
???????? rs=0;
???????? lcden=0;
???????? P0=com;
???????? delay(5);
???????? lcden=1;
???????? delay(5);
???????? lcden=0;??
}
void write_date(uchar date)
{
???????? rs=1;
???????? lcden=0;
???????? P0=date;
???????? delay(5);
???????? lcden=1;
???????? delay(5);
???????? lcden=0;??
}
void init()
{
???????? uchar num;
???????? EA=1;
???????? EX0=1; //開外部中斷0,使用內(nèi)部中斷時(shí)還需要啟動(dòng)內(nèi)部中斷,而外部的時(shí)鐘芯片自己一直自動(dòng)提供頻率,不需要再啟動(dòng)外部中斷
???????? IT0=1; //外部中斷0,下降沿觸發(fā)方式
???????? dula=0;
???????? wela=0;
???????? lcden=0;//先關(guān)閉外部中斷,為時(shí)鐘芯片的定時(shí)中斷做準(zhǔn)備
???????? //set_time();//設(shè)置時(shí)鐘芯片初始時(shí)間,這里如果設(shè)置,每次開啟單片機(jī)就會(huì)重新設(shè)置時(shí)鐘芯片的時(shí)間,如果不設(shè)置,時(shí)鐘芯片會(huì)在關(guān)閉期間還在走,每次開啟單片機(jī)時(shí)就會(huì)輸出新時(shí)間,即上次關(guān)閉的時(shí)間加上再次開啟之間的時(shí)間
???????? set_alarm(14,13,10);
???????? write_ds(0x0B,0x26);//向B寄存器里寫26,開啟鬧鐘
???????? read_ds(0x0c);//讀一下C寄存器,見DS12CR887-DS12R887_cn的PDF的P18,讀一下C
//寄存器為了清除上次IRQ的狀態(tài);因?yàn)橐?/span>DS12CR887-DS12R887_cn的PDF的P17的鬧鐘中斷使能AIE,AIE置1時(shí),寄存器C的鬧鐘中斷標(biāo)志AF位驅(qū)動(dòng)產(chǎn)生IRQ信號(hào),見DS12CR887-DS12R887_cn的PDF的P18,當(dāng)AF=AIE=1時(shí),IRQF為1,讓IRQ變低,這樣IRQ就不能產(chǎn)生下降沿進(jìn)入中斷,所以要讀一下C寄存器清除IRQ低電平狀態(tài)
//????? fen=59;
//????? miao=53;
//????? shi=23;
???????? write_com(0x38);
???????? write_com(0x0c);
???????? write_com(0x06);
???????? write_com(0x01);
???????? write_com(0x80);
???????? for(num=0;num<15;num++)
?????????????????? {
??????????????????????????? write_date(table[num]);
??????????????????????????? delay(5);
?????????????????? }
???????? write_com(0x80+0x40);
???????? for(num=0;num<12;num++)
?????????????????? {
??????????????????????????? write_date(table1[num]);
??????????????????????????? delay(5);
?????????????????? }
}
void write_sfm(uchar add,uchar date)
{
???????? uchar shi,ge;
???????? shi=date/10;
???????? ge=date%10;
???????? write_com(0x80+0x40+add);
???????? write_date(0x30+shi);
???????? write_date(0x30+ge);
}
void keyscan()
{
???????? rd=0;
???????? if(flag1==1)
???????? {
?????????????????? if(s2==0)
?????????????????? {???????
??????????????????????????? delay(5);
??????????????????????????? if(s2==0)
??????????????????????????? {
???????????????????????????????????? while(!s2);
???????????????????????????????????? flag1=0;
??????????????????????????? }
??????????????????????????? ???????
?????????????????? }
?????????????????? if(s3==0)
?????????????????? {???????
??????????????????????????? delay(5);
??????????????????????????? if(s3==0)
??????????????????????????? {
???????????????????????????????????? while(!s3);
???????????????????????????????????? flag1=0;
??????????????????????????? }
?????????????????? }
???????? }
??????????????????
???????? if(s1==0)?
???????? {
?????????????????? delay(5);
?????????????????? if(s1==0)
?????????????????? {??????? s1num++;
??????????????????????????? flag=1;
??????????????????????????? flag1=0;
??????????????????????????? while(!s1);
??????????????????????????? if(s1num==1)
??????????????????????????? {
???????????????????????????????????? TR0=0;
???????????????????????????????????? write_com(0x80+0x40+10);
???????????????????????????????????? write_com(0x0f);
??????????????????????????? }
?????????????????? }
??????????????????????????? if(s1num==2)
??????????????????????????? {
???????????????????????????????????? write_com(0x80+0x40+7);
??????????????????????????? }
??????????????????????????? if(s1num==3)
??????????????????????????? {
???????????????????????????????????? write_com(0x80+0x40+4);
??????????????????????????? }
??????????????????????????? if(s1num==4)
??????????????????????????? {
???????????????????????????????????? s1num=0;
???????????????????????????????????? write_com(0x0c);
???????????????????????????????????? flag=0;
???????????????????????????????????? write_ds(0,miao);
???????????????????????????????????? write_ds(2,fen);
???????????????????????????????????? write_ds(4,shi);
??????????????????????????? }
????????????????????????????????????
?????????????????? }
?????????????????? if(s1num!=0)
?????????????????? {
??????????????????????????? if(s2==0)
??????????????????????????? {
???????????????????????????????????? delay(1);
???????????????????????????????????? if(s2==0)
???????????????????????????????????? {
?????????????????????????????????????????????? while(!s2);
?????????????????????????????????????????????? if(s1num==1)
?????????????????????????????????????????????? {
??????????????????????????????????????????????????????? miao++;
??????????????????????????????????????????????????????? if(miao==60)
??????????????????????????? ???????????????????????????????????? miao=0;
??????????????????????????????????????????????????????? write_sfm(10,miao);
??????????????????????????????????????????????????????? write_com(0x80+0x40+10);
???????????????????????????????????????????????????????
???????????????????????????????????????????????????????
?????????????????????????????????????????????? }
?????????????????????????????????????????????? if(s1num==2)
?????????????????????????????????????????????? {
??????????????????????????????????????????????????????? fen++;
??????????????????????????????????????????????????????? if(fen==60)
???????????????????????????????????????????????????????????????? fen=0;
??????????????????????????????????????????????????????? write_sfm(7,fen);
??????????????????????????????????????????????????????? write_com(0x80+0x40+7);
?????????????????????????????????????????????? }
?????????????????????????????????????????????? if(s1num==3)
?????????????????????????????????????????????? {
??????????????????????????????????????????????????????? shi++;
??????????????????????????????????????????????????????? if(shi==24)
???????????????????????????????????????????????????????????????? shi=0;
??????????????????????????????????????????????????????? write_sfm(4,shi);
??????????????????????????????????????????????????????? write_com(0x80+0x40+4);
?????????????????????????????????????????????? }
???????????????????????????????????? }
??????????????????????????? }
??????????????????????????? if(s3==0)
??????????????????????????? {
???????????????????????????????????? delay(1);
???????????????????????????????????? if(s3==0)
???????????????????????????????????? {
?????????????????????????????????????????????? while(!s3);
?????????????????????????????????????????????? if(s1num==1)
?????????????????????????????????????????????? {
?????????????????????????????????????????????? /*???? if(miao==0)
??????????????????????????????????????????????????????? {
???????????????????????????????????????????????????????????????? miao=59;
???????????????????????????????????????????????????????????????? write_sfm(10,miao);
???????????????????????????????????????????????????????????????? write_com(0x80+0x40+10);
??????????????????????????????????????????????????????? }*/
??????????????????????????????????????????????????????? miao--;
??????????????????????????????????????????????????????? if(miao==-1)
???????????????????????????????????????????????????????????????? miao=59;
??????????????????????????????????????????????????????? write_sfm(10,miao);
??????????????????????????????????????????????????????? write_com(0x80+0x40+10);
?????????????????????????????????????????????? }
?????????????????????????????????????????????? if(s1num==2)
?????????????????????????????????????????????? {
??????????????????????????????????????????????????????? fen--;
??????????????????????????????????????????????????????? if(fen==-1)
???????????????????????????????????????????????????????????????? fen=59;
??????????????????????????????????????????????????????? write_sfm(7,fen);
??????????????????????????????????????????????????????? write_com(0x80+0x40+7);
?????????????????????????????????????????????? }
?????????????????????????????????????????????? if(s1num==3)
?????????????????????????????????????????????? {
??????????????????????????????????????????????????????? shi--;
??????????????????????????????????????????????????????? if(shi==-1)
???????????????????????????????????????????????????????????????? shi=23;
??????????????????????????????????????????????????????? write_sfm(4,shi);
??????????????????????????????????????????????????????? write_com(0x80+0x40+4);
?????????????????????????????????????????????? }
???????????????????????????????????? }
??????????????????????????? }
?????????????????? }
}
void write_ds(uchar add,uchar date)
{
???????? dscs=0;//片選置低電平使用時(shí)鐘芯片
???????? dsas=1;//準(zhǔn)備給地址
???????? dsds=1; //準(zhǔn)備給數(shù)據(jù)
???????? dsrw=1;//讀
???????? P0=add;//給地址
???????? dsas=0;//鎖存地址
???????? dsrw=0;//寫
???????? P0=date;//寫數(shù)據(jù)
???????? dsrw=1;
???????? dsas=1;
???????? dscs=1;???????????????????????????????
}
uchar read_ds(uchar add)
{
??????? uchar ds_date;
???????? dsas=1;//準(zhǔn)備給地址
???????? dsds=1; //準(zhǔn)備給數(shù)據(jù)
???????? dsrw=1;//讀
???????? dscs=0;
???????? P0=add;//讀入地址
???????? dsas=0;//鎖存地址
???????? dsds=0;
???????? P0=0xff;
???????? ds_date=P0;//數(shù)據(jù)準(zhǔn)備好
???????? dsds=1;//讀入數(shù)據(jù)
???????? dsas=1;
???????? dscs=1;
???????? return ds_date;???????
}
void set_time()
{
???????? write_ds(4,10);
???????? write_ds(2,32);
???????? write_ds(0,12);
}
void set_alarm(uchar ashi,uchar afen,uchar amiao)
{
???????? write_ds(1,amiao);
???????? write_ds(3,afen);
???????? write_ds(5,ashi);
}
void main()
{
???????? init();
???????? while(1)
???????? {
?????????????????? keyscan();
?????????????????? if(flag1==1)
??????????????????????????? didi();
?????????????????? if(flag==0)
?????????????????? {
??????????????????????????? miao=read_ds(0);???
??????????????????????????? fen=read_ds(2);
??????????????????????????? shi=read_ds(4);
??????????????????????????? write_sfm(10,miao);
??????????????????????????? write_sfm(7,fen);
??????????????????????????? write_sfm(4,shi);
?????????????????? }
???????? }
}
void exter() interrupt 0
{??????? uchar c;
???????? flag1=1;
???????? c=read_ds(0x0c);// 讀一下C寄存器,清除上次IRQ的狀態(tài)
}
Define.h:
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit rs=P3^5;
sbit lcden=P3^4;
sbit s1=P3^0;
sbit s2=P3^1;
sbit s3=P3^2;
sbit rd=P3^7;
sbit beep=P2^3;
sbit dscs=P1^4;
sbit dsas=P1^5;
sbit dsrw=P1^6;
sbit dsds=P1^7;
sbit dsirq=P3^3;
uchar count,s1num,flag,flag1;
char miao,shi,fen;
uchar code table[]="? 2007-7-30 MON";
uchar code table1[]="????? :? :? ";
void write_ds(uchar,uchar);
void set_alarm(uchar,uchar,uchar);
uchar read_ds(uchar);
void set_time();
我的程序:
我犯的錯(cuò)誤:為了防止串口下載程序時(shí)不能使用第一行鍵,我把s3定義成P3^3口后,又把dsirq定義成P3^3口,造成沖突
Shizhong.c:
#include<define.h>
void delay(uint z)
{
???????? uchar x,y;
???????? for(x=z;x>0;x--)
?????????????????? for(y=110;y>0;y--);
}
void write_com(uchar com)
{
???????? rs=0;
???????? lcden=0;
???????? P0=com;
???????? delay(5);
???????? lcden=1;
???????? delay(5);
???????? lcden=0;
}
void write_date(uchar date)
{
???????? rs=1;
???????? lcden=0;
???????? P0=date;
???????? delay(5);
???????? lcden=1;
???????? delay(5);
???????? lcden=0;
}
void write_ds(uchar add,uchar date)
{
???????? dsas=1;
???????? dsds=1;
???????? dsrw=1;
???????? dscs=0;
???????? P0=add;
???????? dsas=0;
???????? dsrw=0;
???????? P0=date;
???????? dsas=1;
???????? dsrw=1;
???????? dscs=1;
}
uchar read_ds(uchar add)
{
???????? uchar date;
???????? dsas=1;
???????? dsds=1;
???????? dsrw=1;
???????? dscs=0;
???????? P0=add;
???????? dsas=0;
???????? dsds=0;
???????? P0=0xff;
???????? date=P0;
???????? dsds=1;
???????? dscs=1;
???????? dsas=1;
???????? return date;
}
void set_time()
{
???????? write_ds(4,15);
???????? write_ds(2,30);
???????? write_ds(0,45);
???????? write_ds(7,14);
???????? write_ds(8,2);
???????? write_ds(9,11);
???????? write_ds(6,2);
}
void set_alarm(uchar ashi,uchar afen,uchar amiao)
{
???????? write_ds(5,ashi);
???????? write_ds(3,afen);
???????? write_ds(1,amiao);
}
void init()
{
???????? uchar num;
???????? dula=0;
???????? wela=0;
???????? write_com(0x38);
???????? write_com(0x0c);
???????? write_com(0x06);
???????? write_com(0x01);
???????? write_com(0x80);
???????? for(num=0;num<15;num++)
???????? {
?????????????????? write_date(table1[num]);
?????????????????? delay(5);
???????? }
???????? write_com(0x80+0x40);
???????? for(num=0;num<12;num++)
???????? {
?????????????????? write_date(table2[num]);
?????????????????? delay(5);
???????? }
????????
???????? EA=1;
???????? EX0=1;
???????? IT0=1;
???????? lcden=0;
???????? set_alarm(15,31,10);
???????? write_ds(0x0B,0x26);
???????? read_ds(0x0C);
???????? set_time();
}
void wrtie_sfm(uchar add,uchar sfm)
{
???????? uchar shi,ge;
???????? shi=sfm/10;
???????? ge=sfm%10;
???????? write_com(0x80+0x40+add);
???????? write_date(0x30+shi);
???????? write_date(0x30+ge);
}
void keyscane()
{
???????? rd=0;
???????? if(flag1==1)
???????? {
?????????????????? if(s2==0)
?????????????????? {
??????????????????????????? delay(5);
??????????????????????????? if(s2==0)
??????????????????????????? {
???????????????????????????????????? while(!s2);
???????????????????????????????????? flag1=0;
??????????????????????????? }
?????????????????? }
?????????????????? if(s3==0)
?????????????????? {
??????????????????????????? delay(5);
??????????????????????????? if(s3==0)
??????????????????????????? {
???????????????????????????????????? while(!s3);
???????????????????????????????????? flag1=0;
??????????????????????????? }
?????????????????? }
???????? }
???????? if(s1==0)
???????? {
?????????????????? delay(5);
?????????????????? if(s1==0)
?????????????????? {
??????????????????????????? flag1=0;
??????????????????????????? flag=1;
??????????????????????????? while(!s1);
??????????????????????????? num1++;
??????????????????????????? if(num1==1)
??????????????????????????? {
???????????????????????????????????? write_com(0x80+0x40+10);
???????????????????????????????????? write_com(0x0f);
??????????????????????????? }
??????????????????????????? if(num1==2)
??????????????????????????? {
???????????????????????????????????? write_com(0x80+0x40+7);
??????????????????????????? }
??????????????????????????? if(num1==3)
??????????????????????????? {
???????????????????????????????????? write_com(0x80+0x40+4);
??????????????????????????? }
??????????????????????????? if(num1==4)
??????????????????????????? {
???????????????????????????????????? write_com(0x0c);
???????????????????????????????????? num1=0;
???????????????????????????????????? flag=0;
???????????????????????????????????? write_ds(0,miao);
???????????????????????????????????? write_ds(2,fen);
???????????????????????????????????? write_ds(4,shi);
??????????????????????????? }
?????????????????? }
???????? }
???????? if(num1!=0)
???????? {
?????????????????? if(s2==0)
?????????????????? {
??????????????????????????? delay(5);
??????????????????????????? if(s2==0)
??????????????????????????? {
???????????????????????????????????? while(!s2);
???????????????????????????????????? if(num1==1)
???????????????????????????????????? {
?????????????????????????????????????????????? miao++;
?????????????????????????????????????????????? if(miao==60)
??????????????????????????????????????????????????????? miao=0;
?????????????????????????????????????????????? wrtie_sfm(10,miao);
?????????????????????????????????????????????? write_com(0x80+0x40+10);
???????????????????????????????????? }
???????????????????????????????????? if(num1==2)
???????????????????????????????????? {
?????????????????????????????????????????????? fen++;
?????????????????????????????????????????????? if(fen==60)
??????????????????????????????????????????????????????? fen=0;
?????????????????????????????????????????????? wrtie_sfm(7,fen);
?????????????????????????????????????????????? write_com(0x80+0x40+7);
???????????????????????????????????? }
???????????????????????????????????? if(num1==3)
???????????????????????????????????? {
?????????????????????????????????????????????? shi++;
?????????????????????????????????????????????? if(shi==24)
??????????????????????????????????????????????????????? shi=0;
?????????????????????????????????????????????? wrtie_sfm(4,shi);
?????????????????????????????????????????????? write_com(0x80+0x40+4);
???????????????????????????????????? }
??????????????????????????? }
?????????????????? }
?????????????????? if(s3==0)
?????????????????? {
??????????????????????????? delay(5);
??????????????????????????? if(s3==0)
??????????????????????????? {
???????????????????????????????????? while(!s3);
???????????????????????????????????? if(num1==1)
???????????????????????????????????? {
?????????????????????????????????????????????? miao--;
?????????????????????????????????????????????? if(miao==-1)
??????????????????????????????????????????????????????? miao=59;
?????????????????????????????????????????????? wrtie_sfm(10,miao);
?????????????????????????????????????????????? write_com(0x80+0x40+10);
???????????????????????????????????? }
???????????????????????????????????? if(num1==2)
???????????????????????????????????? {
?????????????????????????????????????????????? fen--;
?????????????????????????????????????????????? if(fen==-1)
??????????????????????????????????????????????????????? fen=59;
?????????????????????????????????????????????? wrtie_sfm(7,fen);
?????????????????????????????????????????????? write_com(0x80+0x40+7);
???????????????????????????????????? }
???????????????????????????????????? if(num1==3)
???????????????????????????????????? {
?????????????????????????????????????????????? shi--;
?????????????????????????????????????????????? if(shi==-1)
??????????????????????????????????????????????????????? shi=23;
?????????????????????????????????????????????? wrtie_sfm(4,shi);
?????????????????????????????????????????????? write_com(0x80+0x40+4);
???????????????????????????????????? }
??????????????????????????? }
?????????????????? }
???????? }
}
void didi()
{
???????? beep=0;
???????? delay(500);
???????? beep=1;
???????? delay(500);
???????? beep=0;
???????? delay(500);
???????? beep=1;
}
void write_yrn(uchar add,uchar date)
{
???????? uchar shi,ge;
???????? shi=date/10;
???????? ge=date%10;
???????? write_com(0x80+add);
???????? write_date(0x30+shi);
???????? write_date(0x30+ge);
}
void write_xq(uchar date)
{
???????? if(date==1)
???????? {
?????????????????? write_com(0x80+12);
?????????????????? write_date('M');
?????????????????? write_date('O');
?????????????????? write_date('N');
???????? }
???????? if(date==2)
???????? {
?????????????????? write_com(0x80+12);
?????????????????? write_date('T');
?????????????????? write_date('U');
?????????????????? write_date('E');
???????? }
???????? if(date==3)
???????? {
?????????????????? write_com(0x80+12);
?????????????????? write_date('W');
?????????????????? write_date('E');
?????????????????? write_date('N');
???????? }
???????? if(date==4)
???????? {
?????????????????? write_com(0x80+12);
?????????????????? write_date('T');
?????????????????? write_date('H');
?????????????????? write_date('I');
???????? }
???????? if(date==5)
???????? {
?????????????????? write_com(0x80+12);
?????????????????? write_date('F');
?????????????????? write_date('I');
?????????????????? write_date('V');
???????? }
???????? if(date==6)
???????? {
?????????????????? write_com(0x80+12);
?????????????????? write_date('S');
?????????????????? write_date('A');
?????????????????? write_date('T');
???????? }
???????? if(date==7)
???????? {
?????????????????? write_com(0x80+12);
?????????????????? write_date('S');
?????????????????? write_date('U');
?????????????????? write_date('N');
???????? }
}
void main()
{
???????? init();
???????? while(1)
???????? {
?????????????????? keyscane();
?????????????????? if(flag1==1)
?????????????????? {
??????????????????????????? flag1=0;
??????????????????????????? didi();
?????????????????? }
?????????????????? if(flag==0)
?????????????????? {
??????????????????????????? miao=read_ds(0);
??????????????????????????? fen=read_ds(2);
??????????????????????????? shi=read_ds(4);
??????????????????????????? day=read_ds(6);
??????????????????????????? date=read_ds(7);
??????????????????????????? month=read_ds(8);
??????????????????????????? year=read_ds(9);
??????????????????????????? xq=read_ds(6);
??????????????????????????? wrtie_sfm(10,miao);
??????????????????????????? wrtie_sfm(7,fen);
??????????????????????????? wrtie_sfm(4,shi);
??????????????????????????? write_yrn(9,date);
??????????????????????????? write_yrn(6,month);
??????????????????????????? write_yrn(3,year);
??????????????????????????? write_com(0x80+1);
??????????????????????????? write_date(0x30+2);
??????????????????????????? write_date(0x30+0);
??????????????????????????? write_xq(xq);
?????????????????? }
???????? }
}
void exter0() interrupt 0
{
???????? read_ds(0x0C);
???????? flag1=1;
}
Define.h:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit rs=P3^5;
sbit lcden=P3^4;
sbit rd=P3^7;
sbit s1=P3^0;
sbit s2=P3^1;
sbit s3=P3^2;
sbit dsas=P1^5;
sbit dsds=P1^7;
sbit dsrw=P1^6;
sbit dscs=P1^4;
sbit dsirq=P3^3;
sbit beep=P2^3;
uchar aa,num1,num2,num3,flag,flag1;
char miao,fen,shi,day,date,month,year,xq;
uchar code table1[]=" 2011-02-14 MON";
uchar code table2[]="????? :? :? ";
void write_ds(uchar,uchar);
uchar write_rd(uchar);
void set_time();
void set_alarm(uchar,uchar,uchar);???????? ?
void didi();
void write_yri(uchar,uchar);
void write_xq(uchar);
我調(diào)了很多次調(diào)不出時(shí)鐘的鬧鐘功能,我就先看看能不能接收到時(shí)鐘的鬧鐘數(shù)值,在set_alarm()中添加didi(),現(xiàn)象是鬧鐘響,說明進(jìn)入到了時(shí)鐘的鬧鐘數(shù)值設(shè)置中,在didi()中又進(jìn)入flag=1,讓時(shí)鐘靜止,現(xiàn)象是時(shí)鐘沒有靜止,說明時(shí)鐘設(shè)置好鬧鐘后到設(shè)定時(shí)間沒有進(jìn)入鬧鐘響聲程序,
總結(jié)
以上是生活随笔為你收集整理的郭天祥的10天学会51单片机_第十一节的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《黑客攻防技术宝典:系统实战篇(第2版)
- 下一篇: 8086汇编语言(一) 汇编语言源程序