<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 時(shí)鐘及溫度用74hc164+74ls145數(shù)碼管顯示單片機(jī)程序

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

          作者: 時(shí)間:2016-12-01 來(lái)源:網(wǎng)絡(luò) 收藏
          下面是實(shí)物圖:




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

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

          #include
          #include
          #define uchar unsigned char
          #define uint unsigned int
          sbit iicclk=P1^0;////總線存儲(chǔ)時(shí)鐘引腳定義
          sbit iicdat=P1^1;////總線存儲(chǔ)數(shù)據(jù)引腳定義
          sbit hc164dat=P1^2;//段顯串行數(shù)據(jù)引腳定義
          sbit hc164clk=P1^3;//段顯串行時(shí)鐘引腳定義
          /*sbit hc164clr=P1^4;*///段顯芯片清零引腳,低電平時(shí),全部輸出引腳清零,即低電平
          sbit ls145p0=P1^5;///位選譯碼芯片P0
          sbit ls145p1=P1^6;///位選譯碼芯片P1
          sbit ls145p2=P1^7;///位選譯碼芯片P2
          sbit ls145p3=P3^7;///位選譯碼芯片P2,用于在74HC164移入數(shù)據(jù)時(shí)P0~P3全置高,關(guān)閉所有數(shù)碼管
          sbit DS1820DQ=P0^0;
          sbit ADD=P0^4;///////加一
          sbit MINUS=P0^5;/////減一
          sbit ENTER=P0^6;/////確定
          sbit SET=P0^7;///////設(shè)定鍵
          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為關(guān)閉所有位選
          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í)函數(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是定時(shí)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);//時(shí)序延時(shí)500US
          DS1820DQ=1;
          delay10us(6);//時(shí)序延時(shí)20us
          if(DS1820DQ==0)dqflag=1;
          DelayX0us(42);


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

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

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

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

          delayns();//時(shí)序延時(shí)
          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);//延時(shí)70us
          }

          return dat;

          }
          void write164(uchar x)
          {
          uchar y;
          hc164clk=0;//時(shí)鐘置低
          _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];//關(guān)閉所有數(shù)碼管的位選
          hc164clk=0;//時(shí)鐘置低,以產(chǎn)生上升沿移入數(shù)據(jù)
          IE=0X82; //EA=1開(kāi)總中斷ET0=1定時(shí)器零中斷允許
          TCON=0X10;//TR0=1定時(shí)零中斷啟動(dòng)
          TMOD=0X01;//M1M0=01 T0 工作方式1,16位定時(shí)器
          TH0=(65636-50000)/256;
          TL0=(65636-50000)%256;//50ms定時(shí)初值
          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í)時(shí)間計(jì)算函數(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()//設(shè)定程序入口
          {
          if(SET==0)
          {
          setflag=1;
          }


          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();