10.18~10.22数电第二次实验

news2024/11/17 10:05:51

频分复用

同一个时间共用一个频道,只不过频率不同,所以互不影响

时分复用

不同时间公用一个频道,轮流使用

时分复用(TDM,Time-division multiplexing)就是将提供给整个信道传输信息的时间划分成若干时间片 (简称时隙),并将这些时隙分配给每一个信号源使用,保证资源的利用率。

码分复用

同一时间同一频道,共同使用,但是使用的编码不同,故互不影响

动态显示

就是这一段时间内,要显示0123这个数字,首先是要保证这4个数字不会变动与更新,即处于Refresh period的时间内,然后在这一时间内要保证可以分别显示出这4个数字,即Digit period,为这一段时间内分别亮这4个灯

需要保证不会超过人眼的分辨频率

`timescale 1ns / 1ps

module all_divider(
    input clk_i,
    output reg clk_o
    );
    reg [16:0] cnt=0;
    always@(posedge clk_i) begin
    if(cnt == 99999)
        cnt <= 'b000;
    else 
        cnt <= cnt + 1'b1;
    
    if(cnt <= 49999)
        clk_o <= 1'b1;
    else 
        clk_o <= 1'b0;
    end
endmodule

这个模块的就是把原始始终信号clk转变为

clk只会翻转就是高频率的0_1变换

每次从0到1意味着上一个周期的结束与新一个周期的开始

内部时钟周期为100MHZ

cnt记录的是clk的周期数量,cnt只记录到99999,即1e5次周期

`timescale 1ns / 1ps

module all_counter(
    input [7:0]out0,
    input [7:0]out1,
    input [7:0]out2,
    input [7:0]out3,
    input [7:0]out4,
    input [7:0]out5,
    input [7:0]out6,
    input [7:0]out7,
    input clk_i,
    output reg [7:0]left,
    output reg [7:0]right,
    output reg [3:0]dn0,
    output reg [3:0]dn1
    );
    wire clk_o;						//分频后的时钟信号
    reg  [1:0]count=2'b00;    			//计数器,控制使能端(相当于一个24译码器)

    //分频模块的调用
    all_divider div(clk_i,clk_o);

    always @(posedge clk_o) begin
    if(count == 3)					//到3记得将计数器清零即可
        begin
            count = 2'b00;
            left <= out3;
            right<= out7;
            dn0<=4'b0001;
            dn1<=4'b0001; 
        end
    else 
        begin
            case(count)				//case语句正常判断使能端的内容
                2'b00:
                begin 
                    left<=out0;
                    right<=out4;
                    dn0<=4'b1000;
                    dn1<=4'b1000; 
                end
                2'b01:
                begin 
                    left<=out1;
                    right<=out5;
                    dn0<=4'b0100;
                    dn1<=4'b0100;  
                end
                2'b10:
                begin 
                    left<=out2;
                    right<=out6;
                    dn0<=4'b0010;
                    dn1<=4'b0010;  
                end
            endcase
            count = count + 1'b1;
        end
    end
    
endmodule

计数器,控制使能端,相当于一个二四译码器,就是控制四个灯哪个灯亮

上面的分频是把信号控制在人眼检测不到的程度,下面计数器也是一个分频,每4个分频后的小周期组成一个大周期,这个大周期就是每组数的持续时间,就是要保证每组数在这个大周期内不发生变化,才能保证在这个大周期里的四个四分之一小周期才可以完整显示出这组数

计时器
还是需要进行分频,并且我们需要有复位端。
输入:时钟信号和复位使能端
输出:两个八位二进制数(控制前两个的) 

这里的divider是要把系统时钟周期转变为1HZ的,就是一秒一周期,这样才可以计时

而之前的all_divider是把系统时钟周期转变为小周期,并非计时用

