利用八位八段数码管显示I LOVE YOU

合集下载

51单片机应用:8只数码管同时显示多个不同字符

51单片机应用:8只数码管同时显示多个不同字符

51单片机应用:8只数码管同时显示多个不同字符设计要求单片机控制8只数码管,同时显示8个字符。

例如,从左至右显示“”,接着显示“”,在接着显示“”,……“”,“”,分析及方案设计:本题可以采用扩展I/O口或直接用单片机自身的I/O口的方法实现。

为节省硬件设施并使电路连线尽量简单,采用直接使用单片机自身I/O口的方式,8个数码管同时显示数字则需采用动态显示方法,初步设定以P0口给出数码管显示字段,P1口选中某一时刻动态点亮的数码管。

软件设计可以有以下几种方案:a)将全部显示状态列出,放在主程序中不断循环b)将显示状态放入8个数组中,每个状态循环一次后主程序重新开始循环c)只设置两个数组,其中一个取值不变,为正序的从1到8的共阳极数码管段码,另一个数组中的数值不断被修改,即每次显示状态改变的时候都相应改变一次,如从的段码改为的段码。

从上述方案可以看出,若设置太多的数组或列出所有显示状态,程序虽然清晰易懂但占用程序存储空间明显较大,且用delay()函数延时的话会不断占用CPU;用两个数组和两个定时器虽然算法略复杂,但程序可以达到最简化。

详细的方案说明:1)采用数码管动态显示方法。

2)8个数码管由P3控制位选,即决定某一时刻哪一个数码管亮,由P0发出的总线控制显示的段码。

3)定时器T0和T1同时工作,定时时间均为0."5毫秒,采用方式1定时,每次溢出后由软件重装初值。

4)设置中间变量temp,用于不断左移并给P3赋值;数组display[]为code 即取之不变的数组,数组show[]中的取值变化。

5)每次T0计数溢出时,temp左移一次,相应的P3左移一次,数码管由第i 个点亮变为第i+1个点亮,与此同时赋给P0口的值由show[i]变为show[i+1],达到动态显示的效果。

6)定时器T1也是每0."5毫秒计数溢出一次,但只有到1秒时才执行定时器1中断中修改数组show[]取值的程序,用变量t记录T1溢出的次数,达到200次时数组show[]中的内容开始进行修改并且t清零。

利用八位八段数码管显示I LOVE YOU

利用八位八段数码管显示I LOVE YOU

#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charsbit A_138=P1^0;sbit B_138=P1^1;sbit C_138=P1^2;void Delay_ms(uint xms); //延迟函数void main() //主函数{while(1){A_138=0;B_138=0;C_138=0; //定义第一个数码管P2=0x06; //第一个数码管亮1Delay_ms(1); //数码管延时1秒A_138=1;B_138=0;C_138=0; //定义第二个数码管P2=0x06; //第一个数码管亮1 Delay_ms(1); //数码管延时1秒A_138=0;B_138=1;C_138=0; //定义第三个数码管P2=0x3f; //第一个数码管亮0 Delay_ms(1); //数码管延时1秒A_138=1;B_138=1;C_138=0; //定义第四个数码管P2=0x3e; //第一个数码管亮U Delay_ms(1); //数码管延时1秒A_138=0;B_138=0;C_138=1; //定义第五个数码管P2=0x79; //第一个数码管亮EDelay_ms(1); //数码管延时1秒A_138=1;B_138=0;C_138=1; //定义第六个数码管P2=0x6e; //第一个数码管亮YDelay_ms(1); //数码管延时1秒A_138=0;B_138=1;C_138=1; //定义第七个数码管P2=0x3f; //第一个数码管亮0Delay_ms(1); //数码管延时1秒A_138=1;B_138=1;C_138=1; //定义第八个数码管P2=0x3e; //第一个数码管亮UDelay_ms(1); //数码管延时1秒}}void Delay_ms(uint xms){uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--); }。

8位8段LED数码管动态扫描显示

8位8段LED数码管动态扫描显示

8位8段LED数码管动态扫描显示
项目名称:8位8段LED数码管动态扫描显示班级:09电二姓名:解健学号:09020313
一.实验目的
1.掌握数码管动态扫描显示原理及实现方法。

2.掌握动态扫描显示电路驱动程序的编写方法。

二.实验电路
第一步:先在Proteu软件中设计仿真电路原理图。

第四步:最后观察设计的电路图是否能得到预想的效果,若不能,进行检查,找到毛病且纠正。

流程图
开始灭显示器I=0延时Counter=0Counter=0选择段选择段点亮所有位按数值点亮位延时延时
Counter++YCounter<8NI++YNNCounter++YCounter<8N停止Y结束I<30
实验现象:
显示器点亮所有段,持续约1,然后灭显示器,持续2,最后显示“hello-93”,保持。

附:程序
#include#include#defineTRUE1#definedataPortP0#defineledConPortP 2
{unignedchari,counter=0;
for(i=0;i<30;i++){
voiddelay_5u(void){_nop_();_nop_();}
voiddelay_50u(void){unignedchari;for(i=0;i<4;i++){delay_5u() ;}}
voiddelay_100u(void){delay_50u();delay_50u();}
for(j=0;j<10;j++)delay_100u();ucM--;}}。

