找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6137|回复: 0
收起左侧

FPGA麦克纳姆轮控制代码

[复制链接]
ID:373539 发表于 2018-7-17 18:21 | 显示全部楼层 |阅读模式
FPGA麦克纳姆轮小车控制代码
0.png

FPGA源程序如下:
  1. /********************************版权声明**************************************
  2. **                              大西瓜团队
  3. **                           
  4. **麦克纳姆轮小车控制程序已完结
  5. *******************************************************************************/
  6. module ADC_TLC549
  7. (
  8.         clk,        //系统50MHZ时钟
  9.         adc_sclk,   //AD TLC549的时钟
  10.         data,       //AD TLC549的数据口
  11.         cs,         //AD TLC549的片选择
  12.                   adc_sclk2,   //AD TLC549的时钟
  13.         data2,       //AD TLC549的数据口
  14.         cs2,         //AD TLC549的片选择
  15.                   adc_sclk3,   //AD TLC549的时钟
  16.         data3,       //AD TLC549的数据口
  17.         cs3,         //AD TLC549的片选择
  18.                   adc_sclk4,   //AD TLC549的时钟
  19.         data4,       //AD TLC549的数据口
  20.         cs4,         //AD TLC549的片选择                  
  21.                   adc_sclk6,   //AD TLC549的时钟
  22.         data_,       //AD TLC549的数据口
  23.         cs6,         //AD TLC549的片选择
  24.                   led,
  25.                   M,
  26.                   fashe,
  27.                   zhuanwan,
  28.                   chenggan_pwm,
  29.                   chenggan,
  30.                   zhuantai_pwm,
  31.                   zhuantai
  32. );

  33. input       clk;
  34. input       zhuanwan;
  35. input       data;
  36. input       data2;
  37. input       data3;
  38. input       data4;
  39. input       data_;
  40. output      cs;
  41. output      adc_sclk;
  42. output      cs2;
  43. output      adc_sclk2;
  44. output      cs3;
  45. output      adc_sclk3;
  46. output      cs4;
  47. output      adc_sclk4;
  48. output      cs6;
  49. output      adc_sclk6;
  50. output[3:0] led;
  51. output[7:0] M;
  52. output[1:0] fashe;
  53. output chenggan_pwm;
  54. output zhuantai_pwm;
  55. output[1:0] chenggan;
  56. output[1:0] zhuantai;
  57. reg[7:0] M;
  58. reg[1:0] zhuantai;
  59. reg[1:0] chenggan;
  60. reg [32:0] count1;
  61. reg [32:0] countchenggan;
  62. reg [10:0] pwm_count;
  63. reg flag;
  64. reg[3:0] pwm_flag;
  65. reg pwm_flag4;
  66. reg[16:0]   tenvalue1;
  67. reg flag_pwm;
  68. reg cs,adc_sclk,clk1k,clk1ms;
  69. reg[15:0]   coun;
  70. reg[15:0]   count;
  71. reg[15:0]   count5;
  72. reg[15:0]   count7;
  73. reg[24:0]   count1ms;
  74. reg[3:0]    cnt;
  75. reg[2:0]    number;
  76. reg[1:0]    state;
  77. reg[3:0]    wei;
  78. reg         ledcs;
  79. reg [7:0]   duan;
  80. reg[7:0]    dataout;
  81. reg[16:0]   tenvalue;
  82. reg[16:0]data5;
  83. reg[16:0]data6;
  84. reg[16:0]data7;
  85. reg[16:0]data8;
  86. reg [32:0] count12;
  87. reg [10:0] pwm_count2;
  88. reg [10:0] pwm_count4;
  89. reg flag2;
  90. reg[1:0] pwm_flag2;
  91. reg[16:0]   tenvalue12;

  92. reg cs2,adc_sclk2,clk1k2,clk1ms2;
  93. reg cs3,adc_sclk3,clk1k3,clk1ms3;
  94. reg cs4,adc_sclk4,clk1k4,clk1ms4;
  95. reg cs6,adc_sclk6,clk1k6,clk1ms6;
  96. reg[15:0]   count2;
  97. reg[15:0]   count3;
  98. reg[15:0]   count4;
  99. reg[15:0]   count6;
  100. reg[24:0]   count1ms2;
  101. reg[24:0]   count1ms3;
  102. reg[24:0]   count1ms4;
  103. reg[24:0]   count1ms6;
  104. reg[3:0]    cnt2;
  105. reg[3:0]    cnt3;
  106. reg[3:0]    cnt4;
  107. reg[3:0]    cnt6;
  108. //reg[2:0]    number;
  109. reg[1:0]    state2;
  110. reg[1:0]    state3;
  111. reg[1:0]    state4;
  112. reg[1:0]    state6;
  113. //reg[3:0]    wei;
  114. //reg         ledcs;
  115. //reg [7:0]   duan;
  116. reg[7:0]    dataout2;
  117. reg[16:0]   tenvalue2;
  118. reg[7:0]    dataout3;
  119. reg[7:0]    dataout4;
  120. reg[7:0]    dataout6;
  121. reg[16:0]   tenvalue3;
  122. reg[16:0]   tenvalue4;
  123. reg[16:0]   tenvalue5;
  124. reg[16:0]   tenvalue6;
  125. reg[16:0]   tenvalue7;
  126. parameter   sample=2'b00,
  127.             display=2'b01;
  128. parameter   sample2=2'b00,
  129.             display2=2'b01;
  130. parameter   sample3=2'b00,
  131.             display3=2'b01;                                 
  132. parameter   sample4=2'b00,
  133.             display4=2'b01;         
  134.         parameter   sample6=2'b00,
  135.             display6=2'b01;                        
  136. /*****************************************************
  137. *****************车底盘控制AD采集***********************
  138. *****************************************************/

  139. /**********产生100k的采集时钟信号*********/
  140. always@(posedge clk)
  141. begin
  142.     if(count<=250)  
  143.         count<=count+1'b1;     
  144.     else
  145.     begin  
  146.         count<=0;  
  147.         adc_sclk<=~adc_sclk;  
  148.     end
  149. end
  150. /*******产生周期为1ms即1kHz的信号*********/
  151. always@(posedge clk)
  152. begin  
  153.     if(count1ms>25'd25000)
  154.     begin
  155.         clk1ms<=~clk1ms;
  156.         count1ms<=0;
  157.     end
  158.     else
  159.         count1ms<=count1ms+1;
  160. end

  161. /*********AD采样程序**************/
  162. always@(negedge adc_sclk)
  163. begin
  164.     case(state)
  165.     sample:
  166.     begin
  167.         cs<=0;
  168.         dataout[7:0]<={dataout[6:0],data};  
  169.         if(cnt>4'd7)  
  170.         begin
  171.             cnt<=0;
  172.             state<=display;   
  173.         end   
  174.         else
  175.         begin
  176.             cnt<=cnt+1;
  177.             state<=sample;
  178.         end
  179.     end
  180.     display:
  181.     begin
  182.         cs<=1;//关AD片选  
  183.         tenvalue<=(tendata((dataout>>4)&8'b0000_1111)*16+ tendata(dataout&8'b0000_1111))*129;//
  184.         //得到采集的数据
  185.         state<=sample;
  186.     end
  187.     default: state<=display;
  188.     endcase
  189. end

  190. /***********2进制转十进制函数*************/
  191. function[7:0] tendata;//返回一个4位的数字
  192. input[7:0]   datain;
  193. begin
  194.     case(datain)
  195.     4'b00000000: tendata=4'd0;//0
  196.     4'b00000001: tendata=4'd1;//1
  197.     4'b00000010: tendata=4'd2;//2
  198.     4'b00000011: tendata=4'd3;//3
  199.     4'b00000100: tendata=4'd4;//4
  200.     4'b00000101: tendata=4'd5;//5
  201.     4'b00000110: tendata=4'd6;//6
  202.     4'b00000111: tendata=4'd7;//7
  203.     4'b00001000: tendata=4'd8;//8
  204.     4'b00001001: tendata=4'd9;//9
  205.     4'b00001010: tendata=4'd10;//
  206.     4'b00001011: tendata=4'd11;//
  207.     4'b00001100: tendata=4'd12;
  208.     4'b00001101: tendata=4'd13;
  209.     4'b00001110: tendata=4'd14;
  210.     4'b00001111: tendata=4'd15;
  211.     default:tendata=4'bzzzz_zzzz;
  212. endcase
  213. end
  214. endfunction

  215. /*********十进制转LED段选函数*********/
  216. /*function[7:0] leddata;//返回一个8位的数字
  217. input[3:0]    datain;
  218. begin
  219. case(datain)
  220.     4'd0: leddata=8'b11000000;//0
  221.     4'd1: leddata=8'b11111001;//1
  222.     4'd2: leddata=8'b10100100;//2
  223.     4'd3: leddata=8'b10110000;//3
  224.     4'd4: leddata=8'b10011001;//4
  225.     4'd5: leddata=8'b10010010;//5
  226.     4'd6: leddata=8'b10000010;//6
  227.     4'd7: leddata=8'b11111000;//7
  228.     4'd8: leddata=8'b10000000;//8
  229.     4'd9: leddata=8'b10010000;//9
  230.     4'd10: leddata=8'b10111111;//-
  231.     4'd11: leddata=8'b01111111;//.
  232.     default:leddata=8'bzzzz_zzzz;
  233. endcase
  234. end
  235. endfunction

  236. /********数码管扫描函数*************/
  237. /**********产生100k的采集时钟信号*********/
  238. always@(posedge clk)
  239. begin
  240.     if(count2<=250)  
  241.         count2<=count2+1'b1;     
  242.     else
  243.     begin  
  244.         count2<=0;  
  245.         adc_sclk2<=~adc_sclk2;  
  246.     end
  247. end
  248. /*******产生周期为1ms即1kHz的信号*********/
  249. always@(posedge clk)
  250. begin  
  251.     if(count1ms2>25'd25000)
  252.     begin
  253.         clk1ms2<=~clk1ms2;
  254.         count1ms2<=0;
  255.     end
  256.     else
  257.         count1ms2<=count1ms2+1;
  258. end

  259. /*********AD采样程序**************/
  260. always@(negedge adc_sclk2)
  261. begin
  262.     case(state2)
  263.     sample2:
  264.     begin
  265.         cs2<=0;
  266.         dataout2[7:0]<={dataout2[6:0],data2};  
  267.         if(cnt2>4'd7)  
  268.         begin
  269.             cnt2<=0;
  270.             state2<=display2;   
  271.         end   
  272.         else
  273.         begin
  274.             cnt2<=cnt2+1;
  275.             state2<=sample2;
  276.         end
  277.     end
  278.     display2:
  279.     begin
  280.         cs2<=1;//关AD片选  
  281.         tenvalue2<=(tendata2((dataout2>>4)&8'b0000_1111)*16+ tendata2(dataout2&8'b0000_1111))*129;//
  282.         //得到采集的数据
  283.         state2<=sample2;
  284.     end
  285.     default: state2<=display2;
  286.     endcase
  287. end

  288. /***********2进制转十进制函数*************/
  289. function[7:0] tendata2;//返回一个4位的数字
  290. input[7:0]   datain2;
  291. begin
  292.     case(datain2)
  293.     4'b00000000: tendata2=4'd0;//0
  294.     4'b00000001: tendata2=4'd1;//1
  295.     4'b00000010: tendata2=4'd2;//2
  296.     4'b00000011: tendata2=4'd3;//3
  297.     4'b00000100: tendata2=4'd4;//4
  298.     4'b00000101: tendata2=4'd5;//5
  299.     4'b00000110: tendata2=4'd6;//6
  300.     4'b00000111: tendata2=4'd7;//7
  301.     4'b00001000: tendata2=4'd8;//8
  302.     4'b00001001: tendata2=4'd9;//9
  303.     4'b00001010: tendata2=4'd10;//
  304.     4'b00001011: tendata2=4'd11;//
  305.     4'b00001100: tendata2=4'd12;
  306.     4'b00001101: tendata2=4'd13;
  307.     4'b00001110: tendata2=4'd14;
  308.     4'b00001111: tendata2=4'd15;
  309.     default:tendata2=4'bzzzz_zzzz;
  310. endcase
  311. end
  312. endfunction  
  313. /*always@(posedge clk1ms)
  314. begin
  315.     if(number==5)
  316.         number<=0;
  317.     else  
  318.     begin  
  319.         number<=number+1;
  320.         case(number)  
  321.         4'd0:
  322.         begin
  323.             duan<=leddata((tenvalue/10)%10);//个位
  324.             wei<=4'b1110;
  325.         end
  326.         4'd1:
  327.         begin
  328.             duan<=leddata((tenvalue/100)%10);//十位
  329.             wei<=4'b1101;
  330.         end
  331.         4'd2:
  332.         begin
  333.             duan<=leddata((tenvalue/1000)%10); //百位
  334.             wei<=4'b1011;
  335.         end
  336.         4'd3:
  337.         begin
  338.             duan<=leddata(tenvalue/10000);//千位
  339.             wei<=4'b0111;
  340.         end
  341.         4'd4:
  342.         begin
  343.             duan<=leddata(4'd11);//.   显示小数点
  344.             wei<=4'b0111;
  345.         end
  346.         endcase
  347.     end
  348. end */
  349. /*****************************************************
  350. *****************发射装置电机AD采集*********************
  351. *****************************************************/

  352. /**********产生100k的采集时钟信号*********/
  353. always@(posedge clk)
  354. begin
  355.     if(count3<=250)  
  356.         count3<=count3+1'b1;     
  357.     else
  358.     begin  
  359.         count3<=0;  
  360.         adc_sclk3<=~adc_sclk3;  
  361.     end
  362. end
  363. /*******产生周期为1ms即1kHz的信号*********/
  364. always@(posedge clk)
  365. begin  
  366.     if(count1ms3>25'd25000)
  367.     begin
  368.         clk1ms3<=~clk1ms3;
  369.         count1ms3<=0;
  370.     end
  371.     else
  372.         count1ms3<=count1ms3+1;
  373. end

  374. /*********AD采样程序**************/
  375. always@(negedge adc_sclk3)
  376. begin
  377.     case(state3)
  378.     sample3:
  379.     begin
  380.         cs3<=0;
  381.         dataout3[7:0]<={dataout3[6:0],data3};  
  382.         if(cnt3>4'd7)  
  383.         begin
  384.             cnt3<=0;
  385.             state3<=display3;   
  386.         end   
  387.         else
  388.         begin
  389.             cnt3<=cnt3+1;
  390.             state3<=sample3;
  391.         end
  392.     end
  393.     display3:
  394.     begin
  395.         cs3<=1;//关AD片选  
  396.         tenvalue3<=(tendata3((dataout3>>4)&8'b0000_1111)*16+ tendata3(dataout3&8'b0000_1111))*129;//
  397.         //得到采集的数据
  398.         state3<=sample3;
  399.     end
  400.     default: state3<=display3;
  401.     endcase
  402. end
  403. /***********2进制转十进制函数*************/
  404. function[7:0] tendata3;//返回一个4位的数字
  405. input[7:0]   datain3;
  406. begin
  407.     case(datain3)
  408.     4'b00000000: tendata3=4'd0;//0
  409.     4'b00000001: tendata3=4'd1;//1
  410.     4'b00000010: tendata3=4'd2;//2
  411.     4'b00000011: tendata3=4'd3;//3
  412.     4'b00000100: tendata3=4'd4;//4
  413.     4'b00000101: tendata3=4'd5;//5
  414.     4'b00000110: tendata3=4'd6;//6
  415.     4'b00000111: tendata3=4'd7;//7
  416.     4'b00001000: tendata3=4'd8;//8
  417.     4'b00001001: tendata3=4'd9;//9
  418.     4'b00001010: tendata3=4'd10;//
  419.     4'b00001011: tendata3=4'd11;//
  420.     4'b00001100: tendata3=4'd12;
  421.     4'b00001101: tendata3=4'd13;
  422.     4'b00001110: tendata3=4'd14;
  423.     4'b00001111: tendata3=4'd15;
  424.     default:tendata3=4'bzzzz_zzzz;
  425. endcase
  426. end
  427. endfunction
  428. /*****************************************************
  429. *****************撑杆控制AD采集************************
  430. *****************************************************/


  431. /**********产生100k的采集时钟信号*********/
  432. always@(posedge clk)
  433. begin
  434.     if(count5<=250)  
  435.         count5<=count5+1'b1;     
  436.     else
  437.     begin  
  438.         count5<=0;  
  439.         adc_sclk4<=~adc_sclk4;  
  440.     end
  441. end
  442. /*******产生周期为1ms即1kHz的信号*********/
  443. always@(posedge clk)
  444. begin  
  445.     if(count1ms4>25'd25000)
  446.     begin
  447.         clk1ms4<=~clk1ms4;
  448.         count1ms4<=0;
  449.     end
  450.     else
  451.         count1ms4<=count1ms4+1;
  452. end

  453. /*********AD采样程序**************/
  454. always@(negedge adc_sclk4)
  455. begin
  456.     case(state4)
  457.     sample4:
  458.     begin
  459.         cs4<=0;
  460.         dataout4[7:0]<={dataout4[6:0],data4};  
  461.         if(cnt4>4'd7)  
  462.         begin
  463.             cnt4<=0;
  464.             state4<=display4;   
  465.         end   
  466.         else
  467.         begin
  468.             cnt4<=cnt4+1;
  469.             state4<=sample4;
  470.         end
  471.     end
  472.     display4:
  473.     begin
  474.         cs4<=1;//关AD片选  
  475.         tenvalue4<=(tendata4((dataout4>>4)&8'b0000_1111)*16+ tendata4(dataout4&8'b0000_1111))*129;//
  476.         //得到采集的数据
  477.         state4<=sample4;
  478.     end
  479.     default: state4<=display4;
  480.     endcase
  481. end
  482. /***********2进制转十进制函数*************/
  483. function[7:0] tendata4;//返回一个4位的数字
  484. input[7:0]   datain4;
  485. begin
  486.     case(datain4)
  487.     4'b00000000: tendata4=4'd0;//0
  488.     4'b00000001: tendata4=4'd1;//1
  489.     4'b00000010: tendata4=4'd2;//2
  490.     4'b00000011: tendata4=4'd3;//3
  491.     4'b00000100: tendata4=4'd4;//4
  492.     4'b00000101: tendata4=4'd5;//5
  493.     4'b00000110: tendata4=4'd6;//6
  494.     4'b00000111: tendata4=4'd7;//7
  495.     4'b00001000: tendata4=4'd8;//8
  496.     4'b00001001: tendata4=4'd9;//9
  497.     4'b00001010: tendata4=4'd10;//
  498.     4'b00001011: tendata4=4'd11;//
  499.     4'b00001100: tendata4=4'd12;
  500.     4'b00001101: tendata4=4'd13;
  501.     4'b00001110: tendata4=4'd14;
  502.     4'b00001111: tendata4=4'd15;
  503.     default:tendata4=4'bzzzz_zzzz;
  504. endcase
  505. end
  506. endfunction
  507. /*****************************************************
  508. *****************转台控制AD采集************************
  509. *****************************************************/


  510. /**********产生100k的采集时钟信号*********/
  511. always@(posedge clk)
  512. begin
  513.     if(count7<=250)  
  514.         count7<=count7+1'b1;     
  515.     else
  516.     begin  
  517.         count7<=0;  
  518.         adc_sclk6<=~adc_sclk6;  
  519.     end
  520. end
  521. /*******产生周期为1ms即1kHz的信号*********/
  522. always@(posedge clk)
  523. begin  
  524.     if(count1ms6>25'd25000)
  525.     begin
  526.         clk1ms6<=~clk1ms6;
  527.         count1ms6<=0;
  528.     end
  529.     else
  530.         count1ms6<=count1ms6+1;
  531. end

  532. /*********AD采样程序**************/
  533. always@(negedge adc_sclk6)
  534. begin
  535.     case(state6)
  536.     sample6:
  537.     begin
  538.         cs6<=0;
  539.         dataout6[7:0]<={dataout6[6:0],data_};  
  540.         if(cnt6>4'd7)  
  541.         begin
  542.             cnt6<=0;
  543.             state6<=display6;   
  544.         end   
  545.         else
  546.         begin
  547.             cnt6<=cnt6+1;
  548.             state6<=sample6;
  549.         end
  550.     end
  551.     display6:
  552.     begin
  553.         cs6<=1;//关AD片选  
  554.         tenvalue6<=(tendata6((dataout6>>4)&8'b0000_1111)*16+ tendata6(dataout6&8'b0000_1111))*129;//
  555.         //得到采集的数据
  556.         state6<=sample6;
  557.     end
  558.     default: state6<=display6;
  559.     endcase
  560. end
  561. /***********2进制转十进制函数*************/
  562. function[7:0] tendata6;//返回一个4位的数字
  563. input[7:0]   datain6;
  564. begin
  565.     case(datain6)
  566.     4'b00000000: tendata6=4'd0;//0
  567.     4'b00000001: tendata6=4'd1;//1
  568.     4'b00000010: tendata6=4'd2;//2
  569.     4'b00000011: tendata6=4'd3;//3
  570.     4'b00000100: tendata6=4'd4;//4
  571.     4'b00000101: tendata6=4'd5;//5
  572.     4'b00000110: tendata6=4'd6;//6
  573.     4'b00000111: tendata6=4'd7;//7
  574.     4'b00001000: tendata6=4'd8;//8
  575.     4'b00001001: tendata6=4'd9;//9
  576.     4'b00001010: tendata6=4'd10;//
  577.     4'b00001011: tendata6=4'd11;//
  578.     4'b00001100: tendata6=4'd12;
  579.     4'b00001101: tendata6=4'd13;
  580.     4'b00001110: tendata6=4'd14;
  581.     4'b00001111: tendata6=4'd15;
  582.     default:tendata6=4'bzzzz_zzzz;
  583. endcase
  584. end
  585. endfunction
  586. ///////撑杆计算中值//////
  587. always @(posedge clk)
  588. begin
  589. if(tenvalue4>16750)
  590. begin
  591. tenvalue5=3*(tenvalue4-16750);
  592. chenggan=2'b01;
  593. end
  594. else
  595. begin
  596. tenvalue5=3*(16750-tenvalue4);
  597. chenggan=2'b10;
  598. end
  599. end
  600. ///////////////////////////////转台控制/////////////////////////////
  601. always @(posedge clk)
  602. begin
  603. if(tenvalue6>20000)
  604. begin
  605. tenvalue7=(15000*5-(tenvalue6-18000)*5);
  606. zhuantai=2'b01;
  607. end
  608. if(tenvalue6<17000)
  609. begin
  610. tenvalue7=(17900*4-(17000-tenvalue6)*5);
  611. zhuantai=2'b10;
  612. end
  613. if(20000>tenvalue6&&tenvalue6>17000)
  614. begin
  615. tenvalue7<=0;
  616. //chenggan  =2'b10;
  617. end
  618. end
  619. always@(posedge clk)
  620. begin
  621. if(tenvalue7==0)
  622. flag_pwm=1'b0;
  623. else
  624. begin
  625.     if(coun<=tenvalue7)  
  626.         coun<=coun+1'b1;     
  627.     else
  628.     begin  
  629.         coun<=0;  
  630.         flag_pwm<=~flag_pwm;  
  631.     end
  632.          end
  633. end

  634. ///////////////////////////////撑杆///////////////////////////////
  635. always @(posedge clk)
  636. begin
  637. pwm_count4<=tenvalue5 [16:5] ;
  638.         countchenggan=countchenggan+1'b1;
  639.         if (countchenggan[13:4] < pwm_count4)
  640.                 pwm_flag4=1'b1;
  641.         else
  642.                 pwm_flag4=1'b0;
  643. end
  644. //////pwm发射电机////////
  645. always @(posedge clk)
  646. begin
  647. pwm_count2<=tenvalue3[16:5] ;
  648.         count4=count4+1'b1;
  649.         if (count4[13:4] < pwm_count2)
  650.                 pwm_flag2=2'b11;
  651.         else
  652.                 pwm_flag2=2'b00;
  653. end
  654. //////////计算中值////////
  655. always @(posedge clk)
  656. begin
  657. if(tenvalue>16750)
  658. data5=3*(tenvalue-16750);
  659. else
  660. data6=3*(16750-tenvalue);
  661. if(tenvalue2>14800)
  662. data7=3*(tenvalue2-14800);
  663. else
  664. data8=3*(14800-tenvalue2);
  665. end
  666. //////////轮子控制代码///////
  667. always @(posedge clk)
  668. begin
  669. if(data5>data6&&data5>data7&&data5>data8)
  670. begin
  671. tenvalue1<=data5;
  672. M=8'b01010101;
  673. end
  674. if(data6>data5&&data6>data7&&data6>data8)
  675. begin
  676. tenvalue1<=data6;
  677. M=8'b10101010;
  678. end
  679. if(data7>data5&&data7>data6&&data7>data8)
  680. begin
  681. tenvalue1<=data7;
  682. if(zhuanwan==1)
  683. M=8'b01101001;
  684. else
  685. M=8'b10011001;
  686. end
  687. if(data8>data5&&data8>data6&&data8>data7)
  688. begin
  689. tenvalue1<=data8;
  690. if(zhuanwan==1)
  691. M=8'b10010110;
  692. else
  693. M=8'b01100110;
  694. end
  695. pwm_count<=tenvalue1[16:5] ;
  696.         count1=count1+1'b1;
  697.         if (count1[13:4] < pwm_count)
  698.                 pwm_flag=4'b1111;
  699.         else
  700.                 pwm_flag=4'b0000;

  701. end
  702. assign led=pwm_flag;  
  703. assign fashe=pwm_flag2;   
  704. assign chenggan_pwm=pwm_flag4;  
  705. assign zhuantai_pwm=flag_pwm;  
  706. endmodule
复制代码

所有资料51hei提供下载:
feipan.rar (523.47 KB, 下载次数: 16)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表