新聞中心

        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

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 合肥市| 桐柏县| 搜索| 鹰潭市| 合肥市| 江川县| 四平市| 深圳市| 息烽县| 岳普湖县| 积石山| 尤溪县| 宁乡县| 堆龙德庆县| 茌平县| 瓦房店市| 资源县| 韶关市| 日喀则市| 怀集县| 北安市| 玛沁县| 阳新县| 阿城市| 雅江县| 灯塔市| 稻城县| 黄骅市| 十堰市| 册亨县| 清水河县| 陕西省| 承德市| 杨浦区| 自贡市| 儋州市| 梓潼县| 洛川县| 宁南县| 水城县| 桂平市|