verilog程序 88点阵显示I LOVE YOU

verilog程序 88点阵显示I LOVE YOU

module love(clk,rst,disp_out,en);input clk,rst;output [7:0] disp_out; //列8-1 47 43 49 41 57 51 55 53 output [7:0] en; //行H-A 75-68 D7-D0/* ------------------------- EN| |=>H8 47| |=>H7 43| |=>H6 49| |=>H5 41| |=>H4 57| |=>H3 51| |=>H2 55|-----------------------|=>H1 53dispout H G F E D C B A75 74 73 72 71 70 69 68D7 D6 D5 D4 D3 D2 D1 D0*/reg [7:0] disp_out;reg [7:0] en;//reg a;parameter b=15;reg [31:0] cnt_scan;always @(posedge clk or negedge rst)beginif(!rst) begincnt_scan<=0;endelse begincnt_scan<=cnt_scan+1;endendalways @(cnt_scan) //列使能begincase(cnt_scan[15:13])3'b000 : en = 8'b1111_1110;3'b001 : en = 8'b1111_1101;3'b010 : en = 8'b1111_1011;3'b011 : en = 8'b1111_0111;3'b100 : en = 8'b1110_1111;3'b101 : en = 8'b1101_1111;3'b110 : en = 8'b1011_1111;3'b111 : en = 8'b0111_1111;endcaseendalways @(cnt_scan) //字循环if(cnt_scan[b+12:b+11]==2'b00)//begin//Icase(cnt_scan[b:b-2])3'b000 : disp_out = 8'b1100_0011;3'b001 : disp_out = 8'b1110_0111;3'b010 : disp_out = 8'b1110_0111;3'b011 : disp_out = 8'b1110_0111;3'b100 : disp_out = 8'b1110_0111;3'b101 : disp_out = 8'b1110_0111;3'b110 : disp_out = 8'b1110_0111;3'b111 : disp_out = 8'b1100_0011;endcaseelse if(cnt_scan[b+12:b+11]==2'b01)//begin //xincase(cnt_scan[b:b-2])3'b000 : disp_out = 8'b11011011;3'b001 : disp_out = 8'b10100101;3'b010 : disp_out = 8'b01111110;3'b011 : disp_out = 8'b01111110;3'b100 : disp_out = 8'b01111110;3'b101 : disp_out = 8'b10111101;3'b110 : disp_out = 8'b11011011;3'b111 : disp_out = 8'b11100111;endcaseelse if(cnt_scan[b+12:b+11]==2'b10)//begin Ucase(cnt_scan[15:13])3'b000 : disp_out = 8'b10011001;3'b001 : disp_out = 8'b10011001;3'b010 : disp_out = 8'b10011001;3'b011 : disp_out = 8'b10011001;3'b100 : disp_out = 8'b10011001;3'b101 : disp_out = 8'b10011001;3'b110 : disp_out = 8'b10011001;3'b111 : disp_out = 8'b11000011;endcaseelsecase(cnt_scan[15:13])3'b000 : disp_out = 8'b11100111;3'b001 : disp_out = 8'b11100111;3'b010 : disp_out = 8'b11100111;3'b011 : disp_out = 8'b11100111;3'b100 : disp_out = 8'b11100111;3'b101 : disp_out = 8'b11111111;3'b110 : disp_out = 8'b11100111;3'b111 : disp_out = 8'b11100111;endcaseendmodule实验目的掌握数码扫描显示的原理和方法2.掌握文本图形共同设计方法二、实验仪器PC机数字系统实验设计开发板实验学时:5学时四:实验过程实验源程序:十字花:module kk(f20mb,f1,row,line);input f20mb;output f1,line,row;reg f1;reg [7:0] row;reg [7:0]line;integer i,j,a,b,n;always @(posedge f20mb)beginif(j==9999)beginj<=0;f1<=~f1;endelsej<=j+1;endalways @(posedge f1)beginif(a>1500)beginif (b>7)beginb<=0;endelsebegincase(b)0: begin line<=8'b10000000;row<=8'b10111101;end1: begin line<=8'b01000000;row<=8'b01011010;end2: begin line<=8'b00100000;row<=8'b10100101;end3: begin line<=8'b00010000;row<=8'b11000011;end4: begin line<=8'b00001000;row<=8'b11000011;end5: begin line<=8'b00000100;row<=8'b10100101;end6: begin line<=8'b00000010;row<=8'b01011010;end7: begin line<=8'b00000001;row<=8'b10111101;end endcaseb<=b+1;enda<=a+1;if(a===3000)begin a<=0;endendelsebeginif(n>7)beginn<=0;endelsebegincase(n)0: begin line<=8'b10000000;row<=8'b11100111;end1: begin line<=8'b01000000;row<=8'b11100111;end2: begin line<=8'b00100000;row<=8'b11100111;end3: begin line<=8'b00010000;row<=8'b00000000;end4: begin line<=8'b00001000;row<=8'b00000000;end5: begin line<=8'b00000100;row<=8'b11100111;end6: begin line<=8'b00000010;row<=8'b11100111;end7: begin line<=8'b00000001;row<=8'b11100111;endendcasen<=n+1;enda<=0;a<=a+1;endendendmodule十字:module kk(f20mb,f1,row,line);input f20mb;output f1,line,row;reg f1;reg [7:0] row;reg [7:0]line;integer i,j,b;always @(posedge f20mb)beginif(j==9999999)beginj<=0;f1<=~f1;endelsej<=j+1;endalways@(posedge f1)beginif (b>4)beginb<=0;endelsebegincase(b)0:begin row<=8'b11111111;line<=8'b00000000;end1:begin row<=8'b01111110;line<=8'b10000001;end2:begin row<=8'b00111100;line<=8'b11000011;end3:begin row<=8'b00011000;line<=8'b11100111;end4:begin row<=8'b00000000;line<=8'b11111111;endendcaseb<=b+1;endendendmodule实验图形:设计思路完成十字形的旋转和方形的扩展都需要用到将时间缩短到人眼不能观测的段。

