在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于stc89c52rc單片機(jī)的數(shù)字鐘設(shè)計(jì)程序

            基于stc89c52rc單片機(jī)的數(shù)字鐘設(shè)計(jì)程序

            作者: 時(shí)間:2012-08-13 來(lái)源:網(wǎng)絡(luò) 收藏

            與數(shù)字中的顯示類似,

            增加:

            液晶初始化部分

            寫命令部分

            寫數(shù)據(jù)部分


            ********************************************************

            #includereg52.h>
            #define uchar unsigned char
            #define uint unsigned int
            sbit rs = P2^6; //1602相應(yīng)
            sbit rw = P2^5;
            sbit ep = P2^7;

            uchar hour,min,sec,k;

            uchar key;
            unsigned char lcdd[]="0123456789";
            uchar key_code[] = {0xb7,0xbb,0xbd,0xbe};//鍵盤編碼,我只用到四個(gè)鍵。 你我的編碼可能不同 ,具體看電路如何連接。

            void delay(uint z)
            {

            uint x,y;
            for(z=x;x>0;x--)
            for(y=100;y>0;y--);
            }

            bit lcd_bz()
            { // 測(cè)試LCD忙碌狀態(tài)
            bit result;
            rs = 0;
            rw = 1;
            ep = 1;
            delay(5);
            result = (bit)(P0 0x80);//判斷P0^7是一還是零.屏蔽掉其它位0x80.強(qiáng)制轉(zhuǎn)換位bit型數(shù)據(jù)。在返回給result。
            ep = 0;
            return result;
            }
            void lcd_cmd(uchar cmd)
            {

            while(lcd_bz());
            rs = 0;//rs為1時(shí)寫入的是“數(shù)據(jù)”為0時(shí)寫入“指令”
            rw = 0;//rw為1時(shí)“讀取”為0時(shí)“寫入”
            ep = 0;//使能
            delay(5);
            P0 = cmd;
            delay(5);
            ep = 1;
            delay(5);
            ep = 0;

            }


            void lcd_data(uchar dat )//液晶寫數(shù)據(jù)
            {

            while(lcd_bz());
            rs=1;
            rw=0;
            ep=0;
            P0 = dat;
            delay(5);
            ep = 1;
            delay(5);
            ep = 0;
            //return dat;
            }

            void lcd_init() //液晶寫命令
            {
            delay(15); //等待LCD電源穩(wěn)定
            lcd_cmd(0x38);
            delay(10);
            lcd_cmd(0x38);
            delay(10);
            lcd_cmd(0x38);
            delay(10);

            lcd_cmd(0x0c); //顯示開(kāi),關(guān)光標(biāo)
            delay(10);
            lcd_cmd(0x06); //移動(dòng)光標(biāo)
            delay(10);
            lcd_cmd(0x01); //清除LCD的顯示內(nèi)容
            delay(10);
            }


            void timer0() interrupt 1
            {
            TH0=(65536-50000)/256;
            TL0=(65536-50000)%256;
            k++;
            if(k==20)
            {
            k=0;
            sec++;

            }

            if(sec>59)
            {
            min++;
            sec=0;
            }
            if(min>59)
            {
            min=0;
            hour++;
            }
            if(hour>23)
            {
            hour=0;
            }
            }


            void disptime() //時(shí)間顯示函數(shù)
            {
            lcd_cmd(0x0c); //設(shè)置光標(biāo)不顯示、不閃爍
            delay(20);
            lcd_cmd(0x80); //起始顯示地址
            delay(20);

            lcd_data(lcdd[hour/10]);
            delay(10);
            lcd_data(lcdd[hour%10]);
            delay(10);
            lcd_data(':');
            delay(12);

            lcd_data(lcdd[min/10]);
            delay(10);
            lcd_data(lcdd[min%10]);
            delay(12);
            lcd_data(':');
            delay(12);

            lcd_data(lcdd[sec/10]);
            delay(12);
            lcd_data(lcdd[sec%10]);
            delay(12);
            lcd_data(' ');
            delay(12);


            }

            uchar keyscan() //鍵盤掃描程序
            {
            uchar scan1, scan2, keycode, j;

            P1 = 0xf0;
            scan1 = P1;
            if (scan1 != 0xf0)
            //判鍵是否按下
            {
            delay(10); //延時(shí)10ms
            scan1 = P1;
            if (scan1 != 0xf0)
            //二次判鍵是否按下
            {
            TR0=0; //如果有鍵按下 則定時(shí)器停止工作
            P1 = 0x0f;
            scan2 = P1;
            keycode = scan1 | scan2; //組合成鍵掃描編碼

            for (j = 0; j 4; j++)
            {
            if (keycode == key_code[j])
            //查表得鍵值
            {
            key = j;
            while(P1!= 0x0f) //松手有效 這里需要好好研究一下 可以用萬(wàn)用表測(cè)量管腳電壓幫助理解
            disptime();
            return (key); //返回有效鍵值
            }
            }
            }

            }
            else
            P1 = 0xff;


            return (key = 4); //返回?zé)o效碼
            }



            void Set_time(uchar key)
            {

            if(key==0||key==1||key==2)//若s1,s2,s3其中有鍵按下,則為真
            {
            if(key==0)
            {
            sec++;
            if(sec>59)
            {
            sec=0;
            }
            }
            else if(key==1)
            {
            min++;
            if(min>59)
            {
            min=0;
            }
            }
            else if(key==2)
            {
            hour++;
            if(hour>23)
            {
            hour=0;
            }
            }


            }
            else if(key==3)
            {
            TR0=1; //按下退出鍵 定時(shí)器繼續(xù)工作

            }
            }


            void sysint() //定時(shí)器初始化
            {

            TMOD=0x01;
            TH0=(65536-50000)/256;
            TL0=(65536-50000)%256;
            EA=1;
            ET0=1;
            TR0=1;
            }


            void timeint() //初始化
            {

            hour=0;
            min=0;
            sec=0;
            }

            void main()
            {

            sysint() ;
            timeint();
            lcd_init();//函數(shù)調(diào)用
            while(1)
            {
            keyscan();//調(diào)用鍵盤掃描,
            Set_time(key);
            disptime();

            }
            }



            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