在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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首頁 > 嵌入式系統(tǒng) > 設計應用 > 時鐘及溫度用74hc164+74ls145數(shù)碼管顯示單片機程序

            時鐘及溫度用74hc164+74ls145數(shù)碼管顯示單片機程序

            作者: 時間:2016-12-01 來源:網(wǎng)絡 收藏
            下面是實物圖:




            電路圖很簡單我就不畫了 數(shù)碼管用74hc164串行轉并行芯片+74ls145這2個芯片驅動一個負責段選一個負責位選,具體看程序頂部的引腳定義.完整的keil工程文件下載地址:http://www.51hei.com/f/164smg.rar 下面是程序源碼.

            本文引用地址:http://www.biyoush.com/article/201612/324565.htm

            #include
            #include
            #define uchar unsigned char
            #define uint unsigned int
            sbit iicclk=P1^0;////總線存儲時鐘引腳定義
            sbit iicdat=P1^1;////總線存儲數(shù)據(jù)引腳定義
            sbit hc164dat=P1^2;//段顯串行數(shù)據(jù)引腳定義
            sbit hc164clk=P1^3;//段顯串行時鐘引腳定義
            /*sbit hc164clr=P1^4;*///段顯芯片清零引腳,低電平時,全部輸出引腳清零,即低電平
            sbit ls145p0=P1^5;///位選譯碼芯片P0
            sbit ls145p1=P1^6;///位選譯碼芯片P1
            sbit ls145p2=P1^7;///位選譯碼芯片P2
            sbit ls145p3=P3^7;///位選譯碼芯片P2,用于在74HC164移入數(shù)據(jù)時P0~P3全置高,關閉所有數(shù)碼管
            sbit DS1820DQ=P0^0;
            sbit ADD=P0^4;///////加一
            sbit MINUS=P0^5;/////減一
            sbit ENTER=P0^6;/////確定
            sbit SET=P0^7;///////設定鍵
            uchar code tabledu[]={0xed,0x21,0x8f,0xab,0x63,0xea,0xee,0xa1,0xef,0xeb,0x0};//垃圾顯示板0~~9段顯數(shù)據(jù)
            uchar code tablewe[]={0x0,0x20,0x40,0x60,0x80,0xa0,0xc0,0xe0,0x10};//位選編碼,P2口高八位產(chǎn)生編碼值,0x10為關閉所有位選
            char dateshu[8];
            uchar tim,sec,ming,mins,hourg,hours,min,hour,setflag,seta,dqflag,temperl,temperh,dat;
            void delay1ms(uint x)//0.5毫秒延時函數(shù)
            {
            uint y,z;
            for(y=x;y>0;y--)
            for(z=60;z>0;z--);
            }
            void delayns()
            {
            _nop_();
            _nop_();

            }
            void delay10us(uchar z)//z為3是定時10微秒
            {
            while(z)
            z--;
            }
            void DelayX0us(uchar n)
            {
            while (n--)
            {
            _nop_();
            _nop_();
            }
            }
            void dqrsr()//1820初始化函數(shù)
            {

            dqflag=0;
            DS1820DQ=1;
            delayns();
            DS1820DQ=0;
            DelayX0us(48);//時序延時500US
            DS1820DQ=1;
            delay10us(6);//時序延時20us
            if(DS1820DQ==0)dqflag=1;
            DelayX0us(42);


            }
            void dqwrite(uchar a)
            {
            uchar i;
            dqflag=0;
            DS1820DQ=1; //to釋放總線
            delayns();//時序延時

            for(i=8;i>0;i--)//寫一個字節(jié)的數(shù)據(jù)
            {
            DS1820DQ=0;//總線置低
            _nop_();
            _nop_();

            a=a>>1;//右移時,逸出位保存到CY中
            DS1820DQ=CY;//發(fā)送送據(jù)
            DelayX0us(6);//延時70us
            DS1820DQ=1; //to釋放總線

            }
            }
            uchar dqread(void)//1820讀函數(shù)
            {
            uchar i;
            DS1820DQ=1; //to釋放總線

            delayns();//時序延時
            for(i=0;i<8;i++)
            {
            dat>>=1;
            DS1820DQ=0;
            _nop_();
            _nop_();
            DS1820DQ=1;
            delayns();

            if(DS1820DQ)dat|=0x80; //如果讀回的數(shù)據(jù)為1則作與處理移入DAT變量

            DelayX0us(6);//延時70us
            }

            return dat;

            }
            void write164(uchar x)
            {
            uchar y;
            hc164clk=0;//時鐘置低
            _nop_();
            _nop_();
            for(y=0;y<8;y++)
            {
            hc164dat=(x&0x80);
            delayns();
            hc164clk=1;
            delayns();
            hc164clk=0;
            delayns();
            x<<=1;
            }

            }
            void init()
            {
            P0=0xff;//輸入接口P0全置一,讓按鍵讀回輸入信息
            P2=tablewe[8];//關閉所有數(shù)碼管的位選
            hc164clk=0;//時鐘置低,以產(chǎn)生上升沿移入數(shù)據(jù)
            IE=0X82; //EA=1開總中斷ET0=1定時器零中斷允許
            TCON=0X10;//TR0=1定時零中斷啟動
            TMOD=0X01;//M1M0=01 T0 工作方式1,16位定時器
            TH0=(65636-50000)/256;
            TL0=(65636-50000)%256;//50ms定時初值
            DS1820DQ=1;

            }
            void iicstart()//暫未使用
            {

            }
            void iicstop()//暫未使用
            {

            }
            void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f,uchar g,uchar h)//顯示函數(shù)
            {
            P2=tablewe[8];
            write164(tabledu[a]);
            P2=tablewe[0];
            delay1ms(2);

            P2=tablewe[8];
            write164(tabledu[b]);
            P2=tablewe[1];
            delay1ms(2);
            P2=tablewe[8];
            write164(tabledu[c]);
            P2=tablewe[2];
            delay1ms(2);
            P2=tablewe[8];
            write164(tabledu[d]);
            P2=tablewe[3];
            delay1ms(2);
            P2=tablewe[8];
            write164(tabledu[e]);
            P2=tablewe[4];
            delay1ms(2);
            P2=tablewe[8];
            write164(tabledu[f]);
            P2=tablewe[5];
            delay1ms(2);
            P2=tablewe[8];
            write164(tabledu[g]);
            P2=tablewe[6];
            delay1ms(2);
            P2=tablewe[8];
            write164(tabledu[h]);
            P2=tablewe[7];
            delay1ms(2);
            }
            void timer()//24小時時間計算函數(shù)
            {

            if(sec>59)
            {


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

            }
            dateshu[0]=sec%10;
            dateshu[1]=sec/10;
            dateshu[2]=min%10;
            dateshu[3]=min/10;
            dateshu[4]=hour%10;
            dateshu[5]=hour/10;


            }
            void key()//設定程序入口
            {
            if(SET==0)
            {
            setflag=1;
            }


            上一頁 1 2 下一頁

            評論


            技術專區(qū)

            關閉