【CPLD EPM570】Verilog实现8位8段数码管显示

【CPLD EPM570】Verilog实现8位8段数码管显示

Verilog实现8位8端数码管显示1 原理图2个4位的数码管,组成的8位8段数码管,每个4位数码管的数据线独立,其实是可以以总线形式连接在一起的,可以减少IO。

共阳极的供电端用了三极管增加驱动,否则IO供电驱动多个数码管时有困难。

2 CPLD代码module LED_8segment (clk_24m,reset_n,Bit_line, //数码管位选择线。

Data_line_h, //高4位数码管数据线。

Data_line_l //低4位数码管数据线。

);input wire clk_24m;input wire reset_n;output wire [7:0] Bit_line; //8位位选择线,对应8位的数码管。

output wire [0:7] Data_line_h; //8位数据线,对应abcdefg和dp共8段LED。

output wire [0:7] Data_line_l;/****************************************************************************** 24M时钟分频,用于内部控制及计数等。

******************************************************************************/ reg [16:0] count_div1;wire condition_183; //183 Hz时钟信号。

always @ (posedge clk_24m or negedge reset_n)beginif(reset_n == 1'b0)count_div1 <= 16'h00000;elsecount_div1 <= count_div1 + 16'h00001;end/****************************************************************************** condition_183:183Hz时钟信号,高电平持续一个24MHz时钟周期,其余时间为低电平。

单片机课程设计-8位8段LED数码管动态扫描显示资料

单片机课程设计-8位8段LED数码管动态扫描显示资料

华南理工大学广州汽车学院单片机课程设计题目:8位8段LED数码管动态扫描专业:电子信息工程班级:09电信(1 )班姓名:付锦辉学号:200930062745一、内容要求:在8位8段LED数码管显示8.8.8.8.8.8.8.8.”持续500ms,之后灭显示器200ms;然后显示“ WELCOM-1 ”(由于8位8段LED数码管显示不能显示字母 W 和M,所以改为显示“ HELLO-93 ”)二、目的和意义1、掌握数码管动态扫描显示原理及实现方法。

2、掌握动态扫描显示电路驱动程序的编写方法。

三、总体方案设计思路LED 数码动态显示的基本做法在于分时轮流选通数码管的公共端,使得各数码管轮流导通,再选通相应的数码管后,即显示字段上得到显示字形码。

这种方式数码管的发光效率,而且由于各个数码管的字段线是并联使用的,从而大大简化了硬件线路。

动态扫描显示接口是单片机系统中应用最为广泛的一种显示方式。

其接口电路是把所有显示器的 8 个笔画段 A-DP 同名端并联在一起,而每个显示器的公共极 COM 各自独立地接受 I/O 线控制, CPU 向字段输出口送出字段形码是,所有显示器由于同名端并连接收到相同的字形码,但究竟是哪个显示器亮,则取决于COM 端,而这一端是由 I/O 控制的,所以就可以自行决定何时显示哪一位了。

而所谓动态扫描是指采用分时的方法,轮流控制各个显示器的 COM 端,使各个显示器轮流点亮。

再轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上个位显示器并非同时点亮,但只要扫描的速度足够快,给人的影响就是一组稳定的显示数据,不会有闪烁感。

采用总线驱动器 74HC245 提供 LED 数码管的段驱动,输出高电平时点亮相应段;采用集电极开路的BCD-十进制译码器/驱动器完成LED数码管位驱动,输出低电平时选通相应位。

P2 口每个口线输出灌电流不足以驱动一个数码管显示器的位-公共极,所依通过集电极开路的BCD-十进制译码器/驱动器7445驱动,即节约P2 口线,又增加驱动能力。

我爱你

我爱你

1.1原理图图1-1 电子琴电路图1.2系统板硬件连线系统板硬件连线如图1-1所示,发生模块,键盘模块,及LED显示模块连接如下1.把“单片机系统”区域中的P1.0端口用导线连接到“音频放大模块”区域中的SPK IN端口上;2.把“单片机系统”区域中的P3.0-P3.7端口用8芯排线连接到“4X4行列式键盘”区域中的C1-C4 R1-R4端口上;3.把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。

1.3主要功能特性与MCS-51单片机产品兼容8K字节在系统可编程Flash存储器1000次擦写周期全静态操作:0Hz~33Hz三级加密程序存储器32个可编程I/O口线三个16位定时器/计数器八个中断源全双工UART串行通道、低功耗空闲和掉电模式掉电后中断可唤醒看门狗定时器双数据指针掉电标识符1.4设计目的主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。

利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。

并且本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。

一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。

1.5程序框图程序框图如图所示:键盘识别程序框图如图所示:音乐发声程序框图如图所示:程序KEYBUF EQU 30HSTH0 EQU 31HSTL0 EQU 32HTEMP EQU 33HSPK EQU P1.0 ; 蜂鸣器所在端口ORG 0000HLJMP STARTORG 0BHLJMP INT_T0START: MOV TMOD,#01HSETB ET0SETB EAWAIT:MOV P2,#0FFHCLR P2.4 ;从第四行开始扫描MOV A,P2ANL A,#0FH ;屏蔽高四位,高四位为行,低四位为列XRL A,#0FHJZ NOKEY1 ;判断是否有键按下,没有就跳转LCALL DELY10MSMOV A,P2 ;消除抖动和干扰ANL A,#0FHXRL A,#0FHJZ NOKEY1MOV A,P2 ;确定有键按下以后的处理ANL A,#0FHCJNE A,#0EH,NK1 ;是否为第四行第一列的键被按下MOV KEYBUF,#0 ;保存列号LJMP DK1NK1: CJNE A,#0DH,NK2MOV KEYBUF,#1LJMP DK1NK2: CJNE A,#0BH,NK3MOV KEYBUF,#2LJMP DK1NK3: CJNE A,#07H,NK4MOV KEYBUF,#3LJMP DK1NK4: NOPDK1: ;第四行的处理MOV A,KEYBUFMOV DPTR,#TABLEMOVC A,@A+DPTRMOV P0,AMOV A,KEYBUFMOV B,#2 ;Table1以字保存,所以散转MUL ABMOV TEMP,AMOV DPTR,#TABLE1MOVC A,@A+DPTRMOV STH0,A ;送入高字节MOV TH0,AINC TEMPMOV A,TEMPMOVC A,@A+DPTRMOV STL0,A ;送入低字节MOV TL0,ASETB TR0DK1A: M OV A,P2 ;判断按键是否松开ANL A,#0FHXRL A,#0FHJNZ DK1ACLR TR0NOKEY1:MOV P2,#0FFHCLR P2.5MOV A,P2ANL A,#0FHXRL A,#0FHJZ NOKEY2LCALL DELY10MSMOV A,P2ANL A,#0FHXRL A,#0FHJZ NOKEY2MOV A,P2ANL A,#0FHCJNE A,#0EH,NK5MOV KEYBUF,#4LJMP DK2NK5: CJNE A,#0DH,NK6MOV KEYBUF,#5LJMP DK2NK6: CJNE A,#0BH,NK7MOV KEYBUF,#6LJMP DK2NK7: CJNE A,#07H,NK8MOV KEYBUF,#7LJMP DK2NK8: NOPDK2:MOV A,KEYBUFMOV DPTR,#TABLEMOVC A,@A+DPTRMOV P0,AMOV A,KEYBUFMOV B,#2MUL ABMOV TEMP,AMOV DPTR,#TABLE1MOVC A,@A+DPTRMOV STH0,AMOV TH0,AINC TEMPMOV A,TEMPMOVC A,@A+DPTRMOV STL0,AMOV TL0,ASETB TR0DK2A: M OV A,P2ANL A,#0FHXRL A,#0FHJNZ DK2ACLR TR0NOKEY2:MOV P2,#0FFHCLR P2.6MOV A,P2ANL A,#0FHXRL A,#0FHJZ NOKEY3LCALL DELY10MSMOV A,P2ANL A,#0FHXRL A,#0FHJZ NOKEY3MOV A,P2ANL A,#0FHCJNE A,#0EH,NK9MOV KEYBUF,#8LJMP DK3NK9: CJNE A,#0DH,NK10 MOV KEYBUF,#9LJMP DK3NK10: CJNE A,#0BH,NK11 MOV KEYBUF,#10LJMP DK3NK11: CJNE A,#07H,NK12 MOV KEYBUF,#11LJMP DK3NK12: NOPDK3:MOV A,KEYBUFMOV DPTR,#TABLEMOVC A,@A+DPTRMOV P0,AMOV A,KEYBUFMOV B,#2MUL ABMOV TEMP,AMOV DPTR,#TABLE1MOVC A,@A+DPTRMOV STH0,AMOV TH0,AINC TEMPMOV A,TEMPMOVC A,@A+DPTRMOV STL0,AMOV TL0,ASETB TR0DK3A: M OV A,P2ANL A,#0FHXRL A,#0FHJNZ DK3ACLR TR0NOKEY3:MOV P2,#0FFHCLR P2.7MOV A,P2ANL A,#0FHXRL A,#0FHJZ NOKEY4LCALL DELY10MSMOV A,P2ANL A,#0FHXRL A,#0FHJZ NOKEY4MOV A,P2ANL A,#0FHCJNE A,#0EH,NK13MOV KEYBUF,#12LJMP DK4NK13: CJNE A,#0DH,NK14 MOV KEYBUF,#13LJMP DK4NK14: CJNE A,#0BH,NK15 MOV KEYBUF,#14LJMP DK4NK15: CJNE A,#07H,NK16 MOV KEYBUF,#15LJMP DK4NK16: NOPDK4:MOV A,KEYBUFMOV DPTR,#TABLEMOVC A,@A+DPTRMOV P0,AMOV A,KEYBUFMOV B,#2MUL ABMOV TEMP,AMOV DPTR,#TABLE1MOVC A,@A+DPTRMOV STH0,AMOV TH0,AINC TEMPMOV A,TEMPMOVC A,@A+DPTRMOV STL0,AMOV TL0,ASETB TR0DK4A: M OV A,P2ANL A,#0FHXRL A,#0FHJNZ DK4ACLR TR0NOKEY4: JNB P1.0,MUSIC LJMP WAITMUSIC:MOV R3,#00H NEXT:MOV A,R3MOV DPTR,#TABLE2MOVC A,@A+DPTRJZ MUSICMOV R7,AINC R3MOV A,R3MOVC A,@A+DPTRMOV R2,AACALL SONGINC R3SJMP NEXT;============================================================ ===================;=== 歌曲播放子程序===SONG:MOV A,R2 ; 取出节拍RL AJNZ K EEPMOV A,#01HKEEP:MOV R2,AREPEAT:ACALL EIGHTHDJNZ R2,REPEATRET;============================================================ ===================;=== 产生1/8拍延时子程序===EIGHTH:MOV A,R7 ; 查表取出廷时参数,保存到R4MOV DPTR,#DELAY_TMOVC A,@A+DPTRMOV R4,AMOV A,R7 ; 查表取出1/8拍周期数,保存到R5MOV DPTR,#S_PARAMOVC A,@A+DPTRMOV R5,ANEXTCYC:ACALL SOUNDDJNZ R5,NEXTCYCRET;============================================================ ===================;=== 发声子程序===SOUND:SETB SPKACALL SDELAYCLR SPKACALL SDELAYRET;============================================================ ===================;=== 延时子程序===SDELAY:MOV A,R4 ; 廷时值在R4内MOV R0,AXL2:MOV R1,#03HDL1:NOPDJNZ R1,DL1DJNZ R0,XL2RET;============================================================ ===================;=== 1/8拍周期表===S_PARA:DS 1DHDB 15H,16H,00DB 19H,00H,1CH,00H,1FH,21H,00H,25HDB 00H,29H,2CH,00H,31H,34H,37H,00HDB 3EH,41H,00H,49H,00H,52H,57H,00HDB 62H;============================================================ ===================;=== 延时参数表===DELAY_T:DS 1DHDB 7EH,77H,00HDB 6AH,00H,5EH,00H,54H,4FH,00H,46HDB 00H,3FH,3BH,00H,35H,32H,2FH,00HDB 2AH,27H,00H,23H,00H,1FH,1DH,0C0HDB 1AHDELY10MS:MOV R6,#10D1: MOV R7,#248DJNZ R7,$DJNZ R6,D1RETINT_T0:MOV TH0,STH0MOV TL0,STL0CPL P1.5RETITABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB 7FH,6FH,77H,7CH,39H,5EH,79H,71HTABLE1: DW 64021,64103,64260,64400DW 64524,64580,64684,64777DW 64820,64898,64968,65030DW 65058,65110,65157,65178;============================================================ ===================;=== 歌曲表===TABLE2:DW 2202H,2902H,2902H,2902H,2906H,2702H ;我从山中来DW 2502H,2702H,2502H,2402H,2208H ;带着兰花草DW 2E02H,2E02H,2E02H,2E02H,2E06H,2C02H ;种在小园中DW 2902H,2C02H,2D02H,2A02H,2908H ;祈祷花开早DW 2902H,2E02H,2E02H,2C02H,2906H,2702H ;一日看三回DW 2502H,2702H,2502H,2402H,2206H,1D02H ;看得花时过DW 1D02H,2502H,2502H,2402H,2206H,2902H ;兰花却依然DW 2702H,2502H,2402H,2002H,2208H ;苞也无一个DW 0000H ;END。

51单片机I love you

51单片机I love you
{ wei=1; // 打开位控制锁存,准备存入数据
P0 = ww[3];// 存入相应的数据(控制到底显示哪一位数码管)
wei=0; // 关闭锁存
duan=1; // 打开段控制锁存,准备存入数据
P0=w[4]; //存入相应的数据(控制这一数码管显示什么数字)
sbit wei=P1^1; //位控制端
sbit duan=P1^0; //段控制端
sbit Leden=P1^2;//LED灯控制端
sbit Line=P1^3;//点阵行控制端
sbit k1=P2^4;
sbit k2=P2^5;
sbit k3=P2^6;
sbit k4=P2^7;
// 按K2,PWM值减小,则占空比增加,LED 灯渐亮。
// 当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警。
//download by
/*********************************************************/
sbit Row=P1^1; //点阵列
sbit LeDen=P1^2;//LED灯控制端
sbit duan=P1^0;//数码管段控制
/***************************************/
/* 主程序 */
duan=0;
while(!k4);
}
}
}
void delay(unsigned int sm)
{
for(i=sm;i>0;i--)
for(j=70;j>0;j--);
}
PWM 控制

