6位数码管显示

合集下载

6脚数码管驱动原理

6脚数码管驱动原理

6脚数码管驱动原理
6脚数码管是一种常见的数字显示器件,它由6个LED灯组成,可以显示0~9的数字以及一些字母和符号。

在实际应用中,我们需要通过驱动电路来控制6脚数码管的显示。

6脚数码管的驱动原理是基于多路复用的思想。

它的6个引脚分别为VCC、GND、A、B、C、D,其中VCC和GND分别为正负电源,A、B、C、D则是控制LED灯亮灭的引脚。

当我们需要显示一个数字时,我们需要将对应的A、B、C、D引脚接通,其他引脚则断开。

例如,要显示数字1,我们需要将A和B引脚接通,C和D引脚断开。

为了实现数字的连续显示,我们需要通过多路复用的方式来控制6脚数码管的显示。

具体来说,我们可以使用一个计数器来不断地改变要显示的数字,然后通过一个多路选择器来选择要显示的数字对应的引脚。

例如,当计数器的值为0时,我们需要将A、B、C、D 引脚接通,其他引脚断开;当计数器的值为1时,我们需要将B、C 引脚接通,其他引脚断开,以此类推。

在实际应用中,我们可以使用数字集成电路来实现6脚数码管的驱动。

例如,常用的CD4511芯片就是一种数字译码器,它可以将二进制数码转换为对应的7段LED显示信号。

我们只需要将CD4511芯片的输出引脚连接到6脚数码管的A、B、C、D引脚上,就可以实现数字的显示。

6脚数码管的驱动原理是基于多路复用的思想,通过控制不同的引脚来显示不同的数字。

在实际应用中,我们可以使用数字集成电路来实现6脚数码管的驱动,从而实现数字的连续显示。

6位7段LED数码管显示实验

6位7段LED数码管显示实验

6位7段LED数码管显示实验【实验要求】1)初始化时,使6位LED均显示8,显示时间为1s。

2)从第一个LED开始,从0显示到9,0.5s刷新一次。

直到最后一个LED。

【实验目的】1)熟悉并进一步掌握定时器中断的使用和时基信号的使用。

2)进一步巩固I/O口的使用方法。

3)了解6位7段LED数码管的使用。

【实验设备】1)装有u’nsp IDE仿真环境的PC机一台。

2)μ’nSP?十六位单片机实验箱一个。

【实验原理】通过对I/O口的控制,初始化时点亮所有的数码管,即6位LED数码管均显示8。

1s 后,从第一位数码管开始从0显示到9,刷新时间为0.5s。

直到最后一个数码管。

1s的时间使用定时器A (FIQ);0.5s的时间使用2HZ的时基信号(IRQ5)。

【硬件连接图】A0—A6 接A---G A8—A13 接CS1—CS6 B0—B7 接KEY【实验步骤】⑴按硬件电路原理图进行连接。

⑵画程序流程图。

⑶编写程序。

⑷调试程序。

⑸结合硬件调试,实现最终功能。

【主程序流程图】广告灯设计(利用取表方式)桂林电子工业学院孙安青1.实验任务利用取表的方法,使端口P1做单一灯的变化:左移2次,右移2次,闪烁2次(延时的时间0.2秒)。

2.电路原理图3.系统板上硬件连线把“单片机系统”区域中的P1.0-P1.7用8芯排线连接到“八路发光二极管指示模块”区域中的L 1-L8端口上,要求:P1.0对应着L1,P1.1对应着L2,……,P1.7对应着L8。

4.程序设计内容在用表格进行程序设计的时候,要用以下的指令来完成(1).利用MOV DPTR,#DATA16的指令来使数据指针寄存器指到表的开头。

(2).利用MOVC A,@A+DPTR的指令,根据累加器的值再加上DPTR的值,就可以使程序计数器PC指到表格内所要取出的数据。

因此,只要把控制码建成一个表,而利用MOVC工,@A+DPTR做取码的操作,就可方便地处理一些复杂的控制动作,取表过程如下图所示:5.6.汇编源程序ORG 0START: MOV DPTR,#TABLE LOOP: CLR AMOVC A,@A+DPTRCJNE A,#01H,LOOP1JMP STARTLOOP1: MOV P1,AMOV R3,#20LCALL DELAYINC DPTRJMP LOOPDELAY: MOV R4,#20D1: MOV R5,#248DJNZ R5,$DJNZ R4,D1DJNZ R3,DELAYRETTABLE: DB 0FEH,0FDH,0FBH,0F7H DB 0EFH,0DFH,0BFH,07FHDB 0FEH,0FDH,0FBH,0F7HDB 0EFH,0DFH,0BFH,07FHDB 07FH,0BFH,0DFH,0EFHDB 0F7H,0FBH,0FDH,0FEH DB 07FH,0BFH,0DFH,0EFH DB 0F7H,0FBH,0FDH,0FEH DB 00H, 0FFH,00H, 0FFH DB 01HEND。

6位数码管轮流显示0~9

6位数码管轮流显示0~9

