久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2730|回復: 4
打印 上一主題 下一主題
收起左側

求這個c程序的最詳細解釋

[復制鏈接]
跳轉到指定樓層
樓主
ID:73480 發表于 2015-4-1 20:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這是一個計時器

#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()        //控制無源蜂鳴器響函
{
     bz=1;
         delay(2);
         bz=0;
         delay(2);
}
void write_com(uchar com)//1602寫命令函數
{
        lcdrs=0;
        lcdrw=0;
        P2=com;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}
void write_date(uchar date)//1602寫數據函數
{
        lcdrs=1;
        lcdrw=0;
        P2=date;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}         
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 init()//初始化函數
{
        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()//按鍵函數
{
        if(k1==0)        //檢測K1按鍵按下
        {
                delay(5);        //延時
                if(k1==0)        //再次檢測K1按鍵按下
                {       
                        k1num++;
                        while(!k1);       
                      if(k1num==1) //第一次按K1
                                {
                                                TR0=0;//關閉定時器
                                        write_com(0x80+0x40+7);//光標閃爍的位置
                                        write_com(0x0f);//開啟光標閃爍
                               
                                }
                                if(k1num==2)//第二次按K1
                                {
                                        write_com(0x80+0x40+4);//光標閃爍的位置
                                }
                                if(k1num==3)//第三次按K1
                                {
                                        write_com(0x80+0x40+1);//光標閃爍的位置       
                                }
                                                if(k1num==4)//第四次按K1
                                {
                                        TR0=1;//開定時器
                                        k1num=0;//按清零鍵次數
                                        write_com(0x0c);//關閉光標閃爍
                                }
                }
                       
        }
        if(k1num!=0)//K1沒有按下的時候
                {
                                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()        //主函數
{
        init();//初始化
        while(1)
        {
                keyscan();//等待檢測是否有按鍵按下
        }
       
}
void timer0() interrupt 1 //中斷函數
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        aa++;
                if(aa==18)
                {
                        aa=0;
                        miao--;
                        if((miao==-1)&&(fen==1)&&(shi==0))         //判斷到計時一分鐘一秒鐘報警
                                {
                                                                for(beepz=0;beepz<110;beepz++)         //一秒鐘報警
                                {
                                beep();
                                }
                                }         
                        if((miao==-1)&&(fen==0)&&(shi==0))         //判斷倒計時到時長響報警
                                {
                                  TR0=0;
                                  miao=0;
                                  fen=0;
                                  shi=0;
                                  while(1) //長報警
                                  {
                                          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);
                }       
               

}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:75077 發表于 2015-4-2 09:51 | 只看該作者
回復

使用道具 舉報

板凳
ID:73833 發表于 2015-4-2 20:23 | 只看該作者
-------------!。
回復

使用道具 舉報

地板
ID:29301 發表于 2015-4-3 10:00 | 只看該作者
自己先看,看不懂了再問,這個都是模塊的東西,一個一個看總會懂的
回復

使用道具 舉報

5#
ID:76287 發表于 2015-4-7 18:53 | 只看該作者
想要畫一個點火芯片的封裝,可是一到pcb就出錯。這個芯片的底部也作為一個焊盤。我的思路是,用一個多層的焊盤作為引腳11,然后上面加幾個過孔從而可以從下面走線,可是這樣在pcb中顯示出錯
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产福利在线 | 在线免费观看a级片 | 蜜臀久久 | 国产精品精品 | 亚洲一区二区三区在线 | 国产中的精品av涩差av | 在线观看免费国产 | 欧美在线二区 | 精品国产一区二区国模嫣然 | 国产四虎| 精品国产黄色片 | 精品欧美一区二区三区久久久 | 国内精品久久精品 | 免费在线观看一区二区三区 | 欧美日韩成人在线 | 国产一区日韩在线 | 久久在线 | 日韩在线一区视频 | 日日天天 | 91一区二区三区在线观看 | 国产精品一卡二卡三卡 | 国产色网站 | 亚洲精品一区在线观看 | 91在线精品一区二区 | 免费视频99 | 日韩一区在线观看视频 | 欧美v日韩v | 欧美在线视频网 | 色婷婷婷婷色 | 麻豆久久久久久久 | 成人亚洲精品 | 天天爽天天操 | 日日操夜夜操天天操 | 中文字幕av在线播放 | 亚洲高清视频在线观看 | 亚洲一二三区在线观看 | 亚洲电影一区二区三区 | 97免费视频在线观看 | 性做久久久久久免费观看欧美 | 亚洲精品乱码久久久久久9色 | 欧美影院|