88点阵左移并显示单片机程序解析

88点阵左移并显示单片机程序解析

8*8点阵左移并显示I LOVE U动态显示I LOVE U给你们源程序:ORG 00H START:MOV A,#00MOV P0,ACALL DISCALL DELAYJMP STARTDIS: MOV R2,#25MOV 20H,#00D4: MOV R4,#00HMOV R1,#0F5HD5: MOV R6,#08MOV R0,20HD2: CALL READ1INC R4DJNZ R6,D2MOV R4,#00HDJNZ R1,D5MOV 20H,R0DJNZ R2,D4RETREAD1: MOV A,R4MOV P2,AMOV A,R0MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,AINC R0MOV R3,#100DJNZ R3,$MOV A,#00HMOV P0,ARETDELAY: MOV R3,#200D7: MOV R5,#248DJNZ R5,$DJNZ R3,D7RETTABLE:DB 00H,00H,00H,00H,00H,00H,00H,81HDB 00H,00H,00H,00H,00H,00H,81H,0FFHDB 00H,00H,00H,00H,00H,81H,0FFH,81HDB 00H,00H,00H,00H,81H,0FFH,81H,00HDB 00H,00H,00H,81H,0FFH,81H,00H,00HDB 00H,00H,81H,0FFH,81H,00H,00H,00HDB 00H,81H,0FFH,81H,00H,00H,00H,38HDB 81H,0FFH,81H,00H,00H,00H,38H,7CHDB 0FFH,81H,00H,00H,00H,38H,7CH,7EHDB 81H,00H,00H,00H,38H,7CH,7EH,3FHDB 00H,00H,00H,38H,7CH,7EH,3FH,7EHDB 00H,00H,38H,7CH,7EH,3FH,7EH,7CHDB 00H,38H,7CH,7EH,3FH,7EH,7CH,38HDB 38H,7CH,7EH,3FH,7EH,7CH,38H,00HDB 7CH,7EH,3FH,7EH,7CH,38H,00H,00HDB 7EH,3FH,7EH,7CH,38H,00H,00H,00HDB 3FH,7EH,7CH,38H,00H,00H,00H,0FCHDB 7EH,7CH,38H,00H,00H,00H,0FCH,02HDB 7CH,38H,00H,00H,00H,0FCH,02H,01HDB 38H,00H,00H,00H,0FCH,02H,01H,01HDB 00H,00H,00H,0FCH,02H,01H,01H,02HDB 00H,00H,0FCH,02H,01H,01H,02H,0FCHDB 00H,0FCH,02H,01H,01H,02H,0FCH,00HDB 0FCH,02H,01H,01H,02H,0FCH,00H,00HDB 02H,01H,01H,02H,0FCH,00H,00H,00Hend看到总舵主的支持一激动就把电路图上传,驱动电路可以参考:这是硬件接线26课:单片机矩阵式键盘接口技术及程序设计作者:来源:本站原创点击数:2031 更新时间:2007年08月14日在单片机系统中键盘中按钮数量较多时,为了减少I/O口的占用,常常将按钮排列成矩阵形式,如图1所示。