(亲,就一分,别用软件下载吧,都是纯手打,自己的作业啊,完全使用于慧净单片机其他单片机开发板只需改改就好了)6位数码管轮流显示0~9MOV P0,#00H ;p0初始输出低电平MOV P2,#00H ;p2初始输出低电平CPL P2.3 ;关闭蜂鸣器MOV B,#0FEH ;数码管选择数BCPL P2.7 ;p2.7引脚取反,变高电位,使锁存器2有效,可以开始选择MOV P0,B ;选择数码管1CPL P2.7 ;锁存器锁存,保持选择数码管1CPL P2.6 ;p2.6引脚取反,变高电位,使锁存器1有效MOV R3,#00H ;数码管计数位R3MOV DPTR,#TAB ;MAIN: MOV R2,#00H ;显示数据位R2DSUP:MOV A,R2 ;查表输出R2MOVC A,@A+DPTR ;MOV P0,A ;PUSH ACC ;ACC入栈保存LCALL DELAY ;延时INC R2 ;R2加1INC R3 ;计数位R3加1CPL P2.6 ;p2.6引脚取反,变低电位,使锁存器1无效MOV A,B ;B的值给ARL A ;A左移MOV B,A ;左移后的A值给B,即B左移一位CPL P2.7 ;MOV P0,A ;选择下一位数码管CPL P2.7 ;保持选择POP ACC ;ACC出栈CPL P2.6 ;p2.6引脚取反,变高电位,使锁存器1有效CJNE R3,#06H,NEXT ;R3等于6时顺序执行;不等于6时,执行NEXT;执行6次输出后MOV B,#0FEH ;B复原MOV R3,#00H ;R3复位CPL P2.6CPL P2.7MOV P0,B ;重新选择第一个数码管CPL P2.7CPL P2.6NEXT:CJNE R2,#0AH,DSUP ;输出数据次数R2等于10时,顺序执行;否则返回DSUP LCALL MAINDELAY: M OV R7,#200MOV R6,#10D1: MOV R5,#200D2: DJNZ R5,D2DJNZ R7,D1DJNZ R6,D1RETTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND。

6位7段LED数码管显示.

6位7段LED数码管显示.

目录1. 设计目的与要求..................................................... - 1 -1.1 设计目的...................................................... - 1 -1.2 设计环境...................................................... - 1 -1.3 设计要求...................................................... - 1 -2. 设计的方案与基本原理............................................... - 2 -2.1 6 位 8 段数码管工作原理....................................... - 2 -2.2 实验箱上 SPCE061A控制 6 位 8 段数码管的显示................... - 3 -2.3 动态显示原理.................................................. - 4 -2.4 unSP IDE2.0.0 简介............................................ - 6 -2.5 系统硬件连接.................................................. - 7 -3. 程序设计........................................................... - 8 -3.1主程序......................................................... - 8 -3.2 中断服务程序.................................................. - 9 -4.调试............................................................... - 12 -4.1 实验步骤..................................................... - 12 -4.2 调试结果..................................................... - 12 -5.总结............................................................... - 14 -6.参考资料........................................................... - 15 - 附录设计程序汇总.................................................... - 16 -1.设计目的与要求1.1 设计目的1. 了解 6 位 7 段 LED数码管的工作原理。

矩阵键盘显示,六位数码管滚动显示

矩阵键盘显示,六位数码管滚动显示

南京邮电大学课程设计报告设计类别: EDA-VHDL专业名称: 通信工程班级学号: B09010504 学生姓名: 张嫣艳基本题 : 矩阵键盘按键的数码管显示综合题 : 数码管学号滚动显示同小组成员:学号:B09010502姓名:沈沁芳指导教师: 王奇、梅中辉、周晓燕、孔凡坤日期:2012年3月5日—3月30日目录一矩阵键盘按键的数码管显示1.实验目的--------------------------------------------------------------------- 3 2.实验所用仪器及元器件----------------------------------------------------3 3.实验任务要求----------------------------------------------------------------34. 设计思路-----------------------------------------------------------------------35. 模块分析-----------------------------------------------------------------------36. 逻辑仿真图及功能分析-----------------------------------------------------47. 调试过程与问题--------------------------------------------------------------88. 实验总结-----------------------------------------------------------------------89. 附录(VHDL源程序)-----------------------------------------------------8二数码管学号滚动显示1.实验目的----------------------------------------------------------------------12 2.实验所用仪器及元器件----------------------------------------------------12 3.实验任务要求----------------------------------------------------------------134. 设计思路----------------------------------------------------------------------135. 模块分析----------------------------------------------------------------------136. 逻辑仿真图及功能分析----------------------------------------------------167. 调试过程与问题-------------------------------------------------------------188. 实验总结----------------------------------------------------------------------189. 附录(VHDL源程序)----------------------------------------------------18一矩阵键盘按键的数码管显示1.实验目的(1).使学生全面了解如何应用该硬件描述语言进行高速集成电路设计;(2).通过软件设计环节与仿真环节使学生熟悉Quartus II设计与仿真环境;(3).通过对基本题、综合题的设计实践,使学生掌握硬件系统设计方法(自底向上或自顶向下),熟悉VHDL语言三种设计风格,熟悉其芯片硬件实现的过程。

六位数码管显示时分秒

六位数码管显示时分秒