`timescale 1ns / 1ps
module counter(
    input clk_i,
    input s,
    output reg [7:0]out0,
    output reg [7:0]out1
);  
    wire clk;
    reg [3:0]middle=4'b1010;//计数器,从10开始
    divider div(clk_i,clk);
    always @(posedge s or posedge clk) begin
        if(s)							//复位使能端有效
        begin
            middle = 10;
            out0 = 8'b0110_0000;			//1
            out1 = 8'b1111_1100;			//0
        end
        else if(middle==0)					//到0了,重新开始计数
        begin
            middle = 10;
            out0 = 8'b0110_0000;
            out1 = 8'b1111_1100;
        end
        else
        begin
            middle = middle - 1'b1;
            out0 = 8'b1111_1100;			//高位为0
            case(middle)
                4'b0000:out1 = 8'b1111_1100;	//按照计数器内容控制
                4'b0001:out1 = 8'b0110_0000;
                4'b0010:out1 = 8'b1101_1010;
                4'b0011:out1 = 8'b1111_0010;
                4'b0100:out1 = 8'b0110_0110;
                4'b0101:out1 = 8'b1011_0110;
                4'b0110:out1 = 8'b1011_1110;
                4'b0111:out1 = 8'b1110_0000;
                4'b1000:out1 = 8'b1111_1110;
                4'b1001:out1 = 8'b1111_0110;
                4'b1010:out1 = 8'b1111_1100;
            endcase
        end
        
    end    
endmodule

这里计时器的实现就是把1Hz的时钟信号通过中间量middle连接起来,当时钟上升沿来临时,mid改变一次,然后mid的改变使数码管接收到的信号发生改变, 

 (这里的代码有一点不怎么规范,应该都采用非阻塞赋值的,但是因为使能端需要立即改变,而如果是非阻塞则需要等到下一个always块,会相对慢一个周期)

之所以输出8位的二进制数,是因为采用的是七段数码管+一个点,所以一共八位

然后又由于有8个数码管,所以一共有0~7个output,这里采用的是把8个分为两组,即左右两组开始展示,而不是8个合在一起依次展示,不然时间周期太大 

控制四位拨码开关
这个比较简单,就是一个4-16译码器,直接上代码:

`timescale 1ns / 1ps

module four(
    input [3:0] in,
    output reg [7:0] out
    );
    
    always@(*) begin
        case(in)
            4'b0000:out=8'b1111_1100;
            4'b0001:out=8'b0110_0000;
            4'b0010:out=8'b1101_1010;
            4'b0011:out=8'b1111_0010;
            
            4'b0100:out=8'b0110_0110;
            4'b0101:out=8'b1011_0110;
            4'b0110:out=8'b1011_1110;
            4'b0111:out=8'b1110_0000;
            
            4'b1000:out=8'b1111_1110;
            4'b1001:out=8'b1111_0110;
            4'b1010:out=8'b1110_1110;
            4'b1011:out=8'b0011_1110;
            
            4'b1100:out=8'b0001_1010;
            4'b1101:out=8'b0111_1010;
            4'b1110:out=8'b1001_1110;
            4'b1111:out=8'b1000_1110;
        endcase        
    end
endmodule

然后使用一个顶层模块串起来就行了:

