色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

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

          基于TLC1549的單片機(jī)數(shù)字電壓表程序

          作者: 時(shí)間:2012-11-15 來源:網(wǎng)絡(luò) 收藏

          #include reg52.h> //52系列頭文件
          #define Disdata P1 //液晶數(shù)據(jù)端口
          #define uchar unsigned char //無符號字符8位
          #define uint unsigned int //無符號整數(shù)8位
          uint data dis[4]={0x00,0x00,0x00,0x00};//4個數(shù)據(jù)單元和一個
          uchar code table[]="VOLTAGE:+ . V"; //定義初始上電液晶默認(rèn)顯示狀態(tài)
          uchar code table1[]="designed by :";
          uchar code table3[]=" Li Xiaojun";
          uchar code table2[]="SCOPE: 0-50.00V";
          uchar code table4[]=" not reversed! ";
          sbit lcden=P3^2;//定義液晶使能端
          sbit lcdrs=P3^0;//定義液晶RS端
          sbit rw=P3^1;//定義液晶RW端
          sbit ALE=P2^3;//定義鎖存地址控制位
          sbit cs_ad=P3^5;//片選段,低電平有效
          sbit dout=P3^4;//數(shù)據(jù)輸出端
          sbit clk=P3^3; //轉(zhuǎn)換結(jié)束標(biāo)志位
          sbit speak=P3^7;//蜂鳴器
          sbit bijiao=P3^6;//接反檢測信號
          data int result;//測量變量暫存地址
          void jiefan();//接反子函數(shù)
          uchar num,num1,num2,num3,num4,num5;
          uchar shii,gei;

          //********延時(shí)函數(shù)************
          void delay(uint z)
          {
          uint x,y;
          for(x=z;x>0;x--)
          for(y=110;y>0;y--);
          }

          //*************
          void write_com(uchar com) //液晶寫命令函數(shù)
          {
          lcdrs=0;
          P1=com;
          delay(5);
          lcden=1;
          delay(5);
          lcden=0;
          }
          void write_data(uchar date) //液晶寫數(shù)據(jù)函數(shù)
          {
          lcdrs=1;
          P1=date;
          delay(5);
          lcden=1;
          delay(5);
          lcden=0;
          }
          void write_sg(uchar add,uchar date) //寫整數(shù)位和小數(shù)位函數(shù)
          {
          uchar shi,ge;
          shi=date/10; //分解出一個2位數(shù)的十位
          ge=date%10;
          write_com(0x80+add);//設(shè)置顯示位置
          write_data(0x30+shi);//送去液晶顯示十位
          write_data(0x30+ge); //送去液晶顯示個位
          }

          void init()
          {
          rw=0;
          lcden=0;
          shii=0;
          gei=0;
          write_com(0x38); //初始化1602液晶
          write_com(0x0c);
          write_com(0x06);
          write_com(0x01);
          write_com(0x80); //設(shè)置顯示初始坐標(biāo)

          for(num2=0;num213;num2++)
          {
          write_data(table1[num2]);
          delay(5);
          }
          write_com(0x80+40);
          for(num3;num316;num3++)
          {
          write_data(table3[num3]);
          delay(5);
          }
          delay(3000);

          }

          //*******************************
          void scan1()
          {
          write_com(0x80); //設(shè)置顯示初始坐標(biāo)
          for(num=0;num16;num++)
          {
          write_data(table[num]);
          delay(5);
          }
          write_sg(9,shii);
          write_sg(12,gei);
          write_com(0x80+40);
          for(num1;num116;num1++)
          {
          write_data(table2[num1]);
          delay(5);
          }
          write_sg(9,shii);
          write_sg(12,gei);
          }

          //****轉(zhuǎn)換處理子函數(shù)********

          void test()

          {

          data uchar i;

          cs_ad=1; //禁止i/o clock
          cs_ad=0; //開啟控制電路,使能data out和i/o clock
          result=0; //清轉(zhuǎn)換變量
          for(i=0;i10;i++) //采集10次 ,即10bit
          {
          clk=0;
          result*=2;
          if(dout) result++;
          clk=1;
          }
          delay(590);
          cs_ad=1; ;;;; //data out 返回到高阻狀態(tài)而終止序列
          //****數(shù)據(jù)轉(zhuǎn)換處理**********
          result=result*10;//結(jié)果值擴(kuò)大10倍
          dis[2]=result/205;//計(jì)算整數(shù)位
          dis[3]=result%205;//余數(shù)暫存
          dis[3]=dis[3]*10;//計(jì)算小數(shù)第一位
          dis[1]=dis[3]/205;
          dis[3]=dis[3]%205;
          dis[3]=dis[3]*10; //計(jì)算小數(shù)第二位
          dis[0]=dis[3]/205;
          shii=dis[2];
          gei=dis[1]*10+dis[0];
          write_sg(9,shii);
          write_sg(12,gei);

          }
          //*****接反子函數(shù)*********
          void jiefan()
          {
          if(bijiao==0)
          {
          delay(100);
          if(bijiao==0)
          {
          speak=0;
          }
          else
          speak=1;

          }
          else
          {
          speak=1;

          }
          }
          //*******主函數(shù)*****
          void main()
          {
          init();
          scan1();
          while(1)
          {
          test();
          jiefan();
          }
          }


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

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

          關(guān)閉