六位数码管显示时分秒,通过四个按键进行时间的控制。

按下"调时"按键,时间显示停止;按下"选择时分秒"按键,数码管上方的发光二极管会点亮,对应着选中的要修改的时间是小时、分钟还是秒;按下"按下增加"按键,选中的时间将会增加;按下"完成"按键,时间继续显示。

已通过proteus仿真,电路图如下所示,希望大家多多指点,积极留言://编程:jumpmysoul#include<reg51.h>#define ulong unsigned longchar tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管数字码char tab_dp[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x70,0x10};//共阳数码管数字码(带小数点)#define LED P0 //P0为数码管的段选#define LIGHT P1 //P1为时分秒位的指示灯#define WS P2 //P2为数码管的位选sbit time_change=P3^0; //P3^0为“调时”按键sbit time_choose=P3^1; //P3^1为“选择时分秒”按键sbit time_inc=P3^2; //P3^2为“增加”按键sbit time_ok=P3^3; //P3^3为“完成”按键ulong t;ulong sec,min,hour,sec_ge,sec_shi,min_ge,min_shi,hour_ge,hour_shi; //定义秒,分,时,秒的个位,十位,分的个位,十位,时的个位,十位int choose_n; //按下“选择时分秒”按键的次数0 1160 160 1241141231 116021603124。

秒表-六位数码管有效显示

秒表-六位数码管有效显示

∙/************************************************************************** ∙* 标题: 秒表-六位数码管有效显示(C51)∙* 作者: wentao ∙ ∙* 日期: 2007.3.3∙* 软件: Keil C51 V8.02∙* 芯片: AT89X51∙* 说明: 实验板实测通过,数码管为8位共阳∙* 声明: 自用存档!另仅供需要的朋友参考,请勿用做不道德转载及商业用途!∙**************************************************************************/∙∙#include <reg51.h>∙#include <intrins.h>∙#define uchar unsigned char∙∙void delay_ms(uchar ms); // 延时毫秒@12M,ms最大值255∙void key_scan(); // 按键扫描∙void key_to(); // 按键处理∙∙uchar code dis_code[11] = {0xc0,0xf9,0xa4,0xb0,0x99, //段码表∙// 0 1 2 3 4 对应内容∙ 0x92,0x82,0xf8,0x80,0x90,0xbf};∙// 5 6 7 8 9 -∙∙uchar data dis[8]; // dis[0]为百分之一秒值,dis[1]为十分之一秒值∙// dis[2],dis[5]为'-'段码的偏移量∙// dis[3]为秒个位值,dis[4]为秒十位值∙// dis[6]为分个位值,dis[7]为分十位值∙∙uchar data dot = 0; // 百分之一秒计数器(0.00s-0.99s)∙uchar data sec = 0; // 秒计数器(00s-59s)∙uchar data min = 0; // 分计数器(00m-99m)∙∙uchar data dis_b; // dis_b为位码选通数码管∙uchar data dis_r; // dis_r为取段码时的偏移量∙∙uchar data key_t = 0; // 按键次数,初始为0∙∙sbit K = P1^4; // K键与P1.4相连∙∙void main()∙ {∙P2 = 0xff; // 关所有数码管∙P1 = 0xff; // p1为准双向口,作输入时先写1∙ dis[2] = 10; // '-'在段码表中偏移量为10∙ dis[5] = 10; // '-'在段码表中偏移量为10∙ dis_b = 0x7f; // 初始选通P2.7口数码管∙ dis_r = 0; // 初始化偏移量为0∙∙TMOD = 0x11; // 定时/计数器0,1工作于方式1∙TH0 = 0xd8; // 预置定时常数55536(d8f0),产生10ms时基信号∙TL0 = 0xf0;∙TH1 = 0xfc; // 预置定时常数64536(fc18),产生1ms间隔用于动态显示∙TH1 = 0x18;∙EA = 1; // 开总中断∙ET0 = 1; // 定时/计数器0允许中断∙ET1 = 1; // 定时/计数器1允许中断∙TR0 = 0; // 关闭定时/计数器0∙TR1 = 1; // 启动定时/计数器1∙while(1)∙ {∙if(K != 1) // 有键按下∙ {∙ delay_ms(10); // 延时10ms去抖∙if(K != 1) // 确定是有键按下∙ {∙while(K != 1); // 等待键松开∙ key_to(); // 按键处理∙ }∙ }∙ }∙ }∙void key_to() // 按键处理子程序∙ {∙ key_t++; // 按键次数加1∙if(key_t == 1) // 第一次按下∙TR0 = 1; // 启动定时器0∙else∙ {∙if(key_t == 2) // 第二次按下∙TR0 = 0; // 关闭定时器0∙else∙ {∙if(key_t == 3) // 第三次按下∙ {∙ dot = 0; // 三个计数器清零∙ sec = 0;∙ min = 0;∙ key_t = 0; // 按键次数清零∙ }∙ }∙ }∙∙ }∙void tiem0(void) interrupt 1 // T/C0中断服务程序(产生10ms时基信号)∙ {∙ dot++; // 百分之一秒计数器加1∙if(dot == 100) // 计数值到100∙ {∙ dot = 0; // 清零∙ sec++; // 秒计数器加1(进位10ms*100=1s)∙if(sec == 60) // 秒计数值到60∙ {∙ sec = 0; // 秒计数器清零∙ min++; // 分计数器加1(进位60s=1m)∙if(min == 100) // 分计数到100∙ min = 0; // 分计数器清零∙ }∙ }∙TH0 = 0xd8; // 重置定时常数∙TL0 = 0xf0;∙ }∙void time1(void) interrupt 3 // T/C1中断服务程序(延时1ms数码管动态显示) ∙ {∙ dis[0] = dot % 10; // 百分之一秒计数器个位分离出来赋绐dis[0]∙ dis[1] = dot / 10; // 百分之一秒计数器十位分离出来赋绐dis[1]∙ dis[3] = sec % 10; // 秒计数器个位赋绐dis[3]∙ dis[4] = sec / 10; // 秒计数器十位赋绐dis[4]∙ dis[6] = min % 10; // 分计数器个位赋绐dis[6]∙ dis[7] = min / 10; // 分计数器十位赋绐dis[7]∙∙P0 = dis_code[dis[dis_r]]; // 段码送P0口(dis[0]...dis[7])∙P2 = dis_b; // 位码送P2口∙∙ dis_r++; // 偏移量加1,下次中断时显示下个数∙ dis_r &= 0x07; // dis_r增到8时自动清0(使之在0到7间循环) ∙∙ dis_b = _cror_(dis_b,1); // 位码循环右移,下次中断时选通下个数码管∙∙TH1 = 0xfc; // 重置定时常数∙TL1 = 0x18;∙∙ }∙void delay_ms(uchar ms) // 延时毫秒@12M,ms最大值255 ∙ {∙uchar i;∙while(ms--)∙for(i = 0; i < 124; i++);∙ }。

