標(biāo)題: 求這個(gè)c程序的最詳細(xì)解釋 [打印本頁(yè)]

作者: 宰豬的羊羔    時(shí)間: 2015-4-1 20:20
標(biāo)題: 求這個(gè)c程序的最詳細(xì)解釋
這是一個(gè)計(jì)時(shí)器

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcden=P0^5;//1602的使能端
sbit lcdrs=P0^7;
sbit lcdrw=P0^6;
sbit k1=P3^5;//功能按鍵
sbit k2=P3^4;//加按鍵
sbit k3=P3^3;//減按鍵
sbit bz=P0^4;//蜂鳴器
uchar code table[]="countdown...";
uchar code table1[]="00:00:00";
uchar num,aa,k1num,k2num,k3num;
char shi,fen,miao,qian,bai,beepz;
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
void beep()        //控制無(wú)源蜂鳴器響函
{
     bz=1;
         delay(2);
         bz=0;
         delay(2);
}
void write_com(uchar com)//1602寫(xiě)命令函數(shù)
{
        lcdrs=0;
        lcdrw=0;
        P2=com;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}
void write_date(uchar date)//1602寫(xiě)數(shù)據(jù)函數(shù)
{
        lcdrs=1;
        lcdrw=0;
        P2=date;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}         
void write_sfm(uchar add,uchar date)//寫(xiě)時(shí)分秒函數(shù)
{
        uchar shi,ge;
        shi=date/10;
        ge=date%10;
        write_com(0x80+0x40+add);
        write_date(0x30+shi);
        write_date(0x30+ge);
}

