新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于TLC1549的單片機數字電壓表程序

        基于TLC1549的單片機數字電壓表程序

        作者: 時間:2012-11-15 來源:網絡 收藏

        #include reg52.h> //52系列頭文件
        #define Disdata P1 //液晶數據端口
        #define uchar unsigned char //無符號字符8位
        #define uint unsigned int //無符號整數8位
        uint data dis[4]={0x00,0x00,0x00,0x00};//4個數據單元和一個
        uchar code table[]="VOLTAGE:+ . V"; //定義初始上電液晶默認顯示狀態
        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;//數據輸出端
        sbit clk=P3^3; //轉換結束標志位
        sbit speak=P3^7;//蜂鳴器
        sbit bijiao=P3^6;//接反檢測信號
        data int result;//測量變量暫存地址
        void jiefan();//接反子函數
        uchar num,num1,num2,num3,num4,num5;
        uchar shii,gei;

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

        //*************
        void write_com(uchar com) //液晶寫命令函數
        {
        lcdrs=0;
        P1=com;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
        }
        void write_data(uchar date) //液晶寫數據函數
        {
        lcdrs=1;
        P1=date;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
        }
        void write_sg(uchar add,uchar date) //寫整數位和小數位函數
        {
        uchar shi,ge;
        shi=date/10; //分解出一個2位數的十位
        ge=date%10;
        write_com(0x80+add);//設置顯示位置
        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); //設置顯示初始坐標

        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); //設置顯示初始坐標
        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);
        }

        //****轉換處理子函數********

        void test()

        {

        data uchar i;

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

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

        }
        else
        {
        speak=1;

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


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 格尔木市| 沂源县| 榆中县| 漾濞| 昌平区| 郯城县| 普兰店市| 雅安市| 射阳县| 莱西市| 香港| 永顺县| 略阳县| 江华| 右玉县| 保德县| 昌平区| 岚皋县| 中西区| 石狮市| 孟津县| 青浦区| 图片| 商南县| 竹溪县| 沂源县| 屯门区| 濮阳县| 兴和县| 德江县| 巴彦县| 璧山县| 三河市| 安阳市| 镇巴县| 博客| 磐石市| 海盐县| 湘潭市| 汝城县| 会理县|