用六位数码管动态显示计数器的计数结果

用六位数码管动态显示计数器的计数结果

北华航天工业学院《EDA技术综合设计》课程设计报告重写报告题目:用六位数码管动态显示计数器的计数结果作者所在系部:电子工程系作者所在专业:自动化作者所在班级:B08221班 03号作者姓名:肖茂林指导教师姓名:崔瑞雪完成时间:2010年12月1日课程设计任务书课题名称用六位数码管动态显示计数器的计数结果完成时间2010年11月30日指导教师崔瑞雪职称教授学生姓名肖茂林班级B08221总体设计要求和技术要点①总体设计要求:设计一个能在7段数码管上动态刷新显示十进制、十二进制、六十进制、四位二进制计数器计数结果的VHDL语言程序并在EDA实验开发系统上实现该功能。

②技术要点:VHDL语言编辑程序、共阴7段数码管及FPGA可编程芯片的工作原理与连线。

工作内容及时间进度安排2010年11月18日—28日编辑VHDL语言程序2010年11月29日在教二实验室调试程序2010年11月30日在实验室答辩验收课程设计成果1.与设计内容对应的软件程序2.课程设计报告书3.成果使用说明书4.设计工作量要求内容摘要用VHDL语言在MAX+PLUS2环境下设计一个带使能输入、进位输出及同步清零的十进制计数器。

设计一个带使能输入及同步清零的十二进制计数器。

设计一个带使能输入及同步清零的六十进制加法计数器。

设计一个四位二进制可逆计数器。

设计一个共阴7段数码管控制接口,在时钟信号的控制下,使六位数码管动态刷新显示上述计数器的计数结果。

最后在EDA实验开发系统实验操作。

关键词计数器、EDA实验开发系统、动态显示目录一、课程设计要求 (1)二、题目分析 (1)三、设计思路 (1)四、VHDL语言程序设计 (2)五、顶层文件截图 (7)六、在EDA实验开发系统上的功能实现 (8)七、实验总结 (8)八、参考文献 (8)一、课程设计要求用VHDL语言在MAX+PLUS2环境下设计一个带使能输入、进位输出及同步清零的十进制计数器。

设计一个带使能输入及同步清零的十二进制计数器。

单片机6个数码管上显示时分秒

单片机6个数码管上显示时分秒

