在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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)用 > 一個(gè)簡(jiǎn)單的單片機(jī)直流可調(diào)穩(wěn)壓電源設(shè)計(jì)

            一個(gè)簡(jiǎn)單的單片機(jī)直流可調(diào)穩(wěn)壓電源設(shè)計(jì)

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

            main.c 代碼
            #include"reg52.h"
            #include "intrins.h"
            #include "AT24C04.h"

            #define uchar unsigned char
            #define uint unsigned int

            uchar code LED[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
            uchar code Bit_sel[4] = {0x08,0x04,0x02,0x01 }; //各個(gè)數(shù)碼管對(duì)應(yīng)的位選數(shù)據(jù)

            sbit DIO = P1^0; //數(shù)據(jù)線
            sbit CS = P1^1; //片選
            sbit CLK = P1^2; //io口時(shí)鐘

            sbit SCS = P1^4;
            sbit SDATA = P1^5;
            sbit SCLK = P1^3;

            sbit ADD = P3^0;
            sbit SUB = P3^1;
            sbit Pre_read = P3^2;
            sbit Store = P3^3;

            uint qian,bai,shi,ge; //用于顯示數(shù)碼管的 千,百,十,個(gè) 等四位的顯示
            uint val,num; //val 是用于輸入DA 的數(shù)據(jù),num是用于判斷是不是長(zhǎng)按的
            uint cp; //計(jì)數(shù)的變量
            uchar key_stat;
            ucharadd_stat,sub_stat;
            uchar st_flag,pre_flag;

            void delay(uint x) //微妙級(jí)是延時(shí)函數(shù)
            {
            while(x--)
            _nop_();
            }

            /**********************************************
            函數(shù)名稱:deal
            函數(shù)作用:處理AD的返回值
            函數(shù)參數(shù):無(wú)
            函數(shù)返回值:無(wú)
            **********************************************/
            void deal(uint num) //顯示程序
            {
            qian=num/1000; //千,百,十,個(gè)處理
            bai=num/100%10;
            shi=num/10%10;
            ge=num%10;
            }

            /**********************************************
            函數(shù)名稱:TL549_AD()
            函數(shù)作用:返回AD的返回值
            函數(shù)參數(shù):無(wú)
            函數(shù)返回值:data_ad
            **********************************************/
            uint TL549_AD() //TLC549處理
            {
            uchar i;
            uint data_ad = 0;
            CS = 1; //初始化,啟動(dòng)
            CLK = 0;
            CS = 0;
            _nop_();
            for(i = 0;i < 8;i++) //讀取采集數(shù)據(jù),讀取的是上一次采集數(shù)據(jù)
            {
            CLK = 1;
            if(DIO)data_ad |= 0x01;
            CLK = 0;
            data_ad = data_ad << 1;
            }
            CS = 1;
            data_ad = data_ad * (500/ 256);
            return(data_ad);
            }

            /**********************************************
            函數(shù)名稱:TLC5615_DA(uint da)
            函數(shù)作用:TLC5615_DA 將da轉(zhuǎn)換后模擬輸出
            函數(shù)參數(shù):da
            函數(shù)返回值:無(wú)
            **********************************************/
            void TLC5615_DA(uint da) // TLC5615 的DA 轉(zhuǎn)換函數(shù)
            {
            uchar i;
            da<<=6;

            SCS=0;
            SCLK=0;

            for (i=0;i<12;i++)
            {
            SDATA=(bit)(da&0x8000);
            SCLK=1;
            da<<=1;
            SCLK=0;
            }

            SCS=1;
            SCLK=0;
            for (i=0;i<12;i++);
            }

            /**********************************************
            函數(shù)名稱:key_scan()
            函數(shù)作用:處理那些獨(dú)立鍵盤(pán)
            函數(shù)參數(shù):無(wú)
            函數(shù)返回值:無(wú)
            **********************************************/
            void key_scan()
            {
            if (ADD == 0) // ADD 按鍵的鍵盤(pán)處理函數(shù)
            {
            delay(10);
            if (ADD == 0)
            {
            add_stat = 1;
            num ++;
            }
            else
            {
            add_stat = 0;
            num = 0;
            }
            //此處判斷是不是長(zhǎng)按,長(zhǎng)按的話 使其步進(jìn)值 加大
            if (ADD == 0 && add_stat == 1 && num >= 300)
            {
            val += 5;
            num = 0;
            }
            if (ADD == 1 && add_stat == 1)
            {
            val ++;
            num = 0;
            add_stat = 0;
            }
            if (val >= 1024)
            {
            val = 1023;
            }
            }

            if (SUB == 0) //SUB 按鍵的鍵盤(pán)處理函數(shù)
            {
            delay(10);
            if (SUB == 0)
            {
            sub_stat = 1;
            num ++;
            }
            if (SUB == 0 && sub_stat == 1 && num >= 300)
            {
            val -= 5;
            num = 0;
            }
            if (SUB == 1 && sub_stat == 1)
            {
            val --;
            num = 0;
            sub_stat = 0;
            }
            if (val <= 0)
            val = 0;
            }

            if (Pre_read == 0) //預(yù)讀數(shù)據(jù)的 鍵盤(pán)處理函數(shù)
            {
            delay(100);
            if (Pre_read == 0)
            {
            pre_flag = 1;
            }
            if (Pre_read == 1 &&pre_flag == 1 )
            {
            pre_flag = 0;
            val = read_24C04(20); //從AT24C04中的地址20 中讀出預(yù)存儲(chǔ)的數(shù)據(jù)
            }
            }

            if (Store == 0) //保存數(shù)值 按鍵的鍵盤(pán)處理函數(shù)
            {
            delay(100);
            if (Store == 0)
            {
            st_flag = 1;
            }
            if (Store == 1 && st_flag == 1)
            {
            st_flag = 0;
            write_24C04(20,val); //向AT24C04中的地址20 寫(xiě)入存儲(chǔ)的數(shù)據(jù)
            }
            }
            }
            /**********************************************
            函數(shù)名稱:timer0_init (void)
            函數(shù)作用:初始化定時(shí)器0,并設(shè)置
            函數(shù)參數(shù):無(wú)
            函數(shù)返回值:無(wú)
            **********************************************/
            void timer0_init (void) // timer0中斷初始化函數(shù)
            {
            EA = 0;
            TMOD = 0x01;
            TR0 = 0;
            TL0 = (65536-5000)%256; //設(shè)置計(jì)數(shù)器初值
            TH0 = (65536-5000)/256;
            PT0 = 1;
            ET0 = 1;
            EA = 1;
            TR0 = 1;
            }
            /**********************************************
            函數(shù)名稱:main(void)
            函數(shù)作用:main主函數(shù)入口
            函數(shù)參數(shù):無(wú)
            函數(shù)返回值:無(wú)
            **********************************************/
            void main(void) //主程序
            {
            timer0_init(); //初始化定時(shí)器0
            init_24C04(); //初始化AT24C04
            while(1)
            {
            key_scan(); //調(diào)用鍵盤(pán)掃描函數(shù)
            TLC5615_DA(val); //處理鍵盤(pán)發(fā)送過(guò)來(lái)的值
            }
            }

            /**********************************************
            函數(shù)名稱:timer0_isr(void) interrupt 1
            函數(shù)作用:定時(shí)器0,方式1,的中斷服務(wù)子程序
            函數(shù)參數(shù):無(wú)
            函數(shù)返回值:無(wú)
            **********************************************/
            void timer0_isr(void) interrupt 1 // timer0中斷服務(wù)函數(shù)
            {
            //數(shù)碼管的位選變量
            TR0 = 0; //停止計(jì)數(shù)
            TL0 = (65536-5000)%256; //重新載入計(jì)數(shù)器初值
            TH0 = (65536-5000)/256;
            cp++; //位循環(huán)變量加1
            if(cp >= 4)
            cp = 0;
            deal(TL549_AD()); //循環(huán)顯示1次,j清零
            TR0 = 1;

            P0=0xff; //與j對(duì)應(yīng),P2輸出數(shù)碼管的位選信號(hào)
            switch(cp)
            {
            case 0: P0 = LED[ge]; break;
            case 1: P0 = LED[shi]; break;
            case 2: P0 = LED[bai]&0x7f; break;
            case 3: P0 = LED[qian]; break;
            }
            P2 = Bit_sel[cp];
            }


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

            評(píng)論


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

            關(guān)閉