void init()//初始化函數(shù)
{
        miao=59;
        fen=59;
        shi=23;
        lcden=0;
        write_com(0x38);
        write_com(0x0c);
        write_com(0x06);
        write_com(0x01);
    write_com(0x80);
        for(num=0;num<12;num++)
                {
                        write_date(table[num]);
                        delay(5);
                }  
                write_com(0x80+0x40);
                for(num=0;num<8;num++)
                {
                        write_date(table1[num]);
                        delay(5);
                }
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;
        ET0=1;
        TR0=1;
        write_sfm(6,miao);
        write_sfm(3,fen);
        write_sfm(0,shi);
}
void keyscan()//按鍵函數(shù)
{
        if(k1==0)        //檢測(cè)K1按鍵按下
        {
                delay(5);        //延時(shí)
                if(k1==0)        //再次檢測(cè)K1按鍵按下
                {       
                        k1num++;
                        while(!k1);       
                      if(k1num==1) //第一次按K1
                                {
                                                TR0=0;//關(guān)閉定時(shí)器
                                        write_com(0x80+0x40+7);//光標(biāo)閃爍的位置
                                        write_com(0x0f);//開(kāi)啟光標(biāo)閃爍
                               
                                }
                                if(k1num==2)//第二次按K1
                                {
                                        write_com(0x80+0x40+4);//光標(biāo)閃爍的位置
                                }
                                if(k1num==3)//第三次按K1
                                {
                                        write_com(0x80+0x40+1);//光標(biāo)閃爍的位置       
                                }
                                                if(k1num==4)//第四次按K1
                                {
                                        TR0=1;//開(kāi)定時(shí)器
                                        k1num=0;//按清零鍵次數(shù)
                                        write_com(0x0c);//關(guān)閉光標(biāo)閃爍
                                }
                }
                       
        }
        if(k1num!=0)//K1沒(méi)有按下的時(shí)候
                {
                                if(k2==0)
                                        {
                                                delay(5);
                                                if(k2==0)
                                                {
                                                        while(!k2);
                                                                if(k1num==1)
                                                                {
                                                                        miao++;
                                                                        if(miao==60)
                                                                        {
                                                                                miao=0;
                                                                        }
                                                                        //s1=0;
                                                                        write_sfm(6,miao);
                                                                        write_com(0x80+0x40+7);       
                                                                }
                                                                        if(k1num==2)
                                                                {
                                                                        fen++;
                                                                        if(fen==60)
                                                                        {
                                                                                fen=0;
                                                                        }
                                                                        //s1=0;
                                                                        write_sfm(3,fen);
                                                                        write_com(0x80+0x40+4);       
                                                                }
                                                                        if(k1num==3)
                                                                {
                                                                        shi++;
                                                                        if(shi==24)
                                                                        {
                                                                                shi=0;
                                                                        }
                                                                        //s1=0;
                                                                        write_sfm(0,shi);
                                                                        write_com(0x80+0x40+1);       
                                                                }
                                                                                                }
                                        }
                                        if(k3==0)
                                        {
                                                delay(5);
                                                if(k3==0)
                                                {
                                                        while(!k3);
                                                        if(k1num==1)
                                                        {
                                                                 miao--;
                                                                if(miao==-1)
                                                                {
                                                                        miao=59;
                                                                }
                                                                write_sfm(6,miao);
                                                                write_com(0x80+0x40+7);               
                                                        }
                                                        if(k1num==2)
                                                        {
                                                                fen--;
                                                                if(fen==-1)
                                                                {
                                                                        fen=59;
                                                                }
                                                                write_sfm(3,fen);
                                                                write_com(0x80+0x40+4);
                                                        }
                                                        if(k1num==3)
                                                        {
                                                                shi--;
                                                                if(shi==-1)
                                                                {
                                                                        shi=23;
                                                                }
                                                                write_sfm(0,shi);
                                                                write_com(0x80+0x40+1);       
                                                        }
                                                                                                        }
                                        }
                }
       
}  
void main()        //主函數(shù)
{
        init();//初始化
        while(1)
        {
                keyscan();//等待檢測(cè)是否有按鍵按下
        }
       
}
void timer0() interrupt 1 //中斷函數(shù)
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        aa++;
                if(aa==18)
                {
                        aa=0;
                        miao--;
                        if((miao==-1)&&(fen==1)&&(shi==0))         //判斷到計(jì)時(shí)一分鐘一秒鐘報(bào)警
                                {
                                                                for(beepz=0;beepz<110;beepz++)         //一秒鐘報(bào)警
                                {
                                beep();
                                }
                                }         
                        if((miao==-1)&&(fen==0)&&(shi==0))         //判斷倒計(jì)時(shí)到時(shí)長(zhǎng)響報(bào)警
                                {
                                  TR0=0;
                                  miao=0;
                                  fen=0;
                                  shi=0;
                                  while(1) //長(zhǎng)報(bào)警
                                  {
                                          beep();
                                  }
                                }
                        if(miao==-1)
                        {
                                miao=59;
                                fen--;
                               
                                if(fen==-1)
                                {
                                        fen=59;
                                        shi--;
                                                                  write_sfm(0,shi);
                                }
                                   write_sfm(3,fen);
                        }
                          write_sfm(6,miao);
                }       
               

}


作者: 野強(qiáng)強(qiáng)    時(shí)間: 2015-4-2 09:51

作者: dingmingzhou    時(shí)間: 2015-4-2 20:23
-------------。!
作者: wqearth    時(shí)間: 2015-4-3 10:00
自己先看,看不懂了再問(wèn),這個(gè)都是模塊的東西,一個(gè)一個(gè)看總會(huì)懂的
作者: livingliving    時(shí)間: 2015-4-7 18:53
想要畫(huà)一個(gè)點(diǎn)火芯片的封裝,可是一到pcb就出錯(cuò)。這個(gè)芯片的底部也作為一個(gè)焊盤(pán)。我的思路是,用一個(gè)多層的焊盤(pán)作為引腳11,然后上面加幾個(gè)過(guò)孔從而可以從下面走線,可是這樣在pcb中顯示出錯(cuò)




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1