//6个数码管上依次显示时、分、秒,//按下S2一次,停止计时,按下S2两次,开始计时;//停止计时后,按下S3一次,小时数加1;//停止计时后,按下S4一次,分钟数加1;//停止计时后,按下S5一次,秒数加1#include<reg52.h>//头文件#define uint unsigned int#define uchar unsigned char //宏定义sbit wela=P2^7;sbit dula=P2^6;//数码管锁存位声明sbit s2=P3^4;sbit s3=P3^5;sbit s4=P3^6;sbit s5=P3^7;//独立按键位声明uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9段码uchar code table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//位码uint num=0,num1,num2;//全局变量uchar shi,fen,miao;void delay(uint);void display(uchar,uchar);void keyscan();void main(){TMOD=0x01;TH0=(65536-50000)/256;//赋初值TL0=(65536-50000)%256;EA=1;//中断使能ET0=1;TR0=1;while(1){shi=num/3600;fen=num%3600/60;miao=num%60;if(shi==13)num=num%3600;if(fen==60)num=num/3600*3600+num%60;if(miao==60)num=num/60*60;keyscan();//按键if(num2==0){display(shi,0);//显示display(fen,2);display(miao,4);}else{switch(num2){case 1:display(shi,0);display(fen,2);display(miao,4);break;case 2:display(shi,0);break;case 3:display(fen,2);break;case 4:display(miao,4);break;}}}}void delay(uint x){uint i,j;//局部变量for(i=0;i<x;i++)for(j=0;j<110;j++);//延时子函数}void display(uchar disnum,uchar weinum){uchar sh,ge;sh=disnum/10;ge=disnum%10;P0=0xff;wela=1;wela=0;P0=table[sh];dula=1;dula=0;P0=table1[weinum];wela=1;wela=0;delay(2);//十位显示P0=0xff;wela=1;wela=0;P0=table[ge];dula=1;dula=0;P0=table1[weinum+1];wela=1;wela=0;delay(2);//个位显示*/}void keyscan(){if(s2==0){delay(15);//消抖if(s2==0){TR0=0;num2++;while(!s2);//松手检测if(num2==5){num2=0;TR0=1;}}}if(num2!=0){if(s3==0){delay(5);if(s3==0){while(!s3);num=num+3600;}}if(s4==0){delay(5);if(s4==0){num=num+60;while(!s4);}}if(s5==0){delay(5);if(s5==0){num++;while(!s5);}}}}void time0() interrupt 1{TH0=(65536-50000)/256;//赋初值TL0=(65536-50000)%256;num1++;if(num1==20){num1=0;num++;//if(num==43200)//num=0;}}。

6位7段数码管数字字符显示电路

6位7段数码管数字字符显示电路

图3 接着用同样的方法依次将各元件添加至对象选 择器窗口,最后,对象选择器窗口如图 4 所示:
图4
4.画出 6 位 7 段数码管数字字符显示电路,如图 5 所示:
图5 5.建立网络表 6.电器检测
7.存盘及输出报表:如果实际原理图没有保存,应将其保存。保存后,执行菜单命令 Tools→Bill of Materials,在其子菜单 HTML Output、ASCII Outout、Compact CSV Output 和 Full CSV output 中选 择一项,生成 BOM 文档。 8.启动 Keil u Vision2 并建立项目: (1)选择 Project→New Project 命令,弹出创建项目对话框。选择需要保存的目录并输入项目的名 称,例如 XDX. (2)单击保存按钮,此时弹出选择 CPU 类型对话框。选择好本项目所使用的单片机型号。如图 6 所示:
图8 10.将 XDX.hex 文件加载到单片机中执行: 双击图 5 中的单片机 AT89c51,在 Program file 中导入 XDX.hex 文件。如图 9 所示:
图9 运行该文件出现如下结果,如图 10 所示:
图 10 三、 实验小结: 通过这次试验让我对 Proteus 7.5 ISIS 软件和 Keil u Vision2 软件有了初步的认识和了解。 并学会使用这两种软件进行仿真实验。同时也让我体会到了 Proteus ISIS 虚拟仿真技术真正实 现了在实物出来之前对单片机应用系统进行设计和测试。并且它与 Keil u Vision2 配合使用,可 在不需要硬件投入的情况下,完成单片机应用系统的仿真开发,不仅缩短了实际系统的研发周期, 降低开发成本。让我深深的感受到了 Proteus 7.5 ISIS 软件和 Keil u Vision2 软件的好处和 优点。

(完整word版)六位LED八段数码管显示

(完整word版)六位LED八段数码管显示

八段数码管显示1. 实验目的:(1)了解数码管动态显示的原理。

⑵了解74LS164扩展端口的方法。

2. 实验内容:利用实验仪提供的显示电路,动态显示一行数据3. 实验线路:PB0数据输入PBi时钟输入说明:这里只是显示草图,详细原理参见"8155接口实验"4. 实验器材:(1)QTH200下载式综合实验仪1台(2)QTH2008仿真器1台(3)计算机1台5. 实验说明:(1)本实验仪提供了8段码LED显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。

显示共有6位,用动态方式显示。

8段码是由8155 的PB0PB1经74LS164”串转并”后输出得到。

6位位码由8155(或8255)的PA0-5 口输出,经UA2003反向驱动后,选择相应显示位。

74LS164是串行输入并行输出转换电路,串行输入的数据位由8155的PB0控制,时钟位由8155的PB1控制输出。

写程序时,只要向数据位地址输出数据,然后向时钟位地址输出一高一低两个电平就可以将数据位置到74LS164中,并且实现移位。

向显示位选通地址输出高电平就可以点亮相应的显示位。

本实验仪中数据位输出地址为0e102H,时钟位输出地址为0e102H,位选通输出地址为0e101H本实验涉及到了8155 I0/RAM扩展芯片的工作原理以及74LS164器件的工作原理。

