新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 如何設計基于CPLD的溫度計(原理和代碼)?

        如何設計基于CPLD的溫度計(原理和代碼)?

        作者: 時間:2018-07-26 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/201807/384017.htm

        buf1[3:0] = (buf0[3:0]> =10)?(buf0[3:0]-10 + 6):(buf0[3:0]+6);

        buf1[7:4] = (buf0[3:0]> =10)?(buf0[7:4]+1):buf0[7:4];

        buf2[3:0] = (buf1[3:0]> =10)?(buf1[3:0]-10):(buf1[3:0]);

        buf2[7:4] = (buf1[3:0]> =10)?(buf1[7:4]+1):buf1[7:4];

        data_out = buf2;

        end

        default:

        begin

        data_out = data_in;

        end

        endcase

        assign temperature = data_out[7:0]

        # 6. 數碼管顯示

        本設計采用4位共陽極數碼管作為溫度顯示模塊,驅動代碼如下:

        //-----------------數碼管顯示-------------------

        assign sm_sel ={2’b11,sm_sel_r};

        assign sm_dat = sm_dat_r;

        //XXXX = 8‘b{a,b,c,d,e,f,g,dp}

        parameter ZERO = 8’b0000_0011,//8‘b1100_0000,

        ONE = 8’b1001_1111,//8‘b1111_1001,

        TWO = 8’b0010_0101,//8‘b1010_0100,

        THREE = 8’b0000_1101,//8‘b1011_0000,

        FOUR = 8’b1001_1001,//8‘b1001_1001,

        FIVE = 8’b0100_1001,//8‘b1001_0010,

        SIX = 8’b0100_0001,//8‘b1000_0010,

        SEVEN = 8’b0001_1111,//8‘b1111_1000,

        EIGHT = 8’b0000_0001,//8‘b1000_0000,

        NINE = 8’b0000_1001;//8‘b1001_0000;

        reg [7:0] sm_dat_r;

        reg [7:0] sm_dat_r1;

        reg [7:0] sm_dat_r2;

        always @ (*)

        case( temperature[3:0] )

        4’d0 : sm_dat_r1 = ZERO;

        4‘d1 : sm_dat_r1 = ONE;

        4’d2 : sm_dat_r1 = TWO;

        4‘d3 : sm_dat_r1 = THREE;

        4’d4 : sm_dat_r1 = FOUR;

        4‘d5 : sm_dat_r1 = FIVE;

        4’d6 : sm_dat_r1 = SIX;

        4‘d7 : sm_dat_r1 = SEVEN;

        4’d8 : sm_dat_r1 = EIGHT;

        4‘d9 : sm_dat_r1= NINE;

        default:sm_dat_r1 = 8’hFF;

        endcase

        always @ (*)

        case( temperature[6:4] )

        4‘d0 : sm_dat_r2 = ZERO;

        4’d1 : sm_dat_r2 = ONE;

        4‘d2 : sm_dat_r2 = TWO;

        4’d3 : sm_dat_r2 = THREE;

        4‘d4 : sm_dat_r2 = FOUR;

        4’d5 : sm_dat_r2 = FIVE;

        4‘d6 : sm_dat_r2 = SIX;

        4’d7 : sm_dat_r2 = SEVEN;

        4‘d8 : sm_dat_r2 = EIGHT;

        4’d9 : sm_dat_r2 = NINE;

        endcase

        reg [1:0] sm_sel_r;

        reg [0:0] sm_cnt;

        always @(posedge clk_ref)

        sm_cnt = sm_cnt + 1‘b1;

        always @(sm_cnt)

        case(sm_cnt)

        ’d0:

        begin

        sm_sel_r = 2‘b01;

        sm_dat_r = sm_dat_r1;

        end

        ’d1:

        begin

        sm_sel_r = 2‘b10;

        sm_dat_r = sm_dat_r2;

        end

        default:

        begin

        sm_sel_r= 2’b11;

        sm_dat_r = ZERO;

        end

        endcase

        ```

        7. 最終結果

        下圖為實測的溫度結果,比實際溫度高出2-3度。由于芯片出廠的誤差(沒有對0校準),加上板卡本身的散熱,使得溫度偏高2~3度。但不影響我們學習使用。



        上一頁 1 2 下一頁

        關鍵詞: 溫度計 cpld

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 徐水县| 福建省| 青浦区| 苏州市| 邓州市| 略阳县| 花莲市| 出国| 临海市| 威宁| 沁阳市| 尼玛县| 门源| 馆陶县| 满洲里市| 木兰县| 新丰县| 凯里市| 潼关县| 道孚县| 平乐县| 桐柏县| 宁夏| 罗江县| 文昌市| 都昌县| 石城县| 岱山县| 祁连县| 龙陵县| 孟津县| 吴桥县| 浠水县| 磐石市| 长顺县| 吉木萨尔县| 桃园县| 伊春市| 威海市| 邛崃市| 蒙山县|