8位动态LED数码管显示实验(精)

8位动态LED数码管显示实验(精)

8位动态LED数码管显示实验(精)8位动态LED数码管显示实验2008-03-18 18:048.1 实物图与原理图本实验仪配置带8位动态扫描显示模块一个。

实物图如下:为减少IO的使用,我们采用串入并出芯片CD4094来扩展了IO 口,即采用3个IO来实现数据的传输。

原理图如下:所以,我们占用3个IO来传输数据,8个IO来进行8个LED数码管的位选。

在本实验仪中链接管教分布如下:STK-----P2.5DAT-----P2.6CLK-----P2.7B0、B1、B2、B3、B4、B5、B6、B7接P0口(P0.0 P0.1 P0.2 P0.3 P0.4 P0.5P0.6 P0.7)由于上一节已经讲述了CD4094驱动一位LED数码管的问题,这里我们讲如何来扫描8位数码管。

8.2 LED动态显示原理根据原理图管脚连接,我们知道P0口控制了8个LED数码管的位选中,所以如果想让8个数码管都亮起来,我们可以逐位扫描8位数码管。

动态显示原理:原理上同一时刻只有一位LED是点亮的,但只要扫描的频率足够高(一般大于25Hz),由于人眼的视觉暂留特性,直观上感觉却是连续点亮的,这就是常说的动态扫描显示。