(2)七段数码管的字型代码表如下表:显示字g f e d c b a 段码形0 0 1 1 1 1 1 1 3fh1 0 0 0 0 1 1 0 06h2 1 0 1 1 0 r 1 1 5bh3 1 0 0 1 1 1 1 4fh4 1 1 0 0 1 1 0 66h5 1 1 0 1 1 「° 1 6dh6 1 1 1 1 1 0 1 7dh7 0 0 0 0 1 1 1 07h8 1 1 1 1 1 r 1 1 7fh9 1 1 0 1 1 1 1 6fhA 1 1 1 0 1 1 1 77h b 1 1 1 1 1 :0 0 7ch C 0 1 1 1 0 0 1 39h d 1 0 1 1 1 1 0 5ehE 1 1 1 1 0 「0 1 79hF 1 1 1 0 0 0 1 71h6 •程序框图:开始示参数输出位选通信号董所有位显示延时取显示教据位选適信号移位I7.参考程序(SY10.ASM):OUTBIT equ 0e101h ;位控制口CLK164 equ 0e102h ;段控制口(接164 时钟位)DAT164 equ 0e102h ;段控制口(接164 数据位) IN equ 0e103h ; 键盘读入口LEDBuf equ 60h ; 显示缓冲Num equ 70h ;显示的数据DelayT equ 75horg 0000hIjmp StartLEDMAP:;八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07hdb 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hDelay:; 延时子程序mov r7, #0DelayLoop:djnz r7, DelayLoopdjnz r6, DelayLoop ret DisplayLED: mov r0, #LEDBuf mov r1, #6 ; 共6 个八段管mov r2, #00100000b ; 从左边开始显示Loop: mov dptr, #OUTBIT mov a, #00h movx @dptr, a ; 关所有八段管mov a, @r0 mov B, #8 ; 送164 DLP: rlc a mov r3,a mov acc.0, c ANL A, #0FDH mov dptr, #DAT164 movx @dptr, a mov dptr,#CLK164 orl a,#02h movx @dptr, a anl a,#0fDh movx @dptr, a mov a, r3 djnz B, DLP mov dptr, #OUTBIT mov a, r2 movx @dptr, a ; 显示一位八段管mov r6, #1 call Delay mov a, r2 ; 显示下一位rr a mov r2, a inc r0 djnz r1, Loop mov dptr, #OUTBIT mov a, #0 movx @dptr, a ; 关所有八段管retStart: mov dptr,#0e100h mov a,#03h movx @dptr,a mov sp, #40hmov Num, #0MLoop:inc Nummov a, Nummov b, amov r0, #LEDBufFillBuf:mov a, banl a, #0fhmov dptr, #LEDMapmovc a, @a+dptr ; 数字转换成显示码mov @r0,a ; 显示在码填入显示缓冲inc r0 inc bcjne r0, #LEDBuf+6, FillBufmov DelayT,#30DispAgain:call DisplayLED ; 显示djnz DelayT,DispAgainljmp MLoopEND八位数码管显示:8155 控制参考程序2:对8155 初始化,使I/O 口控制LED 的显示情况。

实验二(六位数码管动态显示实验)

实验二(六位数码管动态显示实验)

实验二: 6位数码管动态显示器实验一、实验目的a)在实践中加深理解数码管的内部结构和特点以及使用方法;b)熟悉数码管动态显示实验电路的工作原理;c)理解和掌握数码显示字符的编程方法;d)掌握用数码管显示字符代码的计算方法。

二、实验器材a)一台PC机b)一套MPLAB-IDE和Proteus仿真教学系统三、实验原理a)硬件原理图b)电路功能:把要显示的数据5,4,3,2,1,0先放入以DISHC单元开始的显示缓冲区,然后取出送数码管动态显示。

c)软件设计思路与参考程序清单程序设计流程图如下:参考程序如下:/**************************************************************实现的功能:使数码管从左到右各显示0-5芯片PIC16F877XT:4MHZ***************************************************************/#include <pic.h> //包含单片机内部资源预定义//定义数组display_numb[10],用于存放数字0~9的段码unsigned char display_numb[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};// 0 , 1 2 3 4 5 6 7 8 9//定义数组display_data[6],用于存放显示的数字,0:L 5:Runsigned char display_data[6];unsigned char y=0x00;/**************************************************************端口初始化PORTD作为数码管段驱动(高有效)PORTE作为数码管位选择驱动(低有效)***************************************************************/void init_port(void){PORTD=0x00; //D口输出低电平TRISD=0; //D口当作数码管段,设置成输出ADCON1=0x07; //使A口,E口全为数字I/O口TRISE=0; //A口当作数码管位选择控制脚,设置成输出PORTE=0x00; //E口输出低电平}/**************************************************************1毫秒延迟程序程序***************************************************************/void delay_1ms(void){unsigned int n;for(n=0;n<50;n++){NOP();}}/**************************************************************若干毫秒延迟程序程序***************************************************************/void delay_ms(unsigned int time){for(;time>0;time--){delay_1ms();}}/**************************************************************主程序从左到右显示0-5***************************************************************/void main(void){unsigned char n; //定义变量ninit_port(); //端口初始化display_data[0]=display_numb[0]; //将“0”的段码送入display_data[0]display_data[1]=display_numb[1]; //将“1”的段码送入display_data[1]display_data[2]=display_numb[2]; //将“2”的段码送入display_data[2]display_data[3]=display_numb[3]; //将“3”的段码送入display_data[3]display_data[4]=display_numb[4]; //将“4”的段码送入display_data[4]display_data[5]=display_numb[5]; //将“5”的段码送入display_data[5]while(1){PORTE=0x00;for(n=0;n<=5;n++){PORTD=display_data[n];delay_ms(5);PORTE++;}}}四、实验步骤a)建立PICC 工程项目b)建立一个C语言源程序c)把C语言源程序添加到项目中d)编辑和编译C语言程序e)画出硬件仿真电路图f)运行Proteus仿真软件,将目标代码加入到单片机中g)用Proteus软件仿真,观察数码管显示状态五、实验思考题(写实验报告)a)总结动态数码显示的工作原理并与静态数码显示相比较。

