3193|0

275

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

(cyclone4)助学版_v120之数码管二[PWM可调显示0到100%] [复制链接]

(cyclone4)助学版_v120之数码管二:
操作系统:64位 Wins7编译软件:Quartus II 12.1

系统版:助学板V120

code 如下:

module seg(
                input clk,
                input[1:0] key,
                output reg[7:0] segment,
                output reg[2:0] wei,
                output reg PWM
        );


reg clk_key;
reg[14:0] segment_scancnt;
reg[22:0] key_count;//2^23=8_388_608
reg[6:0] dis;//2^7=128
reg[12:0] key_cnt = 2400,cnt;//2^13=8192
parameter  PWM_cnt = 4800;//10kHz
parameter div_key = 5_280_000;//--->T=220ms


always @(posedge clk)//按键消抖时钟
begin
        if(key_count == div_key)
        begin
                key_count <= 0;
                clk_key <= ~clk_key;
        end
        else
                key_count <= key_count + 1'b1;
end


always @(posedge clk_key)//按键+/-
begin
        if(key == 2'b01)
        begin
                key_cnt = key_cnt + 6'd48;//百分之一可调
        end
        
        if(key == 2'b10)
        begin
                key_cnt = key_cnt - 6'd48;//百分之一可调
        end
        
        if(key_cnt > PWM_cnt)
        begin
                key_cnt = 0;
        end        
        if(key_cnt == 13'd8192)
        begin
                key_cnt = PWM_cnt;
        end
end


always @(posedge clk)//分频10kHz-PWM波
begin        
        if(cnt >= PWM_cnt)
        begin
                cnt = 0;
        end
        
        if(cnt < key_cnt)
                begin
                        PWM = 1;
                end
        else
                PWM = 0;
                                
        cnt = cnt + 1'b1;
end


always @(posedge clk)
begin        
        segment_scancnt <= segment_scancnt + 1'b1;
end


always @(segment_scancnt)//位选扫描
begin        
        case(segment_scancnt[14:13])
        2'b00:
                wei <= 3'b011;        
        2'b01:
                wei <= 3'b101;        
        2'b10:
                wei <= 3'b110;        
        default:wei <= 3'b111;        
        endcase
end


always @(wei)//段选
begin        
        case(wei)
        3'b011:        
                segment <= display(key_cnt/48/100);
        3'b101:        
                segment <= display(key_cnt/48%100/10);
        3'b1110:
                segment <= display(key_cnt/48%10);
        default:segment <= display(key_cnt%10);
        endcase
end


function[7:0] display;//其中不能包含非阻塞赋值
input[3:0] number;
         case(number)
                4'b0000:display = 8'b00111111;
                4'b0001:display = 8'b00000110;
                4'b0010:display = 8'b01011011;
                4'b0011:display = 8'b01001111;
                4'b0100:display = 8'b01100110;
                4'b0101:display = 8'b01101101;
                4'b0110:display = 8'b01111101;
                4'b0111:display = 8'b00000111;
                4'b1000:display = 8'b01111111;
                4'b1001:display = 8'b01101111;               
                default:display = 8'b00000000;//共阴极数码显示
        endcase
endfunction


endmodule         


10kHz  占空比56%


10kHz  占空比96%


板子显示
此帖出自FPGA/CPLD论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表