动态扫描的频率有一定的要求,频率太低,LED将出现闪烁现象。

如频率太高,由于每个LED点亮的时间太短,LED的亮度太低,所以一般均取几个ms左右为宜。

8.3 DG3000 动态显示头文件display_s.h//----------------------------------------------------------//程序作用:显示头文件display_s.h//----------------------------------------------------------#ifndef _display_#define _display_#includesbit SDA=P2^6; //定义显示管脚sbit CLK=P2^7;unsigned char data display_bit;unsigned char codeled[20]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0x 89,0x8C };//定义段码//延时程序void delay(unsigned int k){ unsigned int i,j;for(i=0;i<k;i++)< bdsfid="131" p=""></k;i++)<>for(j=0;j<100;j++);}//数据传输void send(unsigned char a){unsigned char i;for(i=0;i<8;i++){if(_crol_(a,i)&0x80)SDA=1;elseSDA=0;CLK=0;CLK=1;}}//显示程序 8位LED数码管扫描void display(unsigned chardisplay_buffer[8]){unsigned char i,k;display_bit=0xfe;for(i=0;i<8;i++){k=led[display_buffer[i]];send(k);P0=display_bit;delay(0x01);P0=0xff;display_bit=_crol_(display_bit,1);}display_bit=0xfe;8.4 8位数码管动态显示01234567(C51程序)//----------------------------------------------------------//程序作用:动态扫描显示01234567//---------------------------------------------------------- #include#include //调用显示头文件main(){unsigned chara[8]={0x0,0x1,0x2,0x3,0x4,0x5,0x6, 0x7};//显示01234567 while(1){display(a); //显示数据}}。