基于单片机的电子时钟6位LED数码管显示

基于单片机的电子时钟6位LED数码管显示

数码管显示电子时钟设计一•功能要求1•数字电子时钟最主要是LED数码管显示功能,以24小时为一个周期,显示时间时、分、秒。

2.具有校时功能,可以对时、进行单独校对,使其校正到标准时间。

二•方案论证1.数字时钟方案数字时钟是本设计的最主要的部分。

根据需要,可利用两种方案实现。

方案一:本方案采用Dallas公司的专用时钟芯片DS12887A O该芯片部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。

为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片部包含锂电池。

当电网电压不足或突然掉电时,系统自动转换到部锂电池供电系统。

而且即使系统不上电, 程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。

方案二:本方案完全用软件实现数字时钟。

原理为:在单片机部存储器设三个字节分别存放时钟的时、分、秒信息。

利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。

该方案具有硬件电路简单的特点。

但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。

而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。

基于硬件电路的考虑,本设计采用方案二完成数字时钟的功能。

2.数码管显示方案方案一:静态显示。

所谓靜态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。

该方式每一位都需要一个8位输出口控制。

静态显示时较小的电流能获得较高的亮度,且字符不闪烁。

但当所显示的位数较多时,静态显示所需的I/O 口太多,造成了资源的浪费。

方案二:动态显示。

所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。

利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。

基于单片机的电子时钟6位LED数码管显示

基于单片机的电子时钟6位LED数码管显示

数码管显示电子时钟设计一.功能要求1.数字电子时钟最主要是LED数码管显示功能,以24小时为一个周期,显示时间时、分、秒。

2.具有校时功能,可以对时、进行单独校对,使其校正到标准时间。

二.方案论证1.数字时钟方案数字时钟是本设计的最主要的部分。

根据需要,可利用两种方案实现。

方案一:本方案采用Dallas公司的专用时钟芯片DS12887A。

该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。

为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。

当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。

而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。

方案二:本方案完全用软件实现数字时钟。

原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。

利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。

该方案具有硬件电路简单的特点。

但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。

而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。

基于硬件电路的考虑,本设计采用方案二完成数字时钟的功能。

2.数码管显示方案方案一:静态显示。

所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。

该方式每一位都需要一个8 位输出口控制。

静态显示时较小的电流能获得较高的亮度,且字符不闪烁。

但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。

方案二:动态显示。

所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。

6位7段数码管数字字符显示电路

6位7段数码管数字字符显示电路

在器件选择按钮
图5
5.建立网络表
6.电器检测
7.存盘及输出报表:如果实际原理图没有保存,应将其保存。

保存后,执行菜单命令Tools→Bill of Materials,在其子菜单HTML Output、ASCII Outout、Compact CSV Output和Full CSV output中选择一项,生成BOM文档。

8.启动Keil u Vision2并建立项目:
(1)选择Project→New Project命令,弹出创建项目对话框。

选择需要保存的目录并输入项目的名称,例如XDX.
(2)单击保存按钮,此时弹出选择CPU类型对话框。

选择好本项目所使用的单片机型号。

如图6所示:
)单击命令按钮,此时工作区将弹出一新的文本编辑窗口。

在其中输入代码,如图
复选框上打√,并单击“确定”按钮保存设置。

此时,单击。

实测通过6位数码管显示程序

实测通过6位数码管显示程序

0.1~10累加控制数码管低2位显示从0.1到9.9累加,步进为0.1实验源程序://***************************************************************************** ******//主函数//***************************************************************************** ******void main() //主函数{num=0; //初始化段码为0while(1) //进入while死循环{scan(); //数码管扫描函数}}//***************************************************************************** ******//动态扫描函数//***************************************************************************** ******scan(){uchar i;for(i=0;i<10;i++){//显示个位P1=0xbf; //0xbf=1011 1111,即选通个位LE1=1; //锁存位LE1=0; //断开锁存,位选573的Q7~Q0仍保持wei=num*10;P1=dis[wei/10] | 0x80; //dis[wei/10]为0~9的编码,0x80为小数点LE2=1; //锁存段码LE2=0; //断开锁存,段选573的Q7~Q0仍保持delay(100); //延时保持一下,延时过大会闪动,延时过小会有重影P1=0x00;LE2=1;LE2=0; //清除P1口数据,以免造重影//显示十分位P1=0x7f; //0xbf=0111 1111,即选通十分位LE1=1; //锁存位LE1=0; //断开锁存,位选573的Q7~Q0仍保持wei=num*10;P1=dis[wei%10]; //0~9的编码LE2=1; //锁存段码LE2=0; //断开锁存,段选573的Q7~Q0仍保持delay(100); //延时保持一下,延时过大会闪动,延时过小会有重影P1=0x00;LE2=1;LE2=0; //清除P1口数据,以免造重影}if(num==9.9)num=0; //扫描到显示9.9时,重新开始扫描num+=0.1; //num加0.1}/****************************************************************************** *****以下各个程序是实测通过的6位共阳数码管显示程序(c51) 2014.08.20.实测通过仿TX-3C 实验板晶振为 11.0592M******************************************************************************* *****//****************************************************************************** *****共阴led数码管码表:(20140820)/*code uchar shu[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴数码管段选码(0-f)*/******************************************************************************* *****//***********************************************************************************高位(7) ---- 低位(0)位 0 0 0 0 0 0 0 0 共阳数码管段选码(0-f) 笔画 h g f e d c b a (小数点不亮码):0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1,0x86, 0x8e};0 1 2 3 4 5 6 7 8 9 a b cd e f//共阳数码管段选码(0-f) (高位减8即可,在段码中加上'&0x7f'即:P0=table[ge]&0x7f;) (带小数点亮码)://P0=table[ge]&0x7f; 或 P0=table[ge]&0x80; 该位小数点也亮。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

