数码管以及流水灯
心形流水灯课程设计之流水灯制作方法(含CD4017电路)
心形流水灯课程设计之流水灯制作方法(含CD4017电路)
此作品特别适合初学者制作,其本质就是用数字芯片CD4017构成的流水灯,显示方式根据自己的喜好、创意就OK。
动手制作这样的礼物,送给ta绝对会是再好不过了。
首先,我们了解一下该作品的五脏六腑:
1. 杜邦线(若干)
2. 万能板X2
3. 电位器X2
4. 470uF电容X1
5. 二极管X4
6. 变压器X1
7. 104电容(若干)
8. LM7809芯片X1
9. 散热片X1
10. 各色LED灯(若干)
11. 100uF电容X1
12.2K电阻X1
13. 680欧电阻(若干)
14. 共阴数码管X4
15. NE555和CD4017 (各一片)
16. 芯片底座X2(有利于芯片的二次利用)
17. 木板5块加包装纸2张(尺寸大小根据自己情况而定)
所需器件如下图所示:
我把作品电路分为3个部分,这3个部分都是以我的实物为依据的,你当然可以有更好的。
按键控制数码管和流水灯设计报告实验报告要点
摘要单片机自20世纪70年代以来,以其极高的性价比,以及方便小巧受到人们极大的重视和关注。
本设计选用msp430f249芯片作为控制芯片,来实现矩阵键盘对LED数码管显示的控制。
通过单片机的内部控制实现对硬件电路的设计,从而实现对4*4矩阵键盘的检测识别。
用单片机的P3口连接4×4矩阵键盘,并以单片机的P3.0-P3.3口作键盘输入的列线,以单片机的P3.4-P3.7口作为键盘输入的行线,然后用P0.0-P0.7作输出线,通过上拉电阻在显示器上显示不同的字符“0-F”。
在硬件电路的基础上加上软件程序的控制来实现本设计。
其工作过程为:先判断是否有键按下,如果没有键按下,则继续检测整个程序,如果有键按下,则识别是哪一个键按下,最后通过LED数码管显示该按键所对应的序号。
关键字:单片机、流水灯、数码管、控制系统SCM since the nineteen seventies, with its high price, and a convenient compact attention and great concern. Thisdesign uses msp430f249 chip as the control chip, to realize the control of the LED digital tube display matrix keyboard. Through the internal control single chip to realize the hardware design of the circuit, so as to re alize the detection and recognition of 4*4 matrix keyboard. 4 * 4 matrix keyboard connected with the MCU P3 port, and the MCU P3.0 P3.3 port for a keyboard input, MCU P3.4P3.7 port as the lines of keyboard input, and then use theP0.0 P0.7 as the output line, by a pull-up resistor display different characters "0F on display". Control with software programs based on the hardware circuit to realize the design. The working process is: first to determine whether a key is pressed, if no key is pressed, it will continue to test the whole procedure, if a key is pressed, the Keywords: SCM, water lights, digital tubes, control system键盘控制流水灯和数码管实验报告目录一设计的目的 (2)二任务描述及方案设计 (3)1. 任务描述 (3)2. 方案设计 (3)三硬件设计方案 (3)1. Msp430f149单片机的功能说明 (3)2. 显示器功能 (4)3. 复位电路 (4)4. 按键的部分 (4)5. 74HC573的特点 (4)6. 流水灯和数码管电路原理图 (4)7. 元器件清单 (4)四程序设计方案 (5)1. 用IAR Embedded Workbench软件编程序 (5)2. 仿真电路图 (6)五实物实验 (7)1. 实物图 (7)2. 测试结果与分析 (7)六结论 (11)八参考文献 (16)一、设计目的1、进一步巩固和加深学生所学一门或几门相关专业课理论知识,培养学生设计、计算、绘画、计算机应用、文献查阅、报告撰写等基本技能;2、培养学生实践动手能力及独立分析和解决工程实践问题能力;3、培养学生的团队协作精神、创新意思、严肃认真的治学态度和严谨求实的工作作风。
单片机实验报告花样流水灯
电子工艺学考试作品报告作品名称:花样流水灯姓名:专业班级:电信1105学号:中南大学物理与电子学院目录第一章系统整体概述…………………………………………………………第二章硬件设计………………………………………………………………第三章软件设计………………………………………………………………第四章调试与分析……………………………………………………………第五章制作感受………………………………………………………………【摘要】当今时代的智能控制电子技术,给人们的生活带来了方便和舒适,而每到晚上五颜六色的霓虹灯则把我们的城市点缀得格外迷人,为人们生活增添了不少色彩。
制作流水灯的方法有很多种,有传统的分立元件,由数字逻辑电路构成的控制系统和单片机智能控制系统等。
本设计介绍一种简单实用的单片机花样流水灯设计与制作,采用基于单片机AT89C52和发光二极管、晶振、复位、电源等电路以及必要的软件组成的以AT89C52为核心,辅以简单的数码管等设备和必要的电路,设计了一款简易的流水灯电路板,并编写简单的程序,使其能够自动工作。
本设计用AT89C52单片机为核心自制一款简易的花样流水灯,并介绍了其软件编程仿真及电路焊接实现,在实践中体验单片机的自动控制功能。
该设计具有实际意义,可以在广告业、媒体宣传、装饰业等领域得到广泛应用。
关键字:AT89C52 单片机流水灯数码管AT89C52单片机概述AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程。
流水灯实验报告
方案二
将显示译码管的低位端A接高电平,74LS160的输出端QA悬空,QB、QC、QD分别接入B、C、D,利用74LS160自身的十进制计数,就可实现奇数序列。
图7奇数显示(1)
分析
第二种方案的显示时间是第一种方案的两倍,在进行自然数显示到奇数
列显示的时间周期就不相等了。所以选择方案一。
3.4
74hc139功能
2线—4线译码器,M74HC139/74HC139用于高性能的存贮译码或要求传输延迟时间短的数据传输系统,在高性能存贮器系统中,用这种译码器可以提高译码系统的效率。将快速赋能电路用于高速存贮器时,译码器的延迟时间和存贮器的赋能时间通常小于存贮器的典型存取时间,这就是说由系统译码器所引起的有效系统延迟可以忽略不计。HC139含有两个单独的2线—4线译码器,当赋能输入端G为高电平时,按二进制控制输入码从4个输出端中译出一个低电平输出。在解调器应用中,低电平有效的赋能输入端用作数据线。
真值表
INPUTS输入
OUTPUTS输出
SELECTED OUTPUT选定的输出
ENABLE启用
SELECT选择
Y0
Y1
Y2
Y3
G
B
A
H
X
X
H
H
H
H
NONE
L
L
L
L
H
H
H
Y0
L
L
H
L
H
H
Y1
L
H
L
H
H
L
H
Y2
L
H
H
H
H
H
L
Y3
输入信号来自74hc390当QA,QB为“0”,“0”时,这时译码器的输出端就只有Y0为0,接一个反相器然后再接产生自然序列的计数器的清零端;这样就可以实现只有自然序列输出的功能,同理当QA,QB为“0”,“1”时,这是译码器的输出端就只有Y1为0,接一个反相器然后再接产生奇数序列的计数器的清零端,这样就可以实现只有奇数序列输出的功能;当QA,QB为“1”,“0”时,这是译码器的输出端就只有Y2为0,接一个反相器然后再接产生偶数序列的计数器的清零端,这样就可以实现只有偶数序列输出的功能。
verilog实验报告流水灯数码管秒表交通灯
流水灯实验目的:在basys2开发板上实现LED灯的花样流水的显示,如隔位显示,依次向左移位显示,依次向右移位显示,两边同时靠中间显示。
实验仪器:FPGA开发板一块,计算机一台。
实验原理:当一个正向的电流通过LED时,LED就会发光。
当阳极的电压高于阴极的电压时,LED就会有电流通过。
当在LED上增添一个典型值为1.5V—2.0V之间的电压时,LED就会有电流通过并发光。
实验内容:顶层模块:输入信号:clk_50MHz(主时钟信号),rst(重置信号),输出信号:[7:0] led(LED灯控制信号)。
module led_top(clkin,rst,led_out);input clkin, rst;output [7:0] led_out;wire clk_1hz;divider_1hz d0(clkin, rst, clk_1hz);led l0(clk_1hz, rst, led_out);endmodule分频模块:module divider_1hz(clkin,rst,clkout);input clkin,rst;output reg clkout;reg [24:0] cnt;always@(posedge clkin, posedge rst)beginif(rst) begincnt<=0;clkout<=0; endelse if(cnt==24999999) begincnt<=0;clkout=!clkout; endelse cnt<=cnt+1;endendmodule亮灯信号模块:module led(clkin,rst,led_out);input clkin,rst;output [7:0] led_out;reg [2:0] state;always@(posedge clkin, posedge rst)if(rst) state<=0;else state<=state+1;always@(state)case(state)3'b000:ledout<=8'b0000_0001;3'b001:ledout<=8'b0000_0010;3'b010:ledout<=8'b0000_0100;3'b011:ledout<=8'b0000_1000;3'b100:ledout<=8'b0001_0000;3'b101:ledout<=8'b0010_0000;3'b110:ledout<=8'b0100_0000;3'b111:ledout<=8'b1000_0000;endcaseendmodule实验中存在的问题:1 芯片选择问题automotive spartan3EXA3S100E XA3S250E CPG132spartan3EXC3S100E XC3S250E CP1322 时序逻辑部分,阻塞赋值和非阻塞赋值混用always@(posedge clk)begina=b+c;d<=e+f;end3 UCF文件格式错误NET “CLK” LOC = “B8”;NET “a” LOC = “N11”;NET “b” LOC = “G13”;NET “c[0]”LOC =“K11;数码管实验目的:设计一个数码管动态扫描程序,实现在四位数码管上动态循环显示“1”、“2”“3”“4”;实验仪器:FPGA开发板一块,计算机一台。
流水灯实验报告
[文档标题]一、 实验目的1. 初步熟悉并掌握keil uVision 的基本使用方法;2. 学习51单片机的内部电路和工作原理,并在以SST89E564RD 芯片为基础的单片机上实现简单逻辑的LED 的闪烁;3. 熟悉使用C 语言编程实现单片机程序的编写;二、 实验器材1. 安装keil uVision5 的笔记本电脑1台2. 以SST89E564RD 芯片为基础的单片机1个三、 实验原理(1)LED 显示器(数码管)的结构与原理1.数码管的结构LED 显示器(数码管)系发光器件的一种。
常用的LED 发光器件有两类:数码管和点阵。
数码管内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的亮暗组合成字符。
常见数码管有10根管脚。
管脚排列如下图所示。
其中COM 为公共端,根据内部发光二极管的接线形式可分为共阴极和共阳极两种。
+5V ab fcg d e 3 COM e 1 d2 c 4 dp 5b 6a 7 8 f9 g 10 COM(a) (b) (c)使用时,共阴极数码管公共端接地,共阳极数码管公共端接电源。
每段发光二极管需5~10mA 的驱动电流才能正常发光,一般需加限流电阻控制电流的大小。
2. 数码管显示原理LED 数码管的a ~g 七个发光二极管。
加正电压的发光,加零电压的不能发光,不同亮暗的组合就能形成不同的字型,这种组合称为字型码。
管脚排列 共阴极数码管 共阳极数码管(2)keil uVision软件使用1.keil uVision简介Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
Keil 提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。
运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。
EDA流水灯,数码管显示01234567,加减计数,
练习1.两位的循环彩灯,自定义的循环彩灯2.用另外的方式实现按键控制数码管加减3.设计一个在四个数码管上,显示拨码开关给定的值。
1、设计一个流水灯。
原理图设计:(8位流水灯)程序设计:(16位流水灯)module led_s(rst,clk,leds);input rst,clk;output [15:0] leds;reg [15:0] leds;reg [3:0]count;always @(posedge clk)beginif (rst)count <=16 'h00_00;elsebeginif(count==4'hf)count <=16 'h00_00;elsecount <=count+1;endendalways @(count)begincase(count)0: leds<= 16 'b0000_0000_0000_0001;1: leds<= 16 'b0000_0000_0000_0010;2: leds<= 16 'b0000_0000_0000_0100;3: leds<= 16 'b0000_0000_0000_1000;4: leds<= 16 'b0000_0000_0001_0000;5: leds<= 16 'b0000_0000_0010_0000;6: leds<= 16 'b0000_0000_0100_0000;7: leds<= 16 'b0000_0000_1000_0000;8: leds<= 16 'b0000_0001_0000_0000;9: leds<= 16 'b0000_0010_0000_0000;10: leds<=16 'b0000_0100_0000_0000;11: leds<=16 'b0000_1000_0000_0000;12: leds<=16 'b0001_0000_0000_0000;13: leds<=16 'b0010_0000_0000_0000;14: leds<=16 'b0100_0000_0000_0000;15: leds<=16 'b1000_0000_0000_0000;default: leds<=16 'hxxxx;endcaseendendmodule2、设计一个加减计数器,计数器的值在一位数码管上显示出来。
单片机AT89C2051制作的LED流水灯电路
单片机AT89C2051制作的LED流水灯电路
一、电路图
按照下图购买元器件及面包板,在面包实验板上参考右图搭成电路。
将已经固化好最简程序的AT89C2051单片机芯片插到实验板中缝左右。
LC3911BH型LED数码管高约13mm,宽10mm,引线排列在两侧,正好能骑插在面包实验板中缝左右。
然后用细硬线按照图2将数码管与单片机Pl口连接好,并接入电阻、电容、晶振、按钮开关等。
下图中LED数码管公共阳极接了1只限流电阻。
显示0—9共10个阿拉伯数字,显示1时段数最少为2个。
设每段电流最大为5mA,则2段总电流I=2×5mA =10 mA,公共限流电阻R=(UCC-ULED)/I=(5V-2V)/10 mA =300Ω
显示8时段数最多为7个,每段电流最小为10/7=1.43mA,显得较暗。
由于LED电流大时正向压降亦大些,故显示数字在0~9之间变化时,亮度变化不是预期那样厉害。
因此,下图电路数码管每段电流在1.5~5mA之间。
公共限流电阻方案适合于业余制作。
下图中AT89C2051晶振频率为6MHz。
没有两个33p电容,由于面包板的分布电容,单片机仍然能起振并工作。
0.1μ电容功能是防高频干扰。
1μ电容、10k电阻与lk电阻组成最常用的复位电路。
AT89系列51单片机要求直流电源电压3—6V。
目前有下列电源可供选用:
●手机锂电池3.6-4.1V
●万能手机充电器4.3-5V
●新稳压电源
二、固定字符显示的程序编制
普通数字电子电路都有特定功能,如与、或、非逻辑功能。
计算机包括单片机本身没有特。
数电大作业任务流水灯
综合设计题一.流水灯1.总体思路8位流水灯始终是一亮七暗的,根据这个特点可以考虑采用74LS138译码器的输出来实现流水灯的循环电路。
同时,还可以用74LS161四位二进制计数器来控制74LS138的输入端,从而实现对灯亮灭的控制2.使用元件3—8译码器74LS138,四位二进制计数器74LS161,555定时器,七段数码管译码器驱动器4511芯片,数码管,电容,电阻,非门若干。
3.电路原理框图4.元器件在本电路中的主要功能○1555定时器555 定时器在本电路中的作用主要是产生占空比可调的矩形脉冲从而可以改变灯亮时间,而且它的振荡周期为T=0.7(R1+2R2)C。
此处C=0.1uF.由电路参数可知,当R1为10kΩ时,灯亮时间为0.0014s.它的功能主要由两个比较器决定。
两个比较器的输出电压控制RS 触发器和放电管的状态。
在电源与地之间加上电压,当5 脚悬空时,则电压比较器C1的同相输入端的电压为2VCC /3,C2的反相输入端的电压为VCC /3。
若触发输入端TR 的电压小于VCC /3,则比较器C2的输出为0,可使RS 触发器置1,使输出端OUT=1。
如果阈值输入端TH 的电压大于2VCC/3,同时TR 端的电压大于VCC /3,则C1的输出为0,C2的输出为1,可将RS 触发器置0,使输出为0 电平。
电路图如下:○274LS161计数器74LS161计数器在本电路中的作用是产生000-111脉冲控制74LS138的A2A1A0,依次选通Y0-Y7。
产生脉冲序列也可以用74LS191是四位二进制同步加/减计数器,与74LS161相比,它能够实现减计数,此处只需要求产生脉冲序列,而且74LS161是常用的计数器,所以选择74LS161产生脉冲序列。
所以采用反馈置数法,产生000-111脉冲序号,时钟脉冲外部接入,原理图如下图所示○374LS138译码器74LS138译码器在本电路中的作用主要是选通指示灯发光。
八位数码管+流水灯案例原理与测试说明
“八位数码管+流水灯”案例原理与测试说明
1程序设计目标及程序运行效果说明
本程序是动态扫描所有的数码管,从左到右8个数码管分别显示1、2、3、4、5、6、7、8。
LED灯从右到左依次亮起。
2程序相关电路及工作原理说明
2.1 LED数码管电路
2.2 LED数码管引脚定义
2.3 工作原理
P0口的8位输出分别控制8个发光二极管L0~L7的阳极;而P2.3经反相器U4C控制8个发光管阴极E3;当阳极为高(对应P0口位为1)、阴极为低时,对应的二极管将会发光。
而P2.3经反相器U4C控制74HC138的使能信号E3,结合P2.0、P2.1、P2.2这3个位选控制信号确定8个LED数码管中的哪个被点亮;电阻R15~R22为限流电阻。
当段选为高、使能信号有效时,对应的LED管将会发光。
通过以一定频率扫描位选信号,选择段选信号进行数码管点亮一段时间,从而给人视觉上几个数码管几乎同时显示的效果;同时扫描led,使led从左到右不断亮起。
3测试方法
(1)用STC ISP默认设置,打开工程中的HEX并下载
(2)下载后观察现象为:从左到右8个数码管分别显示1、2、3、4、5、6、7、8 ; led从右至左,依次亮起。
(3)本案例无需辅助操作。
流水灯
流水灯设计思路:用一片74LS163和若干门和八个灯泡。
74163是十六进制的计数器,通过门控制,1到8分别对应一个小灯泡,9到F分别对应同样的8个小灯泡,当数码管显示从1到8时,小灯泡从左到右依次点亮,从9到F时,小灯泡从右返回到左依次点亮,完成流水灯的设计。
设计过程:1.计数器的连接普通的计数器连接方式,P、T端,清零端,置数端,VCC接高电平,GND接地,Q1Q2Q3Q4接数码管,电路图如下:2.门电路完成流水灯(1)输出为1~8从左到右依次点亮的小灯泡输出二进制通过与门和每个小灯泡相连,输出为1时,则对应第一个小灯泡亮,其余不亮,输出为2时,对应的第二个小灯泡亮,其余不亮,以此类推,输出为8时,第八个灯泡亮,其余不亮。
注意到,例如当输出为1、3、7、15时,因为同时用到Q1,即都需要Q1通过一个与门与灯泡相连,这时候就会产生重复点亮的情况,即当输出为1、3、7、15时,第一个灯泡都会点亮,这时通过把重复的输出端口用一个非门连接到与门来消除重复,例如为使第一个灯泡亮,则将Q1、Q2非,Q3非,Q0通过与门与第一个灯泡相连。
输出1~8时的电路图如下所示:(2)输出为9~F时从右到左依次点亮的小灯泡此时同样有重复的问题,依然可以用一个非门来解决。
除此,因为输出为9~F时同样要表现在八个小灯泡上,不能将两个非门的输出接在一起,我们将需要同时连接到一个灯泡的与门通过增加一个异或门再和灯泡相连,例如,输出为9和7时都需要在第七个小灯泡上显示,则把连接二进制输出的与门通过一个异或门和第七个小灯泡相连接。
(3)总电路图如下所示:设计中的问题:本设计中存在一个问题,因为74LS163为十六进制计数器,但因为设计的流水灯从第一个点亮再返回第一个,共经过十五个数,即1~15,当数码管显示0时第一个灯又被点亮一次,因此,第一个灯实际上是被点亮两次,当频率大于二十赫兹时人眼就观察不出来,所以实际中流水灯频率一般在二十赫兹以上,因此此问题可被忽略,流水灯正常工作。
51单片机控制流水灯和数码管【精选】
流水灯的操作
2013.03.22
• 点亮第一个灯; • 让第一个灯闪烁; • 从第一个灯依次点亮至最后一个灯;Fra bibliotek动态显示
动态显示的特点是将所有位数码管的段选线并 联在一起,由位选线控制是哪一位数码管有效。选 亮数码管采用动态扫描显示。所谓动态扫描显示即 轮流向各位数码管送出字形码和相应的位选,利用 发光管的余辉和人眼视觉暂留作用,使人的感觉好 像各位数码管同时都在显示。动态显示的亮度比静 态显示要差一些,所以在选择限流电阻时应略小于 静态显示电路中的。
C语言中的<<和>>
• 每执行一次<<操作,被操作数高位数丢失, 低位补零;
C语言中的<<和>>
• 每执行一次<<操作,被操作数低位数丢失, 高位补零;
任务
• 第一次一个管亮流动一次,第二次两个管 亮流动,依次到8个管亮,然后重复整个过 程。
• 先奇数亮再偶数亮,循环三次;一个灯上 下循环三次;两个分别从两边往中间流动 三次;再从中间往两边流动三次;8个全部 闪烁3次;关闭发光管,程序停止。
• 用8个发光管演示出8位二进制数累加过程。
呼吸灯的操作
• 灯光在微电脑控制之下完成由亮到暗的逐 渐变化,感觉像是在呼吸。
• 实现灯不同亮度的两种方法: 1 调节灯的保护电阻, 2 使用PWM。
数码管的操作
• 数码管的介绍 • 数码管的操作
g f GNDa b a
a
b
单片机流水灯实验电路图+仿真
八、实验中的问题
1.程序编译问题
初始编程时出现语法错误,后修正
2、循环显示出现问题,循环不能持续。修改程序延时,及数码移位程序片段。
2、在进行数码显示的时候,要对显示单元开辟8个显示缓冲区,每个显示缓冲区装有显示的不同数据即可
五、C语言源程序
#include <REG51.H>
#define uint unsigned int
#define uchar unsigned char
uchar code DIS_SEG7[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};
for(cnt = 0; cnt < 8; cnt++) {//点亮数码管0-7
P2 = 0;
P0 = DIS_SEG7[DISP[cnt]];
P2 = ~DIS_BIT[cnt];
delay1ms(1);
}
ttt = DISP[0];
DISP[0] = DISP[1];
DISP[1] = DISP[2];
单片机实验
项目____拉幕式数码显示_______
学号___1204180217_____
专业__能源工程及其自动化__
班级____02____________
姓名___邵鹏程_________
一、实验目的
1,对单片机进一步了解熟悉
2,掌握数码管显示技术及编程
3,巩固理论知识及
二、实验内容
用51单片机8位控制数码管,在数码管上显示“01234567”,并能循环显示。
三、实验原理图
四、程序设计方法
1、动态数码显示技术;如何进行动态扫描,由于一次只能让一个数码管显示,因此,要显示8位的数据,必须经过让数码管一个一个轮流显示才可以,同时每个数码管显式的时间大约在1ms到4ms之间,所以为了保证正确显示,必须每隔1ms,就得刷新一个数码管。而这刷新时间我们采用单片机的定时/计数器来控制,每定时1ms对数码管刷新一次。
STC15系列-流水灯和数码管
STC15系列-流水灯和数码管#include #include \#include \#include \#define uchar unsigned char #define uint unsigned intsbit LED1 = P0^0;sbit LEDLE = P2^5; //设置U4锁存器sbit SEGLE = P2^7; //设置U6锁存器,数码管位选void LED1_Light(); void Run_LED();sbit DIGLE = P2^6; //设置U7锁存器,进行数码管的段选void delay(uint a) { uint i,j; for(i = 0;i < 999;i++) { for(j = 0;j <a;j++) { } } }void LED1_Light() {LEDLE = 1; //关闭U4锁存器,对数据透明(即输出同步),从而控制LED灯SEGLE = 0; //使能U6锁存器,关闭七段码数码管 while(1) { LED1 = 0; } }void Run_LED() { LEDLE = 1; //关闭U4锁存器,控制LED灯 SEGLE = 0;//使能U6锁存器,禁止七段码数码管显示 P0 = 0xFE; while(1) {delay(300); P0 = P0 << 1; P0 |= 0x01; if(P0 == 0xFF) P0 =0xFE; } }uchar const dig[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数字0~9的段选 uchar code seg[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //六位位选void Digital_Tube() { uint i,j; i = 0; j = 0;P0 = 0xFF; //关闭LED灯 LEDLE = 0; //使能U4锁存器,不让LED灯显示while(1) { P0 = seg[i]; SEGLE = 1; //U6锁存器失能,对数据是透明的SEGLE = 0; //U6锁存器使能,锁存住位选内容 P0 = dig[j]; DIGLE = 1; DIGLE= 0; i++; j++; if(i == 6) i = 0; if(j == 10) j = 0;delay(300); } }void main(void) {// LED1_Light(); //一个LED灯亮// Run_LED(); //流水灯 Digital_Tube(); //数码管 }感谢您的阅读,祝您生活愉快。
PIC单片机数码管流水灯代码
PIC单片机数码管(流水灯)代码#INCLUDE p16f886.inc__config _CONFIG1, _INTOSCIO & _WDT_OFF CONTEXT_SAVING UDATA_SHROFFSET RES 1RESET CODE 0x0PAGESEL INITGOTO INITCODEINITBANKSEL TRISCCLRF TRISCBANKSEL PORTCMOVLW B'11111111'MOVWF PORTCBANKSEL TRISACLRF TRISABANKSEL PORTACLRF PORTABANKSEL ANSELCLRF ANSELPAGESEL MAINGOTO MAIN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;这里是函数区;;;;;;;;;;;;;;;;; SELECT1:BANKSEL PORTCMOVLW B'11111111'MOVWF PORTCBCF PORTC,0RETURNSELECT2:BANKSEL PORTCMOVLW B'11111111'MOVWF PORTCBCF PORTC,1RETURNSELECT3:BANKSEL PORTCMOVLW B'11111111'MOVWF PORTCBCF PORTC,2RETURNSELECT4:BANKSEL PORTCMOVLW B'11111111'MOVWF PORTCBCF PORTC,3RETURNWRITE:BANKSEL PORTACLRF PORTAMOVLW LOW TABLE ;获得TABLE的低8位ADDWF OFFSET,F;TABLE值加上偏移量MOVLW HIGH TABLE;获得TABLE的高5位BTFSC STATUS,C;检测是否翻页ADDLW 1;翻页则在TABLE的高5位加一MOVWF PCLATH;将TABLE的高5位写入PCLATH MOVF OFFSET,W;将需要调用的信号的地址写入W CALL TABLE;XORWF B'00000000',WMOVWF PORTARETURNTABLE:MOVWF PCL;转到偏移的地址RETLW B'00111111';0;;;;;;;;;;;;3FRETLW B'00000110';1RETLW B'01011011';2;;;;;;;;;;;;5BRETLW B'01001111';3RETLW B'01100110';4RETLW B'01101101';5RETLW B'01111101';6RETLW B'00000111';7RETLW B'01111111';8RETLW B'01101111';9;;;;;;;;;;函数区到此为止;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MAINLOOPCALL SELECT1BANKSEL OFFSETMOVLW D'3'MOVWF OFFSETCALL WRITE ;;;;;;;;;;;;;;;;;;;;;;;;;;CALL SELECT2BANKSEL OFFSETMOVLW D'1'MOVWF OFFSETCALL WRITE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;CALL SELECT3BANKSEL OFFSETMOVLW D'1'MOVWF OFFSETCALL WRITE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;CALL SELECT4BANKSEL OFFSETMOVLW D'4'MOVWF OFFSETCALL WRITEGOTO LOOPEND ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示2003#INCLUDE p16f886.inc__config _CONFIG1, _INTOSCIO & _WDT_OFF CONTEXT_SAVING UDATA_SHRW_TMP RES 1S_TMP RES 1OFFSET RES 1NUM RES 1CNUM RES 1COFFSET RES 1LP0 RES 1LP1 RES 1RESET CODE 0x0PAGESEL INITGOTO INIT;ISR CODE 0x04;MOVWF W_TMP;SWAPF STATUS,W;MOVWF S_TMP; NOP;SWAPF S_TMP,W;MOVWF STATUS;SWAPF W_TMP,F;SWAPF W_TMP,W;RETFIECODEINITBANKSEL TRISCCLRF TRISCBANKSEL PORTCMOVLW B'11111111'MOVWF PORTCBANKSEL TRISACLRF TRISABANKSEL PORTACLRF PORTABANKSEL OFFSETCLRF OFFSETBANKSEL OSCCONMOVLW B'00000011'MOVWF OSCCON ;;;;;;;;;;;;;;;;;;;;;;振荡器设置为310KHz,内部振荡器;BANKSEL NUM;CLRF NUMBANKSEL COFFSETMOVLW D'10'MOVWF COFFSETBANKSEL CNUMMOVLW D'4'MOVWF CNUMPAGESEL MAINGOTO MAIN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;这里是函数区;;;;;;;;;;;;;;;;; SELECT:BANKSEL PORTCMOVLW LOW STABLE ;获得TABLE的低8位ADDWF NUM,F;TABLE值加上偏移量MOVLW HIGH STABLE;获得TABLE的高5位BTFSC STATUS,C;检测是否翻页ADDLW 1;翻页则在TABLE的高5位加一MOVWF PCLATH;将TABLE的高5位写入PCLATH MOVF NUM,W;将需要调用的信号的地址写入W CALL STABLE;MOVWF PORTCRETURN;ORG 0x9FDSTABLE:MOVWF PCL;转到偏移的地址RETLW B'11111110';1RETLW B'11111101';2RETLW B'11111011';3RETLW B'11110111';4WRITE:MOVLW LOW TABLE ;获得TABLE的低8位ADDWF OFFSET,F;TABLE值加上偏移量MOVLW HIGH TABLE;获得TABLE的高5位BTFSC STATUS,C;检测是否翻页ADDLW 1;翻页则在TABLE的高5位加一MOVWF PCLATH;将TABLE的高5位写入PCLATH MOVF OFFSET,W;将需要调用的信号的地址写入W CALL TABLE;MOVWF PORTARETURN;ORG 0x9FDTABLE:MOVWF PCL;转到偏移的地址RETLW B'00000110';1RETLW B'01011011';2RETLW B'01001111';3 RETLW B'01100110';4 RETLW B'01101101';5 RETLW B'01111101';6 RETLW B'00000111';7 RETLW B'01111111';8 RETLW B'01101111';9 RETLW B'00111111';0 DELAY:MOVLW 01FHMOVWF LP0L0 MOVLW 01FH MOVWF LP1L1 DECFSZ LP1,F GOTO L1DECFSZ LP0,FGOTO L0RETURN SETCNUM:MOVLW D'4'MOVWF CNUM RETURNSETCOFFSET:MOVLW D'10'MOVWF COFFSETRETURN;;;;;;;;;;函数区到此为止;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MAIN;ORG 0x80BANKSEL ANSELCLRF ANSELLOOPMOVF COFFSET,WMOVWF OFFSETMOVF CNUM,WMOVWF NUMCALL SELECTCALL WRITEDECF COFFSETBTFSC STATUS,ZCALL SETCOFFSETDECF CNUMBTFSC STATUS,ZCALL SETCNUMCALL DELAYGOTO LOOPEND ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;98765432 10单数字滚动显示#INCLUDE p16f886.inc__config _CONFIG1, _INTOSCIO & _WDT_OFF CONTEXT_SAVING UDATA_SHRW_TMP RES 1S_TMP RES 1OFFSET RES 1COFFSET RES 1NUM RES 1CNUM RES 1PA RES 1CNT RES 1LP0 RES 1LP1 RES 1ISBLACK RES 1RESET CODE 0x0PAGESEL INITGOTO INITISR CODE0x04;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;MOVWF W_TMPSWAPF STATUS,WMOVWF S_TMP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;BANKSEL INTCONBCF INTCON,2 ;;;;;;;;;;;;;清除TMR0中断标志位COMF ISBLACKBTFSS ISBLACK,0CALL DECRESE_COFFSETBTFSC ISBLACK,0CALL BLACKBANKSEL TMR0CLRF TMR0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SWAPF S_TMP,WMOVWF STATUSSWAPF W_TMP,FSWAPF W_TMP,W RETFIE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CODEINITBANKSEL TMR0CLRF TMR0BANKSEL OPTION_REGMOVLW B'00000111'MOVWF OPTION_REG ;;;;;;;;;;;;;;;;;;;;;TMR0设置为256分频BANKSEL INTCONBSF INTCON,GIEBSF INTCON,T0IE ;;;;;;;;;;;;;;;;;;;;;总中断使能,TMR0中断使能BANKSEL TRISCCLRF TRISCBANKSEL PORTCMOVLW B'11111111'MOVWF PORTCBANKSEL TRISACLRF TRISABANKSEL PORTACLRF PORTABANKSEL ANSELCLRF ANSELBANKSEL OSCCONMOVLW B'00010011'MOVWF OSCCON ;;;;;;;;;;;;;;;;;;;;;;振荡器设置为125KHz,内部振荡器BANKSEL COFFSETMOVLW D'10'MOVWF COFFSET;;;;;;;;;;;;;;;;;;;;10个数字BANKSEL CNUMMOVLW D'1'MOVWF CNUM;;;;;;;;;;;;;;;;;;;;;;;;;4个数码管MOVF COFFSET,WMOVWF PA;;;;;;;;;;;;;;;;;;;;;;;;;;;PA暂时存储COFFSETMOVLW D'4'MOVWF CNT;;;;;;;;;;;;;;;;;;;;;;;;;;计数四次CLRF ISBLACKPAGESEL MAINGOTO MAIN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;这里是函数区;;;;;;;;;;;;;;;;; SELECT:BANKSEL PORTACLRF PORTABANKSEL PORTCMOVLW B'11111111'MOVWF PORTCMOVLW LOW STABLE ;获得TABLE的低8位ADDWF NUM,F;TABLE值加上偏移量MOVLW HIGH STABLE;获得TABLE的高5位BTFSC STATUS,C;检测是否翻页ADDLW 1;翻页则在TABLE的高5位加一MOVWF PCLATH;将TABLE的高5位写入PCLATH MOVF NUM,W;将需要调用的信号的地址写入W CALL STABLE;MOVWF PORTCRETURNSTABLE:MOVWF PCL;转到偏移的地址RETLW B'11111110';1RETLW B'11111101';2RETLW B'11111011';3RETLW B'11110111';4WRITE:MOVLW LOW TABLE ;获得TABLE的低8位ADDWF OFFSET,F;TABLE值加上偏移量MOVLW HIGH TABLE;获得TABLE的高5位BTFSC STATUS,C;检测是否翻页ADDLW 1;翻页则在TABLE的高5位加一MOVWF PCLATH;将TABLE的高5位写入PCLATH MOVF OFFSET,W;将需要调用的信号的地址写入W CALL TABLE;MOVWF PORTARETURNTABLE:MOVWF PCL;转到偏移的地址RETLW B'01101111';9RETLW B'01111111';8RETLW B'00000111';7RETLW B'01111101';6RETLW B'01101101';5 RETLW B'01100110';4 RETLW B'01001111';3 RETLW B'01011011';2 RETLW B'00000110';1 RETLW B'00111111';0 SETORIGIN:MOVLW D'1'MOVWF CNUMMOVLW D'4'MOVWF CNTMOVF COFFSET,W MOVWF PARETURNSETPA:MOVLW D'10' MOVWF PARETURN SETCOFFSET: MOVLW D'10' MOVWF COFFSET RETURNDELAY:MOVLW 03FHMOVWF LP0L0 MOVLW 03FHMOVWF LP1L1 DECFSZ LP1,FGOTO L1DECFSZ LP0,FGOTO L0RETURNDECRESE_COFFSET:DECF COFFSETBTFSC STATUS,ZCALL SETCOFFSETRETURNBLACK:BANKSEL PORTACLRF PORTACALL DELAYRETURN;;;;;;;;;;函数区到此为止;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAINLOOPMOVF CNUM,WMOVWF NUM;数码管MOVF PA,WMOVWF OFFSET;图案CALL SELECT;;;;;;;;;;;;;;;;;;;;;;;;;数码管CALL WRITE;;;;;;;;;;;;;;;;;;;;;;;;;;图案DECF PABTFSC STATUS,Z;;;;;;;;;;;;;;;;;;;;;;CALL SETPA;;;;;;;;;;;;;;;;;;;;;;;;;;INCF CNUMDECF CNTBTFSC STATUS,ZCALL SETORIGINGOTO LOOPEND ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示0-9,闪烁一次#INCLUDE p16f886.inc__config _CONFIG1, _INTOSCIO & _WDT_OFF CONTEXT_SAVING UDATA_SHRW_TMP RES 1S_TMP RES 1OFFSET RES 1COFFSET RES 1NUM RES 1CNUM RES 1PA RES 1CNT RES 1RESET CODE 0x0PAGESEL INITGOTO INITISR CODE 0x04MOVWF W_TMPSWAPF STATUS,WMOVWF S_TMP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;以上保存现场PB_INTBTFSC INTCON,RBIFCALL PORTB_INTTM0_INTBTFSC INTCON,T0IFCALL TMR0_INT ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;以下恢复现场SWAPF S_TMP,WMOVWF STATUSSWAPF W_TMP,FSWAPF W_TMP,WRETFIECODEINIT ;;;;;;;;;;;;;;;;;;;;;;中断设置;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;BANKSEL INTCONBSF INTCON,GIEBSF INTCON,T0IE ;;;;;;;;;;;;;;;;;;;;;总中断使能,TMR0中断使能BSF INTCON,RBIE;;;;;;;;;;;;;;;;;;;;;;PORTB电平变化中断使能BANKSEL TMR0CLRF TMR0BANKSEL INTCONBCF INTCON,2 ;;;;;;;;;;;;;清除TMR0中断标志位BANKSEL OPTION_REGMOVLW B'00000111'MOVWF OPTION_REG ;;;;;;;;;;;;;;;;;;;;;TMR0设置为256分频BANKSEL PORTBBCF PORTB,4BANKSEL INTCONBCF INTCON,RBIF;;;;;;;;;;;;;;;;;;;;;;;;;;PORTB中断标志清除;;;;;;;;;;;;;;;;;;;;振荡器设置;;;;;;;;;;;;;;;;;;;;;;;;;;;;;BANKSEL OSCCONMOVLW B'00010011'MOVWF OSCCON ;;;;;;;;;;;;;;;;;;;;;;振荡器设置为125KHz,内部振荡器;;;;;;;;;;;;;;;;;;;;;;;;;;输入输出设置;;;;;;;;;;;;;;;;;;;;;;;;;;;BANKSEL TRISCCLRF TRISCBANKSEL PORTCMOVLW B'11111111'MOVWF PORTCBANKSEL TRISACLRF TRISABANKSEL PORTACLRF PORTABANKSEL ANSELCLRF ANSELBANKSEL TRISBMOVLW B'00100000'MOVWF TRISBBANKSEL IOCBMOVLW B'00100000'MOVWF IOCBBANKSEL PORTBCLRF PORTBBANKSEL WPUBMOVLW B'00100000'MOVWF WPUB ;;;;;;;;;;;;;;;;;;其他初始化;;;;;;;;;;;;;;;;;;;;;;;;; BANKSEL COFFSETMOVLW D'10'MOVWF COFFSET;;;;;;;;;;;;;;;;;;;;10个数字BANKSEL CNUMMOVLW D'1'MOVWF CNUM;;;;;;;;;;;;;;;;;;;;;;;;;4个数码管MOVF COFFSET,WMOVWF PA;;;;;;;;;;;;;;;;;;;;;;;;;;;PA暂时存储COFFSETMOVLW D'4'MOVWF CNT;;;;;;;;;;;;;;;;;;;;;;;;;;计数四次PAGESEL MAINGOTO MAIN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;这里是函数区;;;;;;;;;;;;;;;;; SELECT:BANKSEL PORTACLRF PORTABANKSEL PORTCMOVLW B'11111111'MOVWF PORTCMOVLW LOW STABLE ;获得TABLE的低8位ADDWF NUM,F;TABLE值加上偏移量MOVLW HIGH STABLE;获得TABLE的高5位BTFSC STATUS,C;检测是否翻页ADDLW 1;翻页则在TABLE的高5位加一MOVWF PCLATH;将TABLE的高5位写入PCLATH MOVF NUM,W;将需要调用的信号的地址写入W CALL STABLE;MOVWF PORTCRETURNSTABLE:MOVWF PCL;转到偏移的地址RETLW B'11111110';1RETLW B'11111101';2RETLW B'11111011';3RETLW B'11110111';4WRITE:MOVLW LOW TABLE ;获得TABLE的低8位ADDWF OFFSET,F;TABLE值加上偏移量MOVLW HIGH TABLE;获得TABLE的高5位BTFSC STATUS,C;检测是否翻页ADDLW 1;翻页则在TABLE的高5位加一MOVWF PCLATH;将TABLE的高5位写入PCLATH MOVF OFFSET,W;将需要调用的信号的地址写入WCALL TABLE;MOVWF PORTARETURNTABLE:MOVWF PCL;转到偏移的地址RETLW B'01101111';9 RETLW B'01111111';8 RETLW B'00000111';7 RETLW B'01111101';6 RETLW B'01101101';5 RETLW B'01100110';4 RETLW B'01001111';3 RETLW B'01011011';2 RETLW B'00000110';1 RETLW B'00111111';0 SETORIGIN:MOVLW D'1'MOVWF CNUMMOVLW D'4'MOVWF CNTMOVF COFFSET,WMOVWF PARETURNSETPA:MOVLW D'10'MOVWF PARETURNSETCOFFSET:MOVLW D'10'MOVWF COFFSETRETURNTMR0_INT:BANKSEL INTCONBCF INTCON,2 ;;;;;;;;;;;;;清除TMR0中断标志位DECF COFFSETBTFSC STATUS,ZCALL SETCOFFSET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;COFFSET减一BANKSEL TMR0CLRF TMR0RETURNPORTB_INT:BANKSEL PORTBBCF PORTB,4BANKSEL INTCONBCF INTCON,RBIF;;;;;;;;;;;;;;;;;;;;;;;;;;PORTB中断标志清除MOVLW D'10'MOVWF COFFSETBANKSEL INTCONBCF INTCON,2 ;;;;;;;;;;;;;清除TMR0中断标志位BANKSEL TMR0CLRF TMR0RETURN;;;;;;;;;;函数区到此为止;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MAINLOOPMOVF CNUM,WMOVWF NUM;数码管MOVF PA,WMOVWF OFFSET;图案CALL SELECT;;;;;;;;;;;;;;;;;;;;;;;;;数码管CALL WRITE;;;;;;;;;;;;;;;;;;;;;;;;;;图案DECF PABTFSC STATUS,Z;;;;;;;;;;;;;;;;;;;;;;CALL SETPA;;;;;;;;;;;;;;;;;;;;;;;;;;INCF CNUMDECF CNTBTFSC STATUS,ZCALL SETORIGINGOTO LOOPEND ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;含电平触发中断的数码管滚动显示-0-9#INCLUDE p16f886.inc__config _CONFIG1, _INTOSCIO & _WDT_OFF CONTEXT_SAVING UDATA_SHRW_TMP RES 1S_TMP RES 1OFFSET RES 1COFFSET RES 1NUM RES 1CNUM RES 1PA RES 1CNT RES 1RESET CODE 0x0PAGESEL INITGOTO INITISR CODE 0x04MOVWF W_TMPSWAPF STATUS,WMOVWF S_TMP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BANKSEL INTCONBCF INTCON,2 ;;;;;;;;;;;;;清除TMR0中断标志位DECF COFFSETBTFSC STATUS,ZCALL SETCOFFSET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;COFFSET减一BANKSEL TMR0CLRF TMR0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SWAPF S_TMP,WMOVWF STATUSSWAPF W_TMP,FSWAPF W_TMP,WRETFIECODEINITBANKSEL TMR0CLRF TMR0BANKSEL OPTION_REGMOVLW B'00000111'MOVWF OPTION_REG ;;;;;;;;;;;;;;;;;;;;;TMR0设置为256分频BANKSEL INTCONBSF INTCON,GIEBSF INTCON,T0IE ;;;;;;;;;;;;;;;;;;;;;总中断使能,TMR0中断使能BANKSEL TRISCCLRF TRISCBANKSEL PORTCMOVLW B'11111111'MOVWF PORTCBANKSEL TRISACLRF TRISABANKSEL PORTACLRF PORTABANKSEL ANSELCLRF ANSELBANKSEL OSCCONMOVLW B'00010011'MOVWF OSCCON ;;;;;;;;;;;;;;;;;;;;;;振荡器设置为125KHz,内部振荡器BANKSEL COFFSETMOVLW D'10'MOVWF COFFSET;;;;;;;;;;;;;;;;;;;;10个数字BANKSEL CNUMMOVLW D'1'MOVWF CNUM;;;;;;;;;;;;;;;;;;;;;;;;;4个数码管MOVF COFFSET,WMOVWF PA;;;;;;;;;;;;;;;;;;;;;;;;;;;PA暂时存储COFFSETMOVLW D'4'MOVWF CNT;;;;;;;;;;;;;;;;;;;;;;;;;;计数四次PAGESEL MAINGOTO MAIN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;这里是函数区;;;;;;;;;;;;;;;;;SELECT:BANKSEL PORTACLRF PORTABANKSEL PORTCMOVLW B'11111111'MOVWF PORTCMOVLW LOW STABLE ;获得TABLE的低8位ADDWF NUM,F;TABLE值加上偏移量MOVLW HIGH STABLE;获得TABLE的高5位BTFSC STATUS,C;检测是否翻页ADDLW 1;翻页则在TABLE的高5位加一MOVWF PCLATH;将TABLE的高5位写入PCLATH MOVF NUM,W;将需要调用的信号的地址写入W CALL STABLE;MOVWF PORTCRETURNSTABLE:MOVWF PCL;转到偏移的地址RETLW B'11111110';1RETLW B'11111101';2RETLW B'11111011';3RETLW B'11110111';4WRITE:MOVLW LOW TABLE ;获得TABLE的低8位ADDWF OFFSET,F;TABLE值加上偏移量MOVLW HIGH TABLE;获得TABLE的高5位BTFSC STATUS,C;检测是否翻页ADDLW 1;翻页则在TABLE的高5位加一MOVWF PCLATH;将TABLE的高5位写入PCLATH MOVF OFFSET,W;将需要调用的信号的地址写入W CALL TABLE;MOVWF PORTARETURNTABLE:MOVWF PCL;转到偏移的地址RETLW B'01101111';9RETLW B'01111111';8RETLW B'00000111';7RETLW B'01111101';6RETLW B'01101101';5RETLW B'01100110';4RETLW B'01001111';3RETLW B'01011011';2RETLW B'00000110';1RETLW B'00111111';0SETORIGIN:MOVLW D'1'MOVWF CNUMMOVLW D'4'MOVWF CNTMOVF COFFSET,WMOVWF PARETURNSETPA:MOVLW D'10'MOVWF PARETURNSETCOFFSET:MOVLW D'10'MOVWF COFFSETRETURN;;;;;;;;;;函数区到此为止;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MAINLOOPMOVF CNUM,WMOVWF NUM;数码管MOVF PA,WMOVWF OFFSET;图案CALL SELECT;;;;;;;;;;;;;;;;;;;;;;;;;数码管CALL WRITE;;;;;;;;;;;;;;;;;;;;;;;;;;图案DECF PABTFSC STATUS,Z;;;;;;;;;;;;;;;;;;;;;;CALL SETPA;;;;;;;;;;;;;;;;;;;;;;;;;;INCF CNUMDECF CNTBTFSC STATUS,ZCALL SETORIGINGOTO LOOPEND ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;滚动显示0-9,一秒滚一次每次显示四个数字#INCLUDE p16f886.inc__config _CONFIG1, _INTOSCIO & _WDT_OFFCONTEXT_SAVING UDATA_SHRW_TMP RES 1S_TMP RES 1OFFSET RES 1COFFSET RES 1NUM RES 1CNUM RES 1PA RES 1CNT RES 1LP0 RES 1LP1 RES 1ISBLACK RES 1RESET CODE 0x0PAGESEL INITGOTO INITISR CODE0x04;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;MOVWF W_TMPSWAPF STATUS,WMOVWF S_TMP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;BANKSEL INTCONBCF INTCON,2 ;;;;;;;;;;;;;清除TMR0中断标志位COMF ISBLACKBTFSS ISBLACK,0CALL DECRESE_COFFSETBTFSC ISBLACK,0CALL BLACKBANKSEL TMR0MOVLW B'11000000'MOVWF TMR0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SWAPF S_TMP,WMOVWF STATUSSWAPF W_TMP,FSWAPF W_TMP,W RETFIE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CODEINITBANKSEL TMR0CLRF TMR0BANKSEL OPTION_REGMOVLW B'00000111'MOVWF OPTION_REG ;;;;;;;;;;;;;;;;;;;;;TMR0设置为256分频BANKSEL INTCONBSF INTCON,GIEBSF INTCON,T0IE ;;;;;;;;;;;;;;;;;;;;;总中断使能,TMR0中断使能BANKSEL TRISCCLRF TRISCBANKSEL PORTCMOVLW B'11111111'MOVWF PORTCBANKSEL TRISACLRF TRISABANKSEL PORTACLRF PORTABANKSEL ANSELCLRF ANSELBANKSEL OSCCONMOVLW B'00010011'MOVWF OSCCON ;;;;;;;;;;;;;;;;;;;;;;振荡器设置为125KHz,内部振荡器BANKSEL COFFSETMOVLW D'22'MOVWF COFFSET;;;;;;;;;;;;;;;;;;;;10个数字BANKSEL CNUMMOVLW D'1'MOVWF CNUM;;;;;;;;;;;;;;;;;;;;;;;;;4个数码管MOVF COFFSET,WMOVWF PA;;;;;;;;;;;;;;;;;;;;;;;;;;;PA暂时存储COFFSETMOVLW D'4'MOVWF CNT;;;;;;;;;;;;;;;;;;;;;;;;;;计数四次CLRF ISBLACKPAGESEL MAINGOTO MAIN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;这里是函数区;;;;;;;;;;;;;;;;; SELECT:BANKSEL PORTACLRF PORTABANKSEL PORTCMOVLW B'11111111'MOVWF PORTCMOVLW LOW STABLE ;获得TABLE的低8位ADDWF NUM,F;TABLE值加上偏移量MOVLW HIGH STABLE;获得TABLE的高5位BTFSC STATUS,C;检测是否翻页ADDLW 1;翻页则在TABLE的高5位加一MOVWF PCLATH;将TABLE的高5位写入PCLATH MOVF NUM,W;将需要调用的信号的地址写入W CALL STABLE;MOVWF PORTCRETURNSTABLE:MOVWF PCL;转到偏移的地址RETLW B'11111110';1RETLW B'11111101';2RETLW B'11111011';3RETLW B'11110111';4WRITE:MOVLW LOW TABLE ;获得TABLE的低8位ADDWF OFFSET,F;TABLE值加上偏移量MOVLW HIGH TABLE;获得TABLE的高5位BTFSC STATUS,C;检测是否翻页ADDLW 1;翻页则在TABLE的高5位加一MOVWF PCLATH;将TABLE的高5位写入PCLATH MOVF OFFSET,W;将需要调用的信号的地址写入W CALL TABLE;MOVWF PORTARETURNTABLE:MOVWF PCL;转到偏移的地址RETLW B'01101111';9RETLW B'01111111';8RETLW B'00000111';7RETLW B'01111101';6RETLW B'01101101';5RETLW B'01100110';4RETLW B'01001111';3RETLW B'01011011';2RETLW B'00000110';1RETLW B'00111111';0RETLW B'00000000';NULL——11 RETLW B'00000000';NULL——12 RETLW B'00000000';NULL——13 RETLW B'00000000';NULL——14 RETLW B'01011110';d——15RETLW B'01111001';E——16RETLW B'01111001';E————17 RETLW B'01101101';S——18RETLW B'00000000';NULL——19RETLW B'00000000';NULL——20RETLW B'00000000';NULL——21RETLW B'00000000';NULL——22 SETORIGIN:MOVLW D'1'MOVWF CNUMMOVLW D'4'MOVWF CNTMOVF COFFSET,WMOVWF PARETURNSETPA:MOVLW D'10'MOVWF PARETURNSETCOFFSET:MOVLW D'10'MOVWF COFFSETRETURNDELAY:MOVLW 00FHMOVWF LP0L0 MOVLW 00FHMOVWF LP1L1 DECFSZ LP1,FGOTO L1DECFSZ LP0,FGOTO L0RETURNDECRESE_COFFSET:DECF COFFSETBTFSC STATUS,ZCALL SETCOFFSETRETURNBLACK:BANKSEL PORTACLRF PORTACALL DELAYRETURN;;;;;;;;;;函数区到此为止;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MAINLOOPMOVF CNUM,WMOVWF NUM;数码管MOVF PA,WMOVWF OFFSET;图案CALL SELECT;;;;;;;;;;;;;;;;;;;;;;;;;数码管CALL WRITE;;;;;;;;;;;;;;;;;;;;;;;;;;图案DECF PABTFSC STATUS,Z;;;;;;;;;;;;;;;;;;;;;;CALL SETPA;;;;;;;;;;;;;;;;;;;;;;;;;;INCF CNUMDECF CNTBTFSC STATUS,ZCALL SETORIGINGOTO LOOPEND ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;加开机画面SEEd#INCLUDE p16f886.inc__config _CONFIG1, _INTOSCIO & _WDT_OFF CONTEXT_SAVING UDATA_SHRW_TMP RES 1S_TMP RES 1OFFSET RES 1COFFSET RES 1NUM RES 1CNUM RES 1PA RES 1CNT RES 1LP0 RES 1LP1 RES 1ISBLACK RES 1RESET CODE 0x0PAGESEL INITGOTO INITISR CODE0x04;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;SWAPF STATUS,WMOVWF S_TMP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PB_INTBTFSC INTCON,RBIFCALL PORTB_INTTM0_INTBTFSC INTCON,T0IFCALL TMR0_INT;;;;;;;;;;;;;;;;;;;;;COMF ISBLACKBTFSS ISBLACK,0CALL DECRESE_COFFSETBTFSC ISBLACK,0CALL BLACKBANKSEL INTCONBCF INTCON,2 ;;;;;;;;;;;;;清除TMR0中断标志位BANKSEL TMR0MOVLW B'01111111'MOVWF TMR0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SWAPF S_TMP,WSWAPF W_TMP,FSWAPF W_TMP,W RETFIE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CODEINITBANKSEL TMR0MOVLW B'01111111'MOVWF TMR0BANKSEL OPTION_REGMOVLW B'00000111'MOVWF OPTION_REG ;;;;;;;;;;;;;;;;;;;;;TMR0设置为256分频BANKSEL INTCONBSF INTCON,GIEBSF INTCON,T0IE ;;;;;;;;;;;;;;;;;;;;;总中断使能,TMR0中断使能BSF INTCON,RBIE;;;;;;;;;;;;;;;;;;;;;;PORTB电平变化中断使能BANKSEL TRISCCLRF TRISCBANKSEL PORTC MOVLW B'11111111' MOVWF PORTC BANKSEL TRISA CLRF TRISA BANKSEL PORTA CLRF PORTA BANKSEL ANSEL CLRF ANSEL BANKSEL TRISB MOVLW B'00100000' MOVWF TRISB BANKSEL IOCB MOVLW B'00100000' MOVWF IOCB BANKSEL PORTB CLRF PORTB BANKSEL WPUB MOVLW B'00100000' MOVWF WPUB BANKSEL OSCCON MOVLW B'00010011'。
按键控制数码管和流水灯设计报告实验报告
按键控制数码管和流水灯设计报告实验报告实验名称:按键控制数码管和流水灯设计报告一、实验目的本实验旨在通过使用按键来控制数码管和流水灯的显示,加深对数码管和流水灯工作原理的理解,并掌握按键的基本输入输出原理。
二、实验器材1. Arduino开发板2.数码管模块3.面包板4.面包板连接线5.按键模块6.跳线三、实验原理数码管是一种将数字和一些常用符号通过数码电路显示在特定位置的显示器件,由多个LED组成,可显示0-9及一些小于9的字母和符号。
流水灯是一种LED灯的组合,通过不同的时序控制,实现灯光依次点亮或熄灭的效果。
本实验通过使用按键控制器将数码管和流水灯的状态控制与显示,按下不同的按键可以使数码管切换显示不同的数字,同时控制流水灯的点亮或熄灭。
四、实验步骤1. 将数码管模块连接到Arduino开发板的数字I/O口,连接方式可参考数码管模块的接口定义和Arduino开发板的编号。
2. 将按键模块连接到Arduino开发板的数字I/O口,连接方式可参考按键模块的接口定义和Arduino开发板的编号。
3. 按键模块和数码管模块都需要使用面包板连接线和跳线连接到Arduino开发板的相应引脚上。
4.根据按键的读取状态,通过编程控制数码管显示相应的数字,利用流水灯实现通过按键的控制点亮或熄灭。
五、实验结果经过编程和调试,实验中数码管能够正确显示按键输入的数字,同时根据按键输入状态控制流水灯的点亮或熄灭。
按不同的按键可以切换数码管的数字显示,实现了按键对数码管和流水灯的控制。
六、实验总结本实验通过按键来控制数码管和流水灯的显示,加深了对数码管和流水灯的工作原理的理解。
同时,掌握了按键的基本输入输出原理,并通过编程控制实现了按键对数码管和流水灯的控制。
本实验还有一些可以改进的地方,例如可以增加多个按键,实现更多的控制功能;还可以通过增加延时函数控制流水灯的点亮或熄灭速度。
通过不断改进和练习,可以提高对Arduino开发板的理解和掌握。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sbit d=P2^3;
sbit dula=P2^6;
sbit wela=P2^7;
uchar temp,t0,t1,bai,shi,ge,flag,flag1;
uint shu;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
谢辞
论文的顺利完成,离不开老师、同学和朋友的关心和帮助,通过这次课程设计的完成,我和同学之间的配合逐渐默契,也增强了自己的动手能力。
参考文献:
1、吴金戌,沈庆阳,郭庭吉,8051单片机实践与应用[M].清华大学出版社,2001
2、魏立峰,王宝兴.单片机原理与应用技术[M].北京:北京大学出版社,2006.
TL0=(65536-50000)%256;
TR0=1;
flag=1;
t0=0;
P1=0xff;
TR1=0;
}
}
}
delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
结束语
本次论文介绍了数码管的动态显示以及流水灯,通过自己的编程以及思考,我对单片机的学习更深一步了,在今后的学习中,我会更加认真地学习基础知识,以便能够更熟练地应用单片机的功能,为以后的工作和学习奠定良好的基础。
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(5);
dula=1;
P0=table[bai];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delay(5);
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
t0++;
if(flag!=1)
{
if(t0==10)
{
t0=0;
temp=_crol_(temp,1);
P1=temp;
}
}
else
{
if(t0%4==0)
P1=~P1;
if(t0==60)
{ d=1;
TR0=0;
P1=0xff;
flag1=1;
}
}
}
void exter1() interrupt 3
3、胡辉单片机原理与应用,北京:中国水利水电出版社,2007年
4、陈明荧.8051单片机课程设计实训教材[M].北京:清华大学出版社,2003年9月.
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
}
void exter0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
0
0
1
39h
D
1
0
1
1
1
1
0
5eh
E
1
1
1
1
0
0
1
79h
F
1
1
1
0
0
0
1
71h
七段数码管的字型代码表
二、
74HC573锁存器是高性能硅CMOS器件,SL74HC573跟LS/AL573的管脚一样。器件的输入是和标准CMOS输出兼容的;加上拉电阻,他们能和LS/ALSTTL输出兼容。
当锁存使能端LE为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。
三、流水灯
89C52内有程序控制连接流水灯引脚的输出电平,来决定LED的亮灭。一般LED和单片机之间会接一块74hc573来加强控制,LED接上拉电阻连电源,用于降压。
四、程序编程如下:
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
P0=0xef;
wela=0;
delay(5);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay(5);
}
voidinit()
{ shu=920;
temp=0xfe;
P1=temp;
TMOD=0x11;
TH0=(65536-50000)/256;
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t1++;
if(t1==2)
{ t1=0;
shu--;
bai=shu/100;
shi=shu%100/10;
ge=shu%10;
if(shu==888)
{ d=0;
TR0=0;
TH0=(65536-50000)/256;
惠州学院
HUIZHOUUNIVERSITY
单片机课程设计论文
中文题目:数码管以及流水灯
英文题目:Digital tube, and running water lamp
姓名:姚银涛
系别:电子科学系
班级:08电科(1)班
学号:080702128
日期:2011年6月26日
指导老师:魏晓慧
教务处制
课程设计任务书
引言
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。
89C52是INTEL公司MCS-51系列单片机中基本的产品,它采用INTEL公司可靠的CHMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。它结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于80C51增强型单片机版本,集成了时钟输出和向上或向下计数器等更多的功能,适合于类似马达控制等应用场合。89C52内置8位中央处理单元、256字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。此外,89C52还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。在空闲模式下冻结CPU而RAM定时器、串行口和中断系统维持其功能。掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能。89C52有PDIP(40pin)和PLCC(44pin)两种封装形式。
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x36,0x79,0x38,0x3f,0};
display(uchar aa,uchar bb,uchar cc,uchar bai,uchar shi,uchar ge);
delay(uint z);
void init();
void main()
{
init();
while(1)
{
if(flag1!=1)
display(8,8,8,bai,shi,ge);
else
display(1,1,0,6,2,9);
}
}
display(uchar aa,uchar bb,uchar cc,uchar bai,uchar shi,uchar ge)
显示字形
g
f
e
d
c
b
a
段码
0
0
1
1
1
1
1
1
3fh
1
0
0
0
0
1
1
0
06h
2
1
0
1
1
0
1
1
6bh
3
1
0
0
1
1
1
1
4fh
4
1
1
0
0
1
1
0
66h
5
1
1
0
1
1
0
1
6dh
6
1
1
1
1
1
0
1
7dh
7
0
0
0
0
1
1
1
07h
8
1
1
1
1
1
1
1
7fh
9
1
1
0
1
1
1
1
6fh
A
1
1
1
0
1
1
1
77h
B
1
1
1
1
1
0
0
7ch
C
0
1
1
1
摘要
数码管的动态显示是一种按位轮流点亮各位数码管的显示方式,即在某一时段,只让其中一位数码管的“位选端有效”,并送出相应的字型显示编码。此时其他位的数码管因位选端无效而都处于熄灭状态;下一时段按顺序选通另外一位数码管,并送出相应的字型显示编码,按此规律循环下去,即可使各位数码管分别间断地显示出相应的字符。通过定时器可以控制单片机上的数码管以及流水灯的显示时间,从而达到设计的要求。