单片机课程设计-8位8段LED数码管动态显示

单片机课程设计-8位8段LED数码管动态显示

华南理工大学广州汽车学院单片机课程设计题目:8位8段LED数码管动态扫描专业:电子信息工程班级:09电信(1)班姓名:付锦辉学号:2745一、内容要求:在8位8段LED数码管显示“,之后灭显示器200ms;然后显示“WELCOM-1”(由于8位8段LED数码管显示不能显示字母W 和M,所以改为显示“HELLO-93”)二、目的和意义1、掌握数码管动态扫描显示原理及实现方法。

2、掌握动态扫描显示电路驱动程序的编写方法。

三、总体方案设计思路LED数码动态显示的基本做法在于分时轮流选通数码管的公共端,使得各数码管轮流导通,再选通相应的数码管后,即显示字段上得到显示字形码。

这种方式数码管的发光效率,而且由于各个数码管的字段线是并联使用的,从而大大简化了硬件线路。

动态扫描显示接口是单片机系统中应用最为广泛的一种显示方式。

其接口电路是把所有显示器的8个笔画段A-DP同名端并联在一起,而每个显示器的公共极COM各自独立地接受I/O线控制,CPU向字段输出口送出字段形码是,所有显示器由于同名端并连接收到相同的字形码,但究竟是哪个显示器亮,则取决于COM端,而这一端是由I/O控制的,所以就可以自行决定何时显示哪一位了。

而所谓动态扫描是指采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。

再轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上个位显示器并非同时点亮,但只要扫描的速度足够快,给人的影响就是一组稳定的显示数据,不会有闪烁感。

采用总线驱动器74HC245提供LED数码管的段驱动,输出高电平时点亮相应段;采用集电极开路的BCD-十进制译码器/驱动器完成LED数码管位驱动,输出低电平时选通相应位。

P2口每个口线输出灌电流不足以驱动一个数码管显示器的位-公共极,所依通过集电极开路的BCD-十进制译码器/驱动器7445驱动,即节约P2口线,又增加驱动能力。

NIOS II 系列程序