`timescale 1ns / 1ps


module hexseg8(
    input s,
    input [3:0]sw1,
    input [3:0]sw2,
    input clk_i,
    output wire [7:0]left,
    output wire [7:0]right,
    output wire [3:0]dn0,
    output wire [3:0]dn1
    );
    wire [7:0]out0;
    wire [7:0]out1;
    wire [7:0]out2;
    wire [7:0]out3;//前4个是变化的时间
    wire [7:0]out4=8'b;	//班级
    wire [7:0]out5=8'b;	//班级(记得加小数点
    wire [7:0]out6=8'b;	//学号
    wire [7:0]out7=8'b;
    
    wire [15:0]temp=0;
    
    //四位拨码开关
    four four1(sw1,out3);
    four four2(sw2,out2);
    //计数器
    counter counter1(clk_i,s,out0,out1);
	//数码管显示分频模块
    all_counter counter2(out0,out1,out2,out3,out4,out5,out6,out7,clk_i,left,right,dn0,dn1);

endmodule

整体的思路应该是,系统时钟信号导进来,然后经过分频器处理为1HZ时钟信号,接着再经过时钟处理模板,转化为显示的信号,再到显示模板,进行显示 

即一共需要三个模板

第一个模板是分频器,输入是系统时钟,输出是1HZ时钟

第二个模板是时钟信号处理模板,不断输入1HZ时钟信号,表示计时,不断输出显示的信号

具体来说就是1个输入,然后输出6个8位的信号,一二位是秒信号,三四位为分钟信号,五六位为小时信号(八位是因为有小数点,就是最右位,由于没有用,所以一直是0)

第三个模板是显示模板,显示是要分时复用,输入是6个8位的信号

数码管不能同时亮是因为4个数码管是串接在一起的,如果同时亮,那么产生的控制信号同时控制4个数码管,即四个数码管显示的是同一个内容,所以需要控制每次只亮一个,4个里只亮1个,亮的就是控制它亮的部分。

而LED是并连在一起的,也就是说,LED各自有控制信号,所以不会互相影响,可以同时亮,而数码管不可以

而且显示要求,4个数码管量,8个Led灯(4个为一组显示小时信号)

就是说,需要输出1个四位的信号(表示数码管上的使能信号,决定此时是哪个数码管在亮),1个八位的信号(表示那个亮的数码管显示什么内容的信号),1个八位的信号(表示LED亮的信号,是表示小时的信号)

LED不需要使能信号是因为LED可以同时亮,直接把8位的信号对应到下面的LED上即可

首先是要有一个计数器,周期为1HZ,有4个数码管,就表示分和秒

然后小时就表示在led灯上,十六进制就是说,每4个led组成一组来表示小时,4个一组可以表示到16个小时

所以8个led可以表示32个小时

 ?怎么实现秒到分,分到时?

思路应该是确定三组信号,一组表示秒,一组表示分,一组表示小时

表示秒的信号到60时,让分的信号+1,

表示分的信号到60时,让小时的信号+1

小时的信号是

这个时间就是拆出5位,第一位是10进制,如果第一位到了10,第二位加一,第二位到了6,归零,第三位加一,第三位到了10,第四位加一,第四位到了六,第五位加一,第五位就不再进位

然后数码管要接收的显示信号,就直接读取前四位的结果进行转化

进位应该是再加的时候,如果到9了,就置为0,往高位进一,

produce_clk用来产生实际的时钟信号,并把时钟信号转化为数码管所需要的信号,即输出Output

是在顶层文件里调用

presentation_Hz是分系统时钟频率为显示频率,不在顶层文件中调用,在数码管显示文件里调用

hz1clk是分频为实际频率,在produce_clk里调用

只产生信号还不够,还需要分时复用地去显示信号,就是all_counter文件调用,

all_counter接收produce_clk产生的信号,分时复用地显示信号,在顶层文件里调用

produce_clk的信号改变周期是1HZ,all_counter的刷新频率为显示频率的四倍,远远高于信号更新频率

这里输入有两个信号,输出有3个信号,需要分配2(输入,一个开关,一个时钟信号)+8(数码管引脚)+4(数码管编号)+8(8个LED)=22个引脚 

module display_7seg( 
 input CLK, 
 input SW_in, 
 output reg[10:0] display_out 
 );
 reg [19:0]count=0; 
 reg [2:0] sel=0; 
 parameter T1MS=50000; 
 always@(posedge CLK) 
 begin 
 if(SW_in==0) 
 begin 
 case(sel) 
 0:display_out<=11'b0111_1001111; 
 1:display_out<=11'b1011_0010010; 
 2:display_out<=11'b1101_0000110; 
 3:display_out<=11'b1110_1001100; 
 default:display_out<=11'b1111_1111111; 
 endcase 
 end 
 else 
 begin 
 case(sel) 
 0:display_out<=11'b1110_1001111; 
 1:display_out<=11'b1101_0010010; 
 2:display_out<=11'b1011_0000110; 
 3:display_out<=11'b0111_1001100; 
 default:display_out<=11'b1111_1111111; 
 endcase 
 end 
 end 
 always@(posedge CLK) 
 begin 
 count<=count+1; 
 if(count==T1MS) 
 begin 
 count<=0; 
 sel<=sel+1; 
 if(sel==4) 
 sel<=0; 
 end 
 end 
endmodule

这里要CLK,sw_in,display_out0~10的信号,就是顶层文件所涉及到的信号(输入输出),

中间的辅助信号是不需要的,比如count,sel之类的,只是输入和输出 

自左到右为a~g,就是presentation[0]为g

set_property PACKAGE_PIN[get_ports]
set_property IOSTANDARD LCVMOSS[get_ports ]
set_property PACKAGE_PIN W5 [get_ports CLK] 
set_property PACKAGE_PIN V17 [get_ports SW_in] 
set_property IOSTANDARD LVCMOS33 [get_ports SW_in] 
set_property IOSTANDARD LVCMOS33 [get_ports CLK] 
set_property PACKAGE_PIN W4 [get_ports {display_out[10]}] 
set_property PACKAGE_PIN V4 [get_ports {display_out[9]}] 
set_property PACKAGE_PIN U4 [get_ports {display_out[8]}] 
set_property PACKAGE_PIN U2 [get_ports {display_out[7]}] 
set_property PACKAGE_PIN W7 [get_ports {display_out[6]}] 
set_property PACKAGE_PIN W6 [get_ports {display_out[5]}] 
set_property PACKAGE_PIN U8 [get_ports {display_out[4]}] 
set_property PACKAGE_PIN V8 [get_ports {display_out[3]}] 
set_property PACKAGE_PIN U5 [get_ports {display_out[2]}] 
set_property PACKAGE_PIN V5 [get_ports {display_out[1]}] 
set_property PACKAGE_PIN U7 [get_ports {display_out[0]}] 
set_property IOSTANDARD LVCMOS33 [get_ports {display_out[9]}] 
set_property IOSTANDARD LVCMOS33 [get_ports {display_out[8]}] 
set_property IOSTANDARD LVCMOS33 [get_ports {display_out[7]}] 
set_property IOSTANDARD LVCMOS33 [get_ports {display_out[6]}] 
set_property IOSTANDARD LVCMOS33 [get_ports {display_out[5]}] 
set_property IOSTANDARD LVCMOS33 [get_ports {display_out[4]}] 
set_property IOSTANDARD LVCMOS33 [get_ports {display_out[3]}] 
set_property IOSTANDARD LVCMOS33 [get_ports {display_out[1]}] 
set_property IOSTANDARD LVCMOS33 [get_ports {display_out[2]}] 
set_property IOSTANDARD LVCMOS33 [get_ports {display_out[0]}] 
set_property IOSTANDARD LVCMOS33 [get_ports {display_out[10]}] 

set_property -dict{PACKAGE_PIN R2  IOSTANDARD LVCMOS33}[get_ports s]
set_property -dict{PACKAGE_PIN W5 IOSTANDARD LVCMOS33}[get_ports clk_i]
set_property -dict{PACKAGE_PIN U7  IOSTANDARD LVCMOS33}[get_ports{presentation[0]}]
set_property -dict{PACKAGE_PIN V5 IOSTANDARD LVCMOS33}[get_ports{presentation[1]}]
set_property -dict{PACKAGE_PIN U5  IOSTANDARD LVCMOS33}[get_ports{presentation[2]}]
set_property -dict{PACKAGE_PIN V8 IOSTANDARD LVCMOS33}[get_ports{presentation[3]}]
set_property -dict{PACKAGE_PIN U8  IOSTANDARD LVCMOS33}[get_ports{presentation[4]}]
set_property -dict{PACKAGE_PIN W6 IOSTANDARD LVCMOS33}[get_ports{presentation[5]}]
set_property -dict{PACKAGE_PIN W7  IOSTANDARD LVCMOS33}[get_ports{presentation[6]}]
set_property -dict{PACKAGE_PIN U2  IOSTANDARD LVCMOS33}[get_ports{dn0[0]}]
set_property -dict{PACKAGE_PIN U4 IOSTANDARD LVCMOS33}[get_ports{dn0[1]}]
set_property -dict{PACKAGE_PIN V4  IOSTANDARD LVCMOS33}[get_ports{dn0[2]}]
set_property -dict{PACKAGE_PIN W4 IOSTANDARD LVCMOS33}[get_ports{dn0[3]}]
set_property -dict{PACKAGE_PIN V13  IOSTANDARD LVCMOS33}[get_ports{hour[0]}]
set_property -dict{PACKAGE_PIN V3 IOSTANDARD LVCMOS33}[get_ports{hour[1]}]
set_property -dict{PACKAGE_PIN W3  IOSTANDARD LVCMOS33}[get_ports{hour[2]}]
set_property -dict{PACKAGE_PIN U3 IOSTANDARD LVCMOS33}[get_ports{hour[3]}]
set_property -dict{PACKAGE_PIN P3  IOSTANDARD LVCMOS33}[get_ports{hour[4]}]
set_property -dict{PACKAGE_PIN N3 IOSTANDARD LVCMOS33}[get_ports{hour[5]}]
set_property -dict{PACKAGE_PIN P1  IOSTANDARD LVCMOS33}[get_ports{hour[6]}]
set_property -dict{PACKAGE_PIN L1 IOSTANDARD LVCMOS33}[get_ports{hour[7]}]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1121372.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用反射拼接SQL语句 和 使用 反射 + 注解 拼接SQL语句

以下知识本人都是用 Maven工程 总结的 1、使用反射拼接SQL语句 package com.csdn.anno; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; import java.util.Properties; public class AnnotationTest {public static void main(Str…

散列表:为什么散列表和链表经常会一起使用?

文章来源于极客时间前google工程师−王争专栏。 链表那一节&#xff0c;我们用链表来实现LRU缓存淘汰算法&#xff0c;但是链表实现的LRU时间复杂度是O(n)&#xff0c;可以通过散列表将时间复杂度降低为O(1) 跳表那一节&#xff0c;Redis的有序集合是使用跳表来实现的&#xf…

阿伐曲泊帕的合并用药方案【医游记】

&#xff08;图片来源于网络&#xff01;&#xff09; 阿伐曲泊帕是一种口服的促血小板生成素受体激动剂&#xff0c;用于治疗择期行诊断性操作或手术的慢性肝病相关血小板减少症的成年患者。本文将介绍阿伐曲泊帕的药理作用和药物相互作用。 药理作用 阿伐曲泊帕可以与人体…

H3C SecParh堡垒机 get_detail_view.php 任意用户登录漏洞

与齐治堡垒机出现的漏洞不能说毫不相关&#xff0c;只能说一模一样 POC验证的url为&#xff1a; /audit/gui_detail_view.php?token1&id%5C&uid%2Cchr(97))%20or%201:%20print%20chr(121)%2bchr(101)%2bchr(115)%0d%0a%23&loginadmin成功获取admin权限 文笔生疏…

C语言笔试面试必刷题

&#x1f38a;【面经】专题正在持续更新中&#xff0c;内含C语言&#xff0c;数据结构&#xff0c;Linux&#xff0c;网络编程等✨&#xff0c;欢迎大家前往订阅本专题&#xff0c;获取更多详细信息哦&#x1f38f;&#x1f38f;&#x1f38f; &#x1fa94;本系列专栏 - ​​…

【LSTM-Attention】基于长短期记忆网络融合注意力机制的多变量时间序列预测研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

URV5使用指南

1. 下载软件 搜索这个地址下载软件 https://github.com/Anjok07/ultimatevocalremovergui/releases/download/v5.6/UVR_v5.6.0_setup.exe 我现在使用的是目前的最新版本5.6.0&#xff0c;后面肯定会出新版&#xff0c;但是流程大致类似。 2.安装软件 基本一直点next就可以&a…

论坛议程|COSCon'23 区块链(B)

众多开源爱好者翘首期盼的开源盛会&#xff1a;第八届中国开源年会&#xff08;COSCon23&#xff09;将于 10月28-29日在四川成都市高新区菁蓉汇举办。本次大会的主题是&#xff1a;“开源&#xff1a;川流不息、山海相映”&#xff01;各位新老朋友们&#xff0c;欢迎到成都&a…

【链表专题】

链表专题 移除链表元素设计链表反转链表 移除链表元素 移除链表元素&#xff08;Leetcode:203&#xff09; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 /*** Definition for sing…

跟着Nature Communications学作图:R语言ggplot2散点组合误差线展示响应比(Response ratio)

论文 Meta-analysis of the impacts of global change factors on soil microbial diversity and functionality https://www.nature.com/articles/s41467-020-16881-7#Sec15 论文里提供了数据和代码&#xff0c;很好的学习素材 这篇论文是公众号的一位读者留言&#xff0c;…

某验四代滑块验证码逆向分析

逆向目标 目标&#xff1a;某验四代滑块验证码&#xff0c;w 参数逆向主页&#xff1a;aHR0cHM6Ly9ndDQuZ2VldGVzdC5jb20v加密算法&#xff1a;RSA、AES 通讯流程 验证码流程分析 进入网页后&#xff0c;打开开发者人员工具进行抓包&#xff0c;点击滑动拼图验证&#xff0c…

最强英文开源模型LLaMA架构探秘,从原理到源码

导读&#xff1a; LLaMA 65B是由Meta AI&#xff08;原Facebook AI&#xff09;发布并宣布开源的真正意义上的千亿级别大语言模型&#xff0c;发布之初&#xff08;2023年2月24日&#xff09;曾引起不小的轰动。LLaMA的横空出世&#xff0c;更像是模型大战中一个搅局者。虽然它…

支付风控规则

支付宝使用基本风控规则 一、 6个规则 1、规则一&#xff1a;30分钟内&#xff0c;不要连续刷3笔&#xff08;包括失败交易&#xff09;&#xff0c;两笔交易时间间隔大于5分钟&#xff0c;交易金额不要一样&#xff0c;不要贴近限额&#xff1b; 2、规则二&#xff1a;非正…

Python数据结构(链表)

Python数据结构&#xff08;链表&#xff09; 单向链表 单向链表也叫单链表&#xff0c;是链表中最简单的一种形式&#xff0c;它的每个节点包含两个域&#xff0c;一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点&#xff0c;而最后一个节点的链接域则指向…

postgresql14-表的管理(四)

表table 创建表 CREATE TABLE table_name --表名 (column_name data_type column_constraint, --字段名、字段类型、约束字段&#xff08;可选&#xff09;column_name data_type, --表级别约束字段...,table_constraint );CREATE TABLE emp1 --创建表 AS SELECT * FROM empl…

『干货』WebStorm代码模板配置大全

『干货』WebStorm代码模板配置大全 文章目录 『干货』WebStorm代码模板配置大全一、代码模板二、前端 vue 框架2.1 选项式API2.2 组合式API2.3 组合式API TS 三、 前端 UniApp 框架3.1 选项式API3.2 组合式API3.3 组合式API TS 四、前端 React 框架4.1 类声明式4.2 函数声明式…

史上最全 2023全国大学生软件测试大赛——赛后有感

这个比赛什么成分我不好多说&#xff0c;首先说一下我的背景&#xff0c;我们学校是这个比赛的我们省赛的主办方&#xff0c;老师要求我们参加web应用测试和开发者测试&#xff0c;我都参加了&#xff0c;自认为还算是个学习成绩比较好的student&#xff0c;计算机专业前5%&…

【BP-Adaboost预测】基于BP神经网络的Adaboost的单维时间序列预测研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

详解 Diffusion (扩散) 模型

扩散模型是跨不同深度学习领域使用的生成模型。目前&#xff0c;它们主要用于图像和音频生成。最值得注意的是&#xff0c;这些模型是令人印象深刻的图像生成模型&#xff08;例如 Dalle2 和稳定扩散&#xff09;背后的驱动力。我相信您已经看过这些模型生成的闪烁图像。令人惊…

Java基础-IO流

目录 1 File 类的使用 1.1 File类的概念 1.2 构造方法 1.3 常用方法 1.4 课后练习 2 IO流原理及流的分类 2.1 IO原理 2.2 流的分类 2.3 IO流体系 2.4 接口方法 2.4.1 InputStream & Reader相同点 2.4.2 InputStream方法详解 2.4.3 Reader方法详解 2.4.4 Outp…