C语言1:/*该实验是流水灯(8个发光二极管循环点亮),功能是8个发光二极管循环以1S间隔点亮*/ include
实验内容:用汇编指令对单片机I/O口进行编程,控制8个发光二极管的流水亮灭。/ /* 程序详细功能介绍:做单一灯的左移右移,八个发光二极管L0-L7分别接在单片机的P0.0-P0.7接口上,输出“0”时,发光二极管亮,开始时
用555芯片来做,每个LED连上一个变阻器,调一下就行了 或是用单片机来做,外接12mhz晶振,延时1秒,每个灯编程循环1000*1000次就是一秒,编程你自己来
ORG H ;伪指令,指定程序从H开始存放 MAIN: MO SP, #60H ;给堆栈指针赋初值 MO P1,#0FFH ;给P1口赋值 MO DPTR,#TABLE;查表 LIGHT: MO R4,#42 ;设置循环次数 LOOP: MO A,#42 ;给A赋初
P0 = 0x00; //P0.0~P0.7分别接八个发光二极管,刚开始全灭 while(1){ delay(1000);P0 = 0xc0;//点亮前两个发光二极管P0.0和P0.1;delay(1000);//延时1秒 P0 = 0x30;//点亮第三个和第四个LED delay(
设置一个按键,功能是切换任务任务1,8个发光二极管每隔1秒依次点亮,循环显示任务2,8个led灯每隔2s依次点亮,循环显示任务三,8个led灯每隔1秒同时闪烁 设置一个按键,功能是切换任务任务1,8个发光二极管每隔1秒依次点亮,循环显示任务2,
设置一个按键,功能是切换任务 任务1,8个发光二极管每隔1秒依次点亮
有一个代码是vhdl语言编写 ,quartus II软件仿真做的,是彩灯的花样流水 要求如下:利用FPGA系统电路控制8个LED进行4种工作模式状态的循环显示,这四种工作模式状态是:(1)从左到右逐个点亮LED(2)从右到左逐个点亮LED(
把你的所有彩灯画个图出来,以方便理解
若想分别控制各个灯的亮灭一片单片不够用,最好用FPGA写一个循环控制电路。电压一般为5v。单片机用80C51可以实现24输出,即差不多每个端口控制3只灯。FPGA选用Xilinx的或Altera的都可以,不过需要配套的开发板及开发环境。
二、设计要求1、基本要求(1)用 8 个发光二极管作为彩灯显示,设计一个彩灯控制电路,能使彩灯的流向可以变化。具有彩灯亮点的右移、左移、全亮及全灭等功能。灯流动的方向可以手控也可以自控,自控往返变换时间为5秒。(
`timescale 1ns / 1ps `define IDLE 4'b0000 `define S1 4'b0001 `define S2 4'b0010 `define S3 4'b0100 `define S4 4'b1000 module LED(clk,SW,BTN_EAST,LED );parameter delay=32'hFBC520; // 33MHz
高分急求用FPGA彩灯控制电路设计!!!!!!!!越快越好!!!!
reg [7:0] led;reg [25:0] count;always @ (posedge clk ) begin if(rst || count[25]==1) begin count<=26'b0;end else count<=count+1;end always @ (posedge clk) begin if(rst)led<=8'b0000_0001
end process;这样一个格式才和verilog中的 always @ (posedge clk or posedge rst) begin if (rst) begin end else begin //your logic end end 相同。
只用了verilog,c学的不好。写的是个8位的,写的不好。。。module light(clk,clr,left,data);input left,clk,clr;output data;reg [7:0]data;always @ (posedge clk)if(clr)begin data<=0;left<=0;end else
module ledwater(clk,led,s)input clk;input[1:0]s;output[7:0]led;reg [7:0] led=0;reg [1:0] olds=0;always@(posedge clk) olds<=s;always@(posedge clk)if (olds^s)case (s)2'b00: led<=1;
reg [7:0] led;reg [24:0] count;//计数器 reg [24:0] speed;//速度 reg [3:0] state;//状态,[3]=1:正转;[3]=0:翻转;{2,0}速度 always @(posedge clk or negedge rst)//自动变频流水灯 if (!r
基于Verilog FPGA 流水灯设计
这可能是由于控制器损坏、程序错误或者传感器故障等原因造成的。解决这个问题的方法是检查控制系统的运行情况,修复或更换有问题的部件,并重新设置控制程序。总之,路灯LED灯一个亮一个直闪可能是由于电源供电不稳定、LED灯本身
1、看看程序对不对 2、看看管脚分配了没有 3、通过Assigenments->Device菜单 把unused管脚全部设置为输入高阻 4、如果是sof文件要用JTAG口烧(重新上电就没拉),如果是pof文件用AS口烧(烧完后拔了烧写线重新上电)
if(cnt>7)这个有什么用,cnt最大到7。仿真的话要赋初值,但写入器件的话就不需要了
没有看实际PCB图,不知道外部怎么接LED的,说几点怀疑,1,FPGA版本一样,检查FPGA管脚和开发板是否一致;2. 开发板和你PCB的LED是否不一样,你的LED共阳极还是共阴极的,是否分别接有下拉或者上拉电阻。不过你的灯时亮时
板子还可以,你可以看一下电路图,8X8点阵、数码管与8个 LED灯是不是通过跳冒连接的,如果是的话可以通过 插拔跳冒线断开他们之间的连接,至于两外一个灯可以不用考虑。我的板子系统正常运行有几个灯是做显示用的,不用
begin // 顺序语句,到end止 if(buffer==26'd50000000) //判别buffer中的数值为25000000时,//做输出处理 begin led<=~led; // led反转一次。buffer<=0;end else begin buffer<=buffer+1; // 计数器buffer按位
FPGA控制一个LED灯闪烁,在开发板中,程序是好使的。但是在我板子中,LED灯不闪。但单独写1亮0不亮
1) 设计能够显示时,分及用发光管闪烁指示秒功能的数字电子钟 ;2) 电子钟具有整点报时功能,并具备调整功能。题目四 、彩灯控制器要求:1)有十只LED,L0……L92)显示方式①先奇数灯依次灭②再偶数灯依次灭③再由L0到L9依次灭3)
学生实验实习报告册重庆邮电大学教务处制1.系统顶层模块设计(如:图一0)2.主要功能模块电路设计2.1分频模块这是分频模块的顶层设计图主要完成了把50MHz的时钟信号降频为1KHz、500Hz、1Hz图一1图一1这是其中100分频计数器
2.1单一信号(如控制信号)的处理 如果这个输入信号来自异步时钟域(比如FPGA芯片外部的输入),一般采用同步器进行同步。最基本的结构是两个紧密相连的触发器,第一拍将输入信号同步化,同步化后的输出可能带来建立/保持时间的冲
always@(posedge clk)begin // 顺序语句,到end止 if(buffer==26'd50000000) //判别buffer中的数值为25000000时,//做输出处理 begin led<=~led; // led反转一次。buffer<=0;end else begin buffer<=buffer+1;
1、产生一个0.5hz的时钟 2、每一1s时钟,灯亮灭一次(闪烁)以下是参考代码:// 这个是50Mhz产生0.5hz的时钟代码:reg [31:0] cnt;reg clk_led;always@(posedge clk_50M or negedge rst_n) begin
基于fpga的1hz小灯闪烁设计,应该怎么写
程序如下: 绝对没有错 LED灯的一端接P1口的各各引脚,另一端接地。同时在P1口的每个管脚上加1K的上拉电阻,电阻另一端连接至+5V即可 ORG 0000H AJMP START ORG 0030H START:MOV SP,#07H MOV P1,#00H MOV A
while(1){recy=0xfe;for(k=1;k<=8;k++){ P1=recy;Delay(50000);recy=recy<<1;} }
5'b01000:从右到左每两个LED逐渐点亮5'b00100:从左到右一个LED跳跃式点 5'b00010:从右到左一个LED跳跃式点亮 module led (input wireClock,input wireRESET_N,input wireSWITCH1,input wireSWITCH2,input wireSWI
include
(4) 不允许使用LED集成驱动模块和集成灰阶产生模块,可用CPLD或FPGA。2、方案论证2.1 显示部分:显示部分是本次设计最核心的部分,对于LED8*8点阵显示有以下两种方案:方案一:静态显示,将一帧图像中的每一个二极管的状态分别用0 和1 表示
//分频产生0.5s时钟// reg [23:0] clk2;always @(posedge clk)begin if(clk2==24'd4_000_000)begin clk2<=24'd0; led[5]<=~led[5]; led[4]<=~led[4];end else clk2<=clk2+1'd1;//分频
用FPGA 控制8个LED灯,2个一组,要4组,时间分别为1S、0.5s、0.25s、0.125s
顶一个!你可以看看Web是如何实现跑马灯的!设计思想是一样的!只是控制的东西不一样罢了!Web是JS写的,你这只是把Web JS的理念搬到C上实现本人是搞C#或Java的,C没写过所以提供个思路module leds( input button, input clk, output reg ctrl[2:0] ); reg button_dly; wire button_vld; always@(posedge clk) button_dly <= button; assign button_vld = button & ~button_dly; always@(posedge clk) if(button_vld ) case (ctrl) 3'b001:ctrl<=3'b010; 3'b010:ctrl<=3'b100; 3'b100:ctrl<=3'b001; default:ctrl<=3'b001; endcase endmodule
--试试这个吧: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY Light IS PORT (CLK,S:IN STD_LOGIC; --CLK选4Hz,或选择其他频率再通过分频产生4Hz LOUT:OUT STD_LOGIC);--LOUT为输出,用于控制灯的闪灭 END Light; ARCHITECTRRE bhv OF Light IS BEGIN LOUT<=CLK WHEN S='1' ELSE '0’; END bhv;
1HZ就是1秒一次, 用1秒时钟脉冲就可以了, 各品牌PLC1秒时钟脉冲指令各有区别, 比如欧姆龙用P_1s, 三菱用M8013等.
module ceshi2(clk,rst,led); //记得改变模块名,跟你的工程名相同 input rst,clk; output [20:0]led; //////////////////////基于verilog编写 reg[20:0]led; reg[25:0]i; always@(posedge clk or negedge rst)//50m的时钟,20ns的周期,要制造0.5s间隔 begin if(!rst) i<=25'd0; else if(i==25'd24999999) //0.5s间隔变换,记数25000000个周期 i<=25'd0; else i<=i+1'b1; end always@(posedge clk or negedge rst) //控制灯的闪烁 begin if(!rst) led<=20'b1111_1111_1111_1111_1111; else if(i==25'd24999999) led<=~led; else led<=led; end endmodule
板子还可以,你可以看一下电路图,8X8点阵、数码管与8个 LED灯是不是通过跳冒连接的,如果是的话可以通过 插拔跳冒线断开他们之间的连接,至于两外一个灯可以不用考虑。我的板子系统正常运行有几个灯是做显示用的,不用考虑
module ledwater(clk,led,s) input clk; input[1:0]s; output[7:0]led; reg [7:0] led=0; reg [1:0] olds=0; always@(posedge clk) olds<=s; always@(posedge clk) if (olds^s) case (s) 2'b00: led<=1; //*a 2'b01: led<=1; 2'b10: led<=8'b1010_1010; 2'b11: led<=8'b0000_0111; endcase else case (s) 2'b00: led<={led[6:0],led[7]};//*b 2'b01: led<={led[0], led[7:1]}; 2'b10: led<=~led; 2'b11: led<={led[6:0],led[7]}; endcaseendmodule//第一种:一个灯亮,从右往左逐个移动,并循环//第二种:一个灯亮,从左往右逐个移动,并循环//第三种:一个间一个灯亮,并交替循环//第四种:三个灯亮,从右往左逐个移动,并循环//当然可以再多一些花样://如:灯从右往左逐步点亮// *a改为: led<=1;// *b改为: led<= (&led)? 1: {led[6:0],1'b1};
module filter_led( input Clk , input Reset, output reg LED ); reg [24:0]cnt_led;///25M分频25bit;[27:0]cnt_led; always @( posedge Clk or negedge Reset ) begin if ( !Reset ) begin cnt_led <= 0; LED <= 0; end else begin if ( cnt_led >= 25'h0ffffff) LED <= 1; else LED <= 0; if ( cnt_led == 25'h1ffffff ) cnt_led <= 0; else cnt_led <= cnt_led + 25'b1; end end endmodule 这个绝对可以,验证过的
附图应该达到你所要求,NE555提供时钟脉冲,CD4017计数器顺序点亮8个LED。 第9个时钟脉冲(9脚输出="1")接到重置15脚,全部LED熄灭,下一个时钟脉冲再重新周期。 NE555输出周期大约为103ms。
1)计数脉冲经计数器转为二进制数,再经过3-8译码器输出8路信号; 2)8路信号分为两组,单数一组,双数一组,每一组用4个2输入或非门来控制门开关; 这两组门开关全部打开时,就会按1-8时序点亮;分别打开时就会按单数及双数时序点亮了; 余下的,你自己想想吧
LED点阵显示屏摘要 LED大屏幕显示系统,以AT89S52单片机为核心,由键盘显示、温度采集、串口通信、LED大屏幕显示等功能模块组成。本系统的灰阶控制功能由软件来实现,吸收了硬件软件化的思想,本系统不仅可以实现题目要求的基本功能,同时发挥部分也得到完全的实现,最主要的是LED显示屏的内容可以通过PC机进行实时修改,而且有一定的创新功能。关键字:单片机 LED大屏幕 滚屏显示 PC机控制1.任务设计并一台简易LED电子显示屏,16行*16列*16灰阶点阵显示,原理示意图如下:PC机LED灰阶电子显示屏原理框图2.要求 (1)基本要求:设计并LED电子显示屏和控制器。1) 一台简易16行*16列*16灰阶点阵显示的LED电子显示屏; 2) 显示屏控制器,扩展键盘和相应的接口实现多功能显示控制,显示屏显示16灰阶图像(可以是渐变灰阶条纹)、数字和字母亮度适中,应无闪烁。 3) 显示屏通过按键切换显示图像、数字和字母; 4) 显示屏能显示3组特定图像、数字或者英文字母组成的句子,通过按键切换显示内容; 5) 能显示2组特定汉字组成的句子,通过按键切换显示内容。(2)发挥部分:1) 一台简易16行*32列*灰阶点阵显示的LED电子显示屏;2) LED显示屏亮度连续可调。3) 实现信息的左右滚屏显示,预存信息的定时循环显示;4) 实现实时时间的显示,显示屏数字显示: 时∶分∶秒(例如 18∶38∶59);5) 增大到10组(每组汉字8个或16个数字和字符)预存信息,信息具有掉电保护; 6)实现和PC机通讯,通过PC机串口直接对显示信息进行更新(须做PC机客户程序); 7)其他发挥功能。3.说明 (1)显示格式和显示信息可以自定义。 (2)电子显示屏LED显示灯只允许使用8*8 LED点阵显示模块。 (3) 显示屏的显示控制方案和控制器的选择方案任选。 (4) 不允许使用LED集成驱动模块和集成灰阶产生模块,可用CPLD或FPGA。2、方案论证2.1 显示部分:显示部分是本次设计最核心的部分,对于LED8*8点阵显示有以下两种方案:方案一:静态显示,将一帧图像中的每一个二极管的状态分别用0 和1 表示,若为0 ,则表示L ED 无电流,即暗状态;若为1 则表示二极管被点亮。若给每一个发光二极管一个驱动电路,一幅画面输入以后,所有L ED 的状态保持到下一幅画。对于静态显示方式方式,所需的译码驱动装置很多,引线多而复杂,成本高,且可靠性也较低。方案二:动态显示,对一幅画面进行分割,对组成画面的各部分分别显示,是动态显示方式。动态显示方式方式,可以避免静态显示的问题。但设计上如果处理不当,易造成亮度低,闪烁问题。因此合理的设计既应保证驱动电路易实现,又要保证图像稳定,无闪烁。动态显示采用多路复用技术的动态扫描显示方式, 复用的程度不是无限增加的, 因为利用动态扫描显示使我们看到一幅稳定画面的实质是利用了人眼的暂留效应和发光二极管发光时间的长短, 发光的亮度等因素. 我们通过实验发现, 当扫描刷新频率(发光二极管的停闪频率) 为50Hz, 发光二极管导通时间≥1m s 时, 显示亮度较好, 无闪烁感.。鉴于上述原因, 我们采用方案二2.2.数字时钟数字时钟是本设计的重要的部分。根据需要,可利用两种方案实现。方案一:本方案完全用软件实现数字时钟。原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将时字节清零。该方案具有硬件电路简单的特点,但当单片机不上电,程序将不执行。且由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。方案二:本方案采用Dallas的专用时钟芯片DS。该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网电压不足或突然掉电等突况下仍能正常工作,芯片内部包含锂电池。当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。基于时钟芯片的上述优点,本设计采用方案二完成数字时钟的功能。2.3 温度采集部分能进行温度测量是本设计的创新部分,由于现在用品追求多样化,多功能化,所以我们决定给系统加上温度测量显示模块,方便人们的生活,使该设计具有人性化。方案一:采用热敏电阻,可满足 40 摄氏度至 90 摄氏度测量范围,但热敏电阻精度、重复性、可靠性较差,对于检测小于 1 摄氏度的是不适用的。方案二:采用温度传感器DS18B20。DS18B20可以满足从-55摄氏度到+摄氏度测量范围,且DS18B20测量精度高,增值量为0.5摄氏度,在一秒内把温度转化成数字,测得的温度值的存储在两个八位的RAM中,单片机直接从中读出数据转换成十进制就是温度,使用方便。基于DS18b20的以上优点,我们决定选取DS18b20来测量温度。2.4 显示接口芯片的选择方案一:采取并口输入,占用大量I/O口资源方案二:选取串口输入,使用较少。所以我们选用串口输入。串口输入我们可以选用芯片有74HC、74LS、TPIC6B。但是74HC和74LS两种芯片必须加驱动才能驱动LED,而TI 的DMOS 器件TPIC6B , 除具有TTL 和CMOS 器件中移位寄存器 的逻辑功能外, 其最大的特点是驱动功率大, 可直接用作LED的驱动。综合以上比较,我们选取TPIC6B来驱动LED点阵。2.5 串口通讯芯片的选择AT89S52串行口采用的是TTL电平,因此必须的有电平转换电路,可以选择,,MAXA.方案一:采用或芯片实现电平转换,但在使用中发现这两种芯片可靠性不高,且需要正负12电源,使用麻烦。方案二:采用单电源电平转换芯片MAXA可以使电路变得简单,可靠。基于以上,我们选用方案二,选用芯片MAXA2.6 电源模块方案一:采用干电池作为LED点阵系统的电源,由于点阵系统耗电量较大,使用干电池需经常换电池,不符合节约型社会的要求。点阵系统要悬挂在墙上,电池总量大,使用会有较大安全隐患。方案二:采用W/5直流稳压电源作为系统电源,不仅功率上可以满足系统需要,不需要更换电源,并且比较轻便,使用更加安全可靠基于以上,我们决定采用方案二3、总体方案3.1 工作原理:利用单片机AT89S52单片机作为本系统的中控模块。单片机可把由DS18B20、DS读来的数据利用软件来进行处理,从而把数据传输到显示模块,实现温度、日历的显示。点阵LED电子显示屏显示器为主要的显示模块,把单片机传来的数据显示出来,并且可以实现滚动显示。在显示电路中,主要靠按键来实现各种显示要求的选择与切换。3.2 总体设计设计总体框图如图14、系统硬件设计(单元电路设计及)4.1 AT89S52单片机最小系统最小系统包括晶体振荡电路、复位开关和电源部分。图2为AT89S52单片机的最小系统。4.2 温度测量模块图3 DS18B20测量电路温度测量传感器采用DALLASDS18B20的单总线数字化温度传感器,测温范围为-55℃~℃,可编程为9位~12位A/D转换精度,测温分辨率达到0.℃,采用寄生电源工作方式, CPU只需一根口线便能与DS18B20通信,占用CPU口线少,可节省大量引线和逻辑电路。接口电路如图3所示。4.3 时钟模块时钟模块采用DS芯片,DS 是DALLAS 推出的涓流充电时钟芯片内含有一个实时时钟/日历和31 字节静态RAM 通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM 指示决定采用24 或12 小时格式DS 与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线1 RES 复位2 I/O 数据线3 SCLK串行时钟时钟/RAM 的读/写数据以一个字节或多达31 个字节的字符组方式通信DS 工作时功耗很低保持数据和时钟信息时功率小于1mW,其接线电路如图4图4 时钟电路4.4 键盘模块键盘、状态显示模块:为了使软件编程简单,本设计利用可编程芯片。接法如表1所示。PA口接按键,PC口则用于控制状态显示所用LED点阵。每个按键都通过一个10K的上拉电阻接电源+cc,按键的另一端接地。当有键按下时,与该键相连的PA口的相应位变为低电平,单片机检测到该变化后即转到相应的键处理程序,同时在程序中点亮LED点阵。模块电路如图54.5 LED显示模块点阵数据串行输入, 器件为 移位寄存器TPIC6B, 门控和扫描常以16 点阵为一行进行并行处理。在点阵显示中以4×8个L ED 点阵构成一个L ED 显示单元, 采用行共阳列共阴的编排方式。其驱动分为行列两部分, 分别来自于行、列移位寄存器, 行数据是扫描数据, 16 行中每次只有一行被驱动, 采用逐行扫描方式, 列数据则为汉字的点阵码。。对于字符和图形显示也可以用点阵处理, 其显示原理和方法相同.电路如图6图6 LED显示电路4.6灰阶控制4.6.1 阶灰度控制方法对于LED 发光灯, 灰度控制方法主要有驱动电流控制法和驱动脉冲占空比控制法。占空比控制法是在一定的显示重复扫描频率下, LED 器件的亮度可由发光时间Tu 与扫描周期T 的比Tu/T 进行控制。在相同的LED 正向电流作用下, Tu 越长发光能量越大, 只要周期性扫描的速度足够快的话, 人眼发觉不了1 个周期内不发光的部分, 只是感觉LED 的亮度更高。本设计采用占空比控制法。4.6.2 图像扫描方法在图像扫描显示过程中, 每次传输和显示的只是带有8 bit 灰度级的某一列数据的1 bit, 这样传输并显示8次, 就可以反映出8 bit 的灰度级。具体方法为:首先扫描显示16 行各列8 bit 灰度值的D0 比特, 其次扫描显示16行各列的D1比特, 依此类推, 直到显示16 行各列灰度值的D7 bit。各部分按顺序重复上述过程, 直到整屏扫描显示完, 对于16 行各列1 bit 的扫描细节过程为: 从第一行开始, 首先送这一行各列D0 位灰度值数据到各列移位寄存器锁存器, 然后, 送第2 行各列的D0 位数据, 同时显示第1 行数据。依次类推, 直到显示第16 行各列的D0位数据, 同时开始第1 行的D1 位数据。重复8 次扫描显示16 行。每比特扫描时间如下图2所示,整个扫描过程可以如图3所示。方案一、通过FPGA来实现灰阶控制, 是在FPGA 设计工具中利用译码器产生一系列OE 脉宽的具体电路图。E2…E10 来自计数器; H1, H2, H4, H8, H16, H32, H, H,H 为译码器译出的不同脉宽的OE 源。H1为一个时钟周期, H2 为半个时钟周期, 以此类推,H 为1/ 个时钟周期[2]。这一系列脉冲需要进入数据选择器进行分时输出, 最终输出的只有OE一条线。表1 是OE 脉冲分配表。因为H1 最宽, H1 输出时LED 最亮, 所以在这里不是将H1连续输出, 而是分散开, 其目的是提高显示屏的扫描频率, 降低频闪, 使屏幕图像看上去更加稳定。方案二、通过单片机软件扫描来实现LED不同灰阶的现实,从而达到显示图像的效果。由于缺少FPGA的工具,所以采用方案二。4.7亮度连续可调控制方案一 通过在软件中调节刷新频率。刷新频率高的时候,连续点亮的时间短,显示屏亮度低,当刷新频率调低时,连续点亮的时间延长,显示屏变亮。因此通过调节占空比来实现显示屏亮度的调整。但是由于软件调节亮度变化不连续.不能实现连续的亮度调节。并且会出现闪烁。调节的效果不明显,故不采用此方案。方案二 通过调节电位器来改变电压,实现亮度的调节。调节电位器实现线形电压调整,从而控制三极管使显示屏压降发生改变。从而达到连续调节亮度的目的。电位器的调节范围较大,因此用此方法来调节。4.8电源选择W/5的直流稳压电源更加安全,电路图如图7图7 电源电路4.9 PC机通讯4.9.1硬件连接设计MAX是标准的串口通信接口,对于一般的双向通讯,只需要使用串行输入口RXD(第3脚)、串行输出TXD(第2脚)和地线(第7脚)。MAX逻辑电平的规定如表2.图8 串口通讯4.9.2软件设计通过C++在PC机上编写一个上位机软件实现对单片机的控制,实现LED显示内容和现实方式的控制。4.10整体电路系统整体电路如下:图9 整体电路5、系统软件设计5.1主程序5.2显示子程序流程5.3 显示时间子程序流程5.4 与PC串口通讯程序5.5温度测量流程图 想了解更加详细的技术参数的话百度搜硬之城去那里了解下,好过自己在这里瞎琢磨专业的地方解决专业的问题,这个都是很现实的。
一、#include void delay(unsigned char Xms)//延时Xms { int i,j; for(X = i; X>0; X--) for(j=110;j>0;j--); } void main() { P0 = 0x00; //P0.0~P0.7分别接八个发光二极管,刚开始全灭 while(1) { delay(1000); P0 = 0xc0;//点亮前两个发光二极管P0.0和P0.1; delay(1000);//延时1秒 P0 = 0x30;//点亮第三个和第四个LED delay(1000); P0 = 0x0c; delay(1000); P0 = 0x03; } } 二、 #include #include #define uchar unsigned char #define uint unsigned int uchar temp, t0, t1; bit t2; sbit P10 = P1^0; void main() { P10 = 1; temp = 0xfe; P0 = temp; P2 = 0xff; TMOD = 0x01; TH0 = (65536 - 50000) / 256; TL0 = (65536 - 50000) % 256; ET0 = 1; EA = 1; TR0 = 1; while(1); } void timer0() interrupt 1 { TH0 = (65536 - 50000) / 256; TL0 = (65536 - 50000) % 256; t0++; if(t0 == 10) { t0 = 0; t1++; if(t1 == 8) {t1 = 0; t2 = ~t2; P10 = t2;} temp = _crol_(temp, 1); if(t2) {P0 = temp; P2 = 255;} else {P2 = temp; P0 = 255;} } } 扩展资料: 例如:a = 3,b = 5,现交换a,b的值,这个问题就好像交换两个杯子里面的水,这当然要用到第三个杯子,假如第三个杯子是c,那么正确的程序为:c = a; a = b; b = c;执行结果是a = 5,b = c = 3如果改变其顺序,写成:a = b; c = a; b =c;则执行结果就变成a = b = c = 5,不能达到预期的目的,初学者最容易犯这种错误。 顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算、输出三步曲的程序就是顺序结构,例如计算圆的面积,其程序的语句顺序就是输入圆的半径r,计算s = 3.14159*r*r,输出圆的面积s。 参考资料来源:百度百科-c语言