NIOS II 系列程序
类型说明
alt_8有符号8位整数
alt_u8无符号8位整数
alt_16有符号16位整数
alt_u16无符号16位整数
alt_32有符号32位整数
alt_u32无符号32位整数
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTON_PIO_BASE,0xf);
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE,0x0);
中,有以下内容:
#define LED_PIO_TYPE "altera_avalon_pio"
#define LED_PIO_BASE 0x00004000
其中LED_PIO_BASE(IO寄存器地址?)为0x00004000同SOPCBuilder中设置一致!
(其实在SopcBuilder中有关NiosII的配置,就是通过system.h来传送给IDE的!)
data=0x20;
key=IORD(BUTTON_PIO_BASE,0);
if(key==0xe)
data=0x10;
IOWR(LED_GREEN_BASE,0,data);
}
}
/*
IO操作函数
函数原型:IORD(BASE, REGNUM)
输入参数:BASE为寄存器的基地址,REGNUM为寄存器的偏移量
LED_PIO_BASE是在system.h中定义的一个宏,是LED_PIO端口的基地址。
IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,led)的含义就是往LED_PIO端口的数据输出寄存器写入led,
具体可以参考Altera_embeded_peripherals一文,这里讲解了一个PIO端口包含了那些寄存器。参考NiosII_software_developer's_handbook进行驱动设计。这两个文件可以在Altera的官方网站上下载。

单片机课程设计-8位8段LED数码管动态扫描显示

单片机课程设计-8位8段LED数码管动态扫描显示

华南理工大学广州汽车学院单片机课程设计题目:8位8段LED数码管动态扫描专业:电子信息工程班级:09电信(1)班姓名:付锦辉学号:200930062745一、内容要求:在8位8段LED数码管显示“8.8.8.8.8.8.8.8.”持续500ms,之后灭显示器200ms;然后显示“WELCOM-1”(由于8位8段LED数码管显示不能显示字母W 和M,所以改为显示“HELLO-93”)二、目的和意义1、掌握数码管动态扫描显示原理及实现方法。

2、掌握动态扫描显示电路驱动程序的编写方法。

三、总体方案设计思路LED数码动态显示的基本做法在于分时轮流选通数码管的公共端,使得各数码管轮流导通,再选通相应的数码管后,即显示字段上得到显示字形码。

这种方式数码管的发光效率,而且由于各个数码管的字段线是并联使用的,从而大大简化了硬件线路。

动态扫描显示接口是单片机系统中应用最为广泛的一种显示方式。

其接口电路是把所有显示器的8个笔画段A-DP同名端并联在一起,而每个显示器的公共极COM各自独立地接受I/O线控制,CPU向字段输出口送出字段形码是,所有显示器由于同名端并连接收到相同的字形码,但究竟是哪个显示器亮,则取决于COM端,而这一端是由I/O控制的,所以就可以自行决定何时显示哪一位了。

而所谓动态扫描是指采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。

再轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上个位显示器并非同时点亮,但只要扫描的速度足够快,给人的影响就是一组稳定的显示数据,不会有闪烁感。

采用总线驱动器74HC245提供LED数码管的段驱动,输出高电平时点亮相应段;采用集电极开路的BCD-十进制译码器/驱动器完成LED数码管位驱动,输出低电平时选通相应位。

P2口每个口线输出灌电流不足以驱动一个数码管显示器的位-公共极,所依通过集电极开路的BCD-十进制译码器/驱动器7445驱动,即节约P2口线,又增加驱动能力。

51单片机项目教程项目 18 8乘8点阵显示爱心

51单片机项目教程项目 18 8乘8点阵显示爱心

(4)扫描界限寄存器(地址0BH):该寄存器中D0~D3 位数据 设定值为0~7H,设定值表示显示器动态扫描个数位1~8。
(5)停机寄存器(地址0CH):当D0=0 时,MAX721 处于停机 状态;当D0=1 时,处于正常工作状态。 (6)显示测试寄存器(地址0FH):当D0=0时,MAX7219 按设 定模式正常工作;D0=1 时,处于测试状态。在该状态下,不管 MAX7219 处于什么模式,全部LED 将按最大亮度显示。
MAX7219介绍 MAX7219/MAX7221是一种集成化的串行输入/输出共阴极显示驱 动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接 条线图显示器或者64个独立的LED。其上包括一个片上的B型BCD 编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态 RAM用来存储每一个数据。只有一个外部寄存器用来设置各个 LED的段电流。 MAX7219和单片计算机连接有三条引线(DIN、CLK、 LOAD)采用16位数据串行移位接收方式。即单片机将16位二进制 数逐位发送到DIN端,在CLK上升沿到来前准备就绪,CLK的每个上 升沿将一位数据移入MAX7219内移位寄存器,当16位数据移入 完,在LOAD引脚信号上升沿将16位数据装入MAX7219内的相应 位置,MAX7219内部硬件动态扫描显示控制电路作用下实现动态 显示。
可寻址的数据寄存器和控制寄存器 (1)内部RAM 地址01~08H 分别对应于DIG0~DIG7。 (2)译码方式寄存器(地址09H):该寄存器的8 位二进制数的 各位分别控制8 个LED 显示器的译码方式。当高电平时,选择 BCD-B 译码模式,当低电平时选择不译码模式(即送来数据为字 型码)。 (3)亮度寄存器(地址0AH):亮度可以用硬件和软件两种方法 调节。亮度寄存器中的D0~D3位可以控制LED 显示器的亮度。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit A_138=P1^0;
sbit B_138=P1^1;
sbit C_138=P1^2;
void Delay_ms(uint xms); //延迟函数
void main() //主函数
{
while(1)
{
A_138=0;
B_138=0;
C_138=0; //定义第一个数码管
P2=0x06; //第一个数码管亮1
Delay_ms(1); //数码管延时1秒
A_138=1;
B_138=0;
C_138=0; //定义第二个数码管P2=0x06; //第一个数码管亮1 Delay_ms(1); //数码管延时1秒
A_138=0;
B_138=1;
C_138=0; //定义第三个数码管P2=0x3f; //第一个数码管亮0 Delay_ms(1); //数码管延时1秒
A_138=1;
B_138=1;
C_138=0; //定义第四个数码管P2=0x3e; //第一个数码管亮U Delay_ms(1); //数码管延时1秒
A_138=0;
B_138=0;
C_138=1; //定义第五个数码管P2=0x79; //第一个数码管亮E
Delay_ms(1); //数码管延时1秒
A_138=1;
B_138=0;
C_138=1; //定义第六个数码管
P2=0x6e; //第一个数码管亮Y
Delay_ms(1); //数码管延时1秒
A_138=0;
B_138=1;
C_138=1; //定义第七个数码管
P2=0x3f; //第一个数码管亮0
Delay_ms(1); //数码管延时1秒
A_138=1;
B_138=1;
C_138=1; //定义第八个数码管
P2=0x3e; //第一个数码管亮U
Delay_ms(1); //数码管延时1秒}
}
void Delay_ms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--); }。

相关文档
最新文档