6位数码管显示
2008年03月29日下午 07:48
/******************************************************************** *
公司名称:智佳精控技术小组
模块名称:segment_led.c
功能:六位七段数码管显示模块
说明:
程序设计:kaixinlaohe
设计时间:2008.03.29
版本号: 20080329
程序说明: 使用环境为AT89S52,兼容51型单片机,晶振12M
使用方法:定义一个6位的数组,将数组首地址作参数调用Display_LED(dsi[]) ********************************************************************* /
#ifndef SEGMENT_MACRO
#define SEGMENT_MACRO
#include<reg52.h>
#define uchar unsigned char
//段码的端口
#define Segment_Port P0 //端口从高到低定义为:dp,g,f,e,d,c,b,a
//位码的端口,第一位在最左边,在程序中左到右依次显

sbit Segment_Bit1=P2^2;
sbit Segment_Bit2=P2^3;
sbit Segment_Bit3=P2^4;
sbit Segment_Bit4=P2^5;
sbit Segment_Bit5=P2^6;
sbit Segment_Bit6=P2^7;
//延时10ms
void delay();
//用数码管显示数据
void Display_LED(unsigned char dis[6]);
#endif
//--------------------------------------------------------------end
///////////////////////////////////////////////////////////////////// ///////////////////////
/******************************************************************** *
公司名称:智佳精控技术小组
模块名称:segment_led.c
功能:六位七段数码管显示模块
说明:支持0-F的显示及全开能和全关断的显示
程序设计:kaixinlaohe
设计时间:2008.03.29
版本号: 20080329
程序说明: 使用环境为AT89S52,兼容51型单片机,晶振12M
使用方法:定义一个6位的数组,将数组首地址作参数调用Display_LED(dsi[]) 若要显示1,则在数组中直接写入1即可
若要显示A,则在数组中写入10或0xA
若要开通和关断,在数组中写入16,17
********************************************************************* /
#include <reg52.h>
#include "segment_LED.h"
//共阳数码管的段码,若为共阳型,将数值取反
code uchar
led_code[18]={0xC0,0x0F9,0xA4,0xB0,0x99,0x92, //0,1,2,3,4,5
0x82,0x0F8,0x80,0x90,0x88,0x83, //6,7,8 ,9,A,b
0xC6,0xA1,0x86,0x8E,0xFF,0x00}; //C,d,E,f,全关断,全通
/********************************************************************
函数名:delay()
功能:延时10ms
说明:
入口参数:无
返回值:元
设计:kaixinlaohe 日期:2008-03-29
修改:日期:
********************************************************************* **/
void delay()
{
uchar x,y;
for (x=0;x<22;x++)
{
for (y=0;y<30;y++)
{
;
}
}
}
/********************************************************************
函数名:Display_LED(display_data[])
功能:用数码管显示数据
说明:
入口参数:6位数组的首地址
返回值:元
设计:kaixinlaohe 日期:2008-03-29
修改:日期:
********************************************************************* **/
void Display_LED(unsigned char display_data[])
{
unsigned char l;
for(l=0;l<83;l++)
{
Segment_Port=led_code[display_data[5]]; //**查显示码
*******
Segment_Bit1=0; //**置显示位*******
delay(); //**延时10ms*******
Segment_Bit1=1; //**清显示位*******
Segment_Port=led_code[display_data[4]];
Segment_Bit2=0;
delay();
Segment_Bit2=1;
Segment_Port=led_code[display_data[3]];
Segment_Bit3=0;
delay();
Segment_Bit3=1;
Segment_Port=led_code[display_data[2]];
Segment_Bit4=0;
delay();
Segment_Bit4=1;
Segment_Port=led_code[display_data[1]];
Segment_Bit5=0;
delay();
Segment_Bit5=1;
Segment_Port=led_code[display_data[0]];
Segment_Bit6=0;
delay();
Segment_Bit6=1;
}
}
//--------------------------------------------------- end。

相关文档
最新文档