(完整版)74ls164动态驱动多位数码管
- 格式:doc
- 大小:439.51 KB
- 文档页数:12
单片机应用设计课题:串口连接两个74LS164驱动2个LED数码管显示班级学号: 14110501xx 姓名: xx1设计要求1.1 设计内容设晶体为12MHz,将拨码开关数据串行输入到74LS164,并行输出到2个LED 数码管进行相应的数码显示。
设计包括:系统设计分析、系统原理图设计、程序流程图设计、源程序设计、系统调试与仿真及调试结果分析、对本课程学习的感想与收获、对老师的意见与建议、期望成绩等。
1.2 学习目的该作业具有较强的实用性,许多同学已经认识到自己完全有能力设计一个实用的单片机应用系统,对单片机设计由感兴趣已经变为爱好了,为后面的实际应用系统设计奠定了较好的基础。
2 系统设计分析2.1 单片机最小系统+串口+74LS164+LED数码管单片机的最小系统是单片机能够工作的最小硬件组合,对于8051系列单片机,其电路的最小系统大致相同,主要包括电源、晶体振荡电路、复位电路等。
2.1.1 串口数据通信方式包括并行通信和串行通信两种。
并行通信就是多条数据线上同时传送,其优点:速度快,只适于近距离通信。
串行通信就是数据以为以为的顺序传送,其优点:线路简单,成本低,适合远距离通信。
串行通信方式包括:异步串行通信和同步串行通信。
异步方式,数据传送不连续,时间间隔任意。
同步方式,发送与接收同步。
数据传送方式:单工、半双工、全双工、多工。
常见的串行通讯有:RS-232、RS-485、CAN总线等。
串行口控制寄存器包括:串行口控制寄存器SCON(控制工作方式)、电源控制寄存器PCON(控制波特率)。
SM0、SM1选择工作方式,SM2用于多机通信,REN允许接收控制位,TB8/RB8发送/接收数据D8位,TI/RI为发送/接收中断标志位。
2.1.2 74LS164串行口工作于方式0,发送数据时,是把串行端口设置成“串入并出的”输出口。
将它设置为“串入并出”输出口时,需外接1片“串入并出”同步移位芯片74LS164或CD4094,本次设计,用74LS164。
集中实践报告书课题名称 利用74LS164芯片扩展8位LED 串行显示接口电路姓 名 学 号 系、 部 专业班级 指导教师※※※※※※※※※ ※※ ※※ ※※※※※※※※※※※年月日利用74LS164芯片扩展8位LED串行显示接口电路一、设计目的利用74LS164芯片扩展8位LED串行显示。
学习和掌握单片机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。
通过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到全面提高。
二、设计要求1. 要求将片内30H-37H单元中数据,8个数码管,用扩展串行的显示端口显示出来。
2. 要求做出实物。
三、硬件电路设计74LS164是串行输入并行输出的移位寄存器,每接一片74LS164可扩展一个8位并行输出口,可以作为LED显示器的8根段选线。
实物如图3-1所示。
系统总电路原理图如图3-2,为89C52单片机最小系统与8位数码管的连接图,分别用8个74LS164和8个LED数码管。
部分硬件电路原理图如图3-3所示。
图3-1 电路连接实物图图3-2 总电路原理图图3-3 部分硬件电路原理图数码管中有8段LED数码管显示器由8个发光二极管组成。
LED数码管显示器有两种不一样的形式:一种是8个发光二极管的阳极都连在一起的,称之为共阳极LED数码管显示器;另一种是8个发光二极管的阴极都连在一起的,称之为共阴极LED数码管显示器。
本次设计采用共阳极LED数码管。
在单片机应用系统中,数码管显示器显示常用两种办法:静态显示和动态扫描显示。
所谓静态显示,就是每一个数码管显示器都要占用单独的具有锁存功能的I/O接口用于笔划段字形代码。
这样单片机只要把要显示的字形代码发送到接口电路,就不用管它了,直到要显示新的数据时,再发送新的字形码,因此,使用这种办法单片机中CPU的开销小。
单片机应用设计课题:串口连接两个74LS164驱动2个LED数码管显示班级学号: 14110501xx 姓名: xx1设计要求1.1 设计内容设晶体为12MHz,将拨码开关数据串行输入到74LS164,并行输出到2个LED 数码管进行相应的数码显示。
设计包括:系统设计分析、系统原理图设计、程序流程图设计、源程序设计、系统调试与仿真及调试结果分析、对本课程学习的感想与收获、对老师的意见与建议、期望成绩等。
1.2 学习目的该作业具有较强的实用性,许多同学已经认识到自己完全有能力设计一个实用的单片机应用系统,对单片机设计由感兴趣已经变为爱好了,为后面的实际应用系统设计奠定了较好的基础。
2 系统设计分析2.1 单片机最小系统+串口+74LS164+LED数码管单片机的最小系统是单片机能够工作的最小硬件组合,对于8051系列单片机,其电路的最小系统大致相同,主要包括电源、晶体振荡电路、复位电路等。
2.1.1 串口数据通信方式包括并行通信和串行通信两种。
并行通信就是多条数据线上同时传送,其优点:速度快,只适于近距离通信。
串行通信就是数据以为以为的顺序传送,其优点:线路简单,成本低,适合远距离通信。
串行通信方式包括:异步串行通信和同步串行通信。
异步方式,数据传送不连续,时间间隔任意。
同步方式,发送与接收同步。
数据传送方式:单工、半双工、全双工、多工。
常见的串行通讯有:RS-232、RS-485、CAN总线等。
串行口控制寄存器包括:串行口控制寄存器SCON(控制工作方式)、电源控制寄存器PCON(控制波特率)。
SM0、SM1选择工作方式,SM2用于多机通信,REN允许接收控制位,TB8/RB8发送/接收数据D8位,TI/RI为发送/接收中断标志位。
2.1.2 74LS164串行口工作于方式0,发送数据时,是把串行端口设置成“串入并出的”输出口。
将它设置为“串入并出”输出口时,需外接1片“串入并出”同步移位芯片74LS164或CD4094,本次设计,用74LS164。
中北大学课程设计说明书学生姓名:XXXXXX 学号:1005xxxxx学院:信息与通信工程学院专业:电子信息科学与技术题目:74HC164级联实现四位数码管显示电路设计指导教师:程耀瑜职称: 教授李文强职称:讲师2013 年 1 月 17 日中北大学课程设计任务书2012/2013 学年第一学期学院:信息与通信工程学院专业:电子信息科学与技术学生姓名:xxxxxxx 学号:100xxxxxxx 课程设计题目:74HC164级联实现四位数码管显示电路设计起迄日期:1月4日~1月15日课程设计地点:中北大学指导教师:程耀瑜,李文强系主任:程耀瑜下达任务书日期: 2010 年 1 月 3 日课程设计任务书目录一、设计目的 (6)二、设计任务 (6)三、设计条件 (6)四、设计内容和要求 (6)1、74CH164的逻辑功能、逻辑图、引脚说明、波形图 (7)2、七段显示数码管 (9)3、74164QUARTUS 2仿真 (10)4、分步设计 (10)5、电路设计图 (11)6、仿真波形图 (12)六、设计总结 (15)1、设计总结 (15)2、设计中的优点与不足 (15)3、心得体会 (15)六、计参考资料 (16)一、设计目的本课程设计主要针对模拟电子技术和数字电子技术课程要求,培养学生在查阅资料的基础上,进行实用电路设计、计算、仿真、调试等多个环节的综合能力,同时培养学生用课程中所学的理论独立地解决实际问题的能力。
另外还培养学生用专业的、简洁的文字,清晰的图表来表达自己设计思想的能力。
二、设计任务设计一个74HC164级联实现四位数码管显示电路,通过在74HC164上输入时钟信号(CP)和控制信号(D),在数码管上显现出来相应的信号。
三、设计条件本设计是基于在学习过数字电子技术基础和模拟电子技术基础且在完成电子技术实验后设计的,通过在电脑上利用各种软件设计而成,包括Quartus II 5.0,Multisim2001等设计仿真软件。
第20誊第2期2001年6月大连轻工业学院学报JournalofDalianInstituteofLightIndustryVol20,No2jU[22001文章编号:1005.4014(2001)02.0123—0374LSl64在2051单片机LED显示电路中的应用林敏,于忠得,舒奎(大连轻工业学院自动化工程秉,辽宁大连116034/关键词:单片机;显示;电路摘要:AT89C2051是一种高性能低价位单片机,但因其引脚少,给系统设计尤其是LED显示接口电路的设计带来一定难度。
笔者采用串人并出移位寄存器74LSl64圆满地解央了这一闻题,文中详细介绍了该接口电路的构成原理与软件。
实际运行表明.该显示电路可以成功地应用到以AT89C2051单片机为核心的智能仪表中.而且LED显示清晰稳定可在线词整发光亮度。
中图分类号:TP274;TH86文献标识码:A74LSl64appliedinLEDdisplayingcircuitofAT89C2051singlechipcomputerL1NM抽.yUZhong-de.SHUKui(DeplofAuto.Erlg,Da/ianlnstofLightlnd,Dalian116034,China)Keywords:singlechipcomputer;displaying;circuitAbstract:ATSqC2051issinglechipcomputerwithhigh—performanceand10wc∞t.hsLEDdisp[aylngcircuitisnoteasytodesign,fortherearefewnumbersofpinsWesolvethisproblembyusingregister74LSl64.Thispaperpresentsitsprincipleandsoftwareimplementation.IthasbeenusedsuccessfullyintheintelligentinstrumentwithAT89C205lchip.emittingsteadylightclearlyandadjustableonline.AT89系列单片机L11是美国ATMEL公司近年来推出的一种新型高性能低价位、低电压低功耗的8位CMOS微型计算机。
单片机串口连接两个74L S164驱动两个L E D数码管单片机应用设计课题:串口连接两个74LS164驱动2个LED数码管显示班级学号: 14110501xx 姓名: xx1设计要求1.1 设计内容设晶体为12MHz,将拨码开关数据串行输入到74LS164,并行输出到2个LED数码管进行相应的数码显示。
设计包括:系统设计分析、系统原理图设计、程序流程图设计、源程序设计、系统调试与仿真及调试结果分析、对本课程学习的感想与收获、对老师的意见与建议、期望成绩等。
1.2 学习目的该作业具有较强的实用性,许多同学已经认识到自己完全有能力设计一个实用的单片机应用系统,对单片机设计由感兴趣已经变为爱好了,为后面的实际应用系统设计奠定了较好的基础。
2 系统设计分析2.1 单片机最小系统+串口+74LS164+LED数码管单片机的最小系统是单片机能够工作的最小硬件组合,对于8051系列单片机,其电路的最小系统大致相同,主要包括电源、晶体振荡电路、复位电路等。
2.1.1 串口数据通信方式包括并行通信和串行通信两种。
并行通信就是多条数据线上同时传送,其优点:速度快,只适于近距离通信。
串行通信就是数据以为以为的顺序传送,其优点:线路简单,成本低,适合远距离通信。
串行通信方式包括:异步串行通信和同步串行通信。
异步方式,数据传送不连续,时间间隔任意。
同步方式,发送与接收同步。
数据传送方式:单工、半双工、全双工、多工。
常见的串行通讯有:RS-232、RS-485、CAN总线等。
串行口控制寄存器包括:串行口控制寄存器SCON(控制工作方式)、电源控制寄存器PCON(控制波特率)。
SM0、SM1选择工作方式,SM2用于多机通信,REN允许接收控制位,TB8/RB8发送/接收数据D8位,TI/RI为发送/接收中断标志位。
2.1.2 74LS164串行口工作于方式0,发送数据时,是把串行端口设置成“串入并出的”输出口。
将它设置为“串入并出”输出口时,需外接1片“串入并出”同步移位芯片74LS164或CD4094,本次设计,用74LS164。
4HC164应用实例:驱动数码管两例(电路图和源程序)文章编号:文章分类:电路>电子元件点击:...关键词:74HC164文章来源:百合电子工作室收集整理摘要:74HC164应用实例:驱动数码管的两个实例分别提供了汇编源程序和C源程序...实例174HC164是串行输入,并行输出接口器件,可用在单向的并行输出/并行地址锁存等. 74HC164因为价格便宜,容易使用特别适合使用在在需要用到数码管显示IO口又比较紧张的电子产品中,下面浅谈使用方法:1. 首先先了解他的引脚功能和逻辑图,如下图:图1 引脚名称和用途图2 真值表通过真值表我们可以了解到,A,B两个输入端是互锁的,CLK上升沿时数据移入移位寄存器中,CLEAR为清零用的,接低电平时所有端口都输出低电平,了解了真值表之后开始运用了,先给出如下原理图:图3 原理图图中,采用义隆的EM78P153作为控制芯片,P50作为CLK时钟信号,注意平时数据不传输时,时钟信号是不发送的应一直保持低电平或者高电平,数据需要传输的时候才输出时钟信号^_^ ,继续P51作为移位数据输出端,接到74HC164的B端,A端接高电平,当然也可以AB端短路,然后连接到DATA移位数据端,P52作为数码管的选通信号(也可以叫消隐^_^), 作用是使数据传输过程暂时关闭显示,以免显示出不需要的数据,原因是应为164不带锁存功能,数据传输过程是一位一位的向高位移位输出的,所以要等数据全部移入后才打开始点亮数码管.注意了哦,通过查看164的规格书发现,164输出高电平电流比输出低电平电流要小,亦称灌电流大,扇出电流弱,所以适合选用共阳数码管,如图,本人偷懒没有画出那个数码管的8字该介绍的介绍的差不多了,废话少说,该开始干活了,任务是: 显示0-9 每秒+1 ,到9后又返回0,一直循环显示,根据任务得到如下流程图:1. 显示部分:将需要显示的数值送入A ==>查表求得显示段码==>将段码逐位移入164==>8位移完后点亮数码管==>延时==>返回第一步执行2. 中断部分:进入中断==>保存现场(以备调查取证,送你入狱^_^)==>重置TCC==>够1秒钟将需要显示的数据+1,并重置,不够就退出;根据以上要求就开始写代码调试了,要注意一点,数据移位时一定要记得高位在前哦,否则显示错误别怪我没有说清楚,我当年实验时就因为这个数据移位方向反了排查了半天,甚至以为是时钟频率不对,又以为时许不对.....搞了半天,NND后来重看DATASHEET才发现,原来是低级错误啊,呜呼哀哉.......,希望你不要重蹈我覆辙,哎哟!! 谁! 谁! 谁扔砖头上来啥你扔的我废话太多.........,那俺少来两句,继续上菜, 咦好像没啥可说的了,上源程序吧1.;中断部分:2.3.;;;;;;;;;;中断;;;;;;;;4.INTPUT:5.MOV TEMPA, A;6.MOV A,@130;7.MOV TCC,A;255-130=1258.CLR RF;9.;;;;;此处填写250Us处理程序10.BS WKREG,T500US11.;;;;;;;;;;;;;;;;;;;;;;;;;12.DJZ R1MS13.JMP INTEXT;14.MOV A,@415.MOV R1MS,A;重置16.BS WKREG,T1MS17.;;;;;;;此处填写1ms处理程序18.19.;;;;;;;;;;;;;;;;;;;;;;;;;;20.DJZ R20MS21.JMP INTEXT;22.MOV A,@2023.MOV R20MS,A;重置24.;;;此处填写1秒处理程序25.BS WKREG,T20MS26.;;;;;;;;;;;;;;27.DJZ R1S28.JMP INTEXT;29.MOV A,@5030.MOV R1S,A;31.;;;;;;;;;32.INC NUMBER33.MOV A,NUMBER34.SUB A,@1035.JBS SR,236.JMP INTEXT37.MOV A,@038.MOV NUMBER,A39.40.41.INTEXT:42.MOV A,TEMPA;43.RETI;;;;;;;;;;;;;;;;;;;;;44.45.46.47.48.49.;显示部分:50.51.;==============TXDATA==============52.TXDATA:53.BS P5,CC154.MOV A,@855.MOV DATALOP,A;56.TXLOP:57.BC WKREG,T500US58.BS P5,CLK;clk=高59.NOP;60.NOP61.JBS DATA_BUF,762.JMP$+363.BS P5,DATA;64.JMP$+265.BC P5,DATA66.DD1MS: JBS WKREG,T500US67.JMP$-168.BC P5,CLK69.BC WKREG,T500US70.JBS WKREG,T500US71.JMP$-1;72.RLC DATA_BUF73.DJZ DATALOP74.JMP TXLOP75.;;;;;;;;;;76.BC WKREG,T500US77.BS P5,CLK;clk=高78.BC WKREG,T500US79.JBS WKREG,T500US80.JMP$-1;81.BC P5,CLK82.;;;;;;;;83.BC P5,CC184.85.RET;;;;;;;86.87.;数据查表88.;===============DSPTBL============89.DSPTBL: ADD PC,A90.RETL @0B01000000;091.RETL @0B01111001;192.RETL @0B00100100;293.RETL @0B00110000;394.RETL @0B00011001;495.RETL @0B00010010;596.RETL @0B00000010;697.RETL @0B01111000;798.RETL @0B00000000;899.RETL @0B00010000;9100.101.102.;循环体部分;103.104.;;;;;;;;;;主程序;;;;;;;;;;;105.MLOOP:106.MOV A,NUMBER107.CALL DSPTBL108.MOV DATA_BUF,A109.CALL TXDATA110.BC WKREG,T1MS111.JBS WKREG,T1MS112.JMP$-1113.NOP;114.115.JMP MLOOP;;;;;;;;;;;;;;;;;;;;实例2在实际应用中驱动数码管常用的方式分动态扫描和静态驱动。
74ls164 能否动态驱动多位数码管void display() //数码显示{SCON=0; //初始化串行口方式SBUF=dispcode[ge];while(!TI);TI=0;led4=0;delay(2);led4=1;SBUF=dispcode[shi];while(!TI);TI=0;led3=0;delay(2);led3=1;SBUF=dispcode[bai];while(!TI);TI=0;led2=0;delay(2);SBUF=dispcode[qian];while(!TI);TI=0;led1=0;delay(2);led1=1;SBUF=dispcode[wan];while(!TI);TI=0;led0=0;delay(2);led0=1;}74ls164数码管驱动(第二个程序)#define clock PORTD.1#define date PORTD.0#define clock_en DDRD.1#define date_en DDRD.0unsigned char lab[2][10]={ 0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,0x02,0x9E,0x24,0x0C,0x98,0x48,0x40,0x1E,0x00,0x08};void send(unsigned char w){unsigned char i;for(i=0;i<8;i++){clock=0;date=w&1;}return ;}void xianshi(long w,unsigned char weishu){unsigned char i,j;bit flag=0;clock_en=1;date_en=1;if(w<0) { flag=1; w=-w; }for(i=0;i<8;i++) //8次循环{if(w!=0){if(i!=weishu) {j=lab[0][w%10];}else {j=lab[1][w%10];}}if(w==0){ if(i==0) j=0x03 ; //当数值直接是0if(i<=weishu){if(i<weishu) j=0x03;if(i==weishu) j=0x02;}else{if(flag) j=0xdf; //show 负号else {if(i!=0) j=0xff;} //oxff就不显示flag=0;}}send(j);w=w/10; //每显示一位,除10}return ;}51单片机接74ls164驱动数码管的C程序#include <regx52.h>sbit sclk=P2^0;sbit sda=P2^1;sbit slck=P2^2;int tab[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; void delay(){int i,j;for(i=0;i<255;i++)for(j=0;j<80;j++);}void bit_dat(bit i){ sclk=0;sda=i;sclk=1;}void dat(char i){slck=0;bit_dat((bit)(tab[i]&0x80));bit_dat((bit)(tab[i]&0x40));bit_dat((bit)(tab[i]&0x20));bit_dat((bit)(tab[i]&0x10));bit_dat((bit)(tab[i]&0x08));bit_dat((bit)(tab[i]&0x04));bit_dat((bit)(tab[i]&0x02));bit_dat((bit)(tab[i]&0x01));slck=1;}main(){ int i;while(1){for(i=0;i<10;i++){dat(i);delay();}i=0;}程序如下:/**************************************//* 74LS164数码管动态显示*//**************************************///-------------------------------------库函数声明,管脚定义------------#include <at89x51.h>#define uchar unsigned charsbit simuseri_CLK=P1^1; //用P1^1模拟串口时钟sbit simuseri_DATA=P1^0; //用P1^0模拟串口数据sbit a0=ACC^0;unsigned char code dis_code[11]={0x28,0x7E,0xa2,0x62, //查表显示0, 1、、90x74,0x61,0x21,0x7A,0x20,0x60, 0x01};uchar numer,temp;uchar ge,shi;//----------------------------------------------------------------------------// 函数名称:out_simuseri// 输入参数:data_buf// 输出参数:无// 功能说明:8位同步移位寄存器,将data_buf的数据逐位输出到simuseri_DATA //----------------------------------------------------------------------------void out_simuseri(uchar data_buf)ACC=data_buf;do{simuseri_CLK=0;simuseri_DATA=a0;simuseri_CLK=1;ACC=ACC>>1;}while(--i!=0);}/************************************/void delay(uchar ms) //延时程序{uchar i;while(ms--){for (i=0;i<125;i++);}}/***********************************/void main(){uchar m;while(1){for(temp=0;temp<99;temp++){ge=temp/10;shi=temp%10;for(m=0;m<20;m++) //显示频率200ms加1次{P2_0=0; //位段码numer=dis_code[ge];out_simuseri(numer); //个位移位显示delay(5);P2_0=1;P2_1=0;numer=dis_code[shi]; //十位移位out_simuseri(numer);delay(5);P2_1=1;}}/****************************************/******************************************************************************* 第二个程序74HC164是个移位寄存器,以下程序是我用过的,绝对没问题:其中ShowData为164数据脚,ShowClck为164时钟脚;void Show_164(unsigned char _ShowValue){unsigned char Count0;for(Count0=0;Count0<=7;Count0++){if((_ShowValue&0x80)==0x80)ShowData=1;elseShowData=0;_ShowValue<<=1;ShowClck=0;_nop_();_nop_();ShowClck=1;}}基于51单片机的简易数字频率计要求使用定时/计数器1作定时用,定时1s;定时/计数器0作计数器用,被计数的外部脉冲从P3.4(T0)接入。
单片机将在1s内对脉冲计数并送四位数码管显示,最大计数显示值为0FFFFH。
求程序。
悬赏分:30 - 解决时间:2010-6-27 22:26;===============================================最佳答案:这是个简易频率计,程序如下:;---------------------------------ORG 0000HJMP STARTORG 000BHJMP T0_INT;---------------------------------START:MOV TMOD, #51H ;/*01010001 T1计数,T0定时*/MOV TH0, #HIGH(65536 - 50000) ;50ms@12MHzMOV TL0, #LOW (65536 - 50000)MOV TH1, #0MOV TL1, #0SETB TR0SETB TR1SETB ET0SETB EAMOV R7, #20SJMP $;---------------------------------T0_INT: ;50ms执行一次MOV TL0, #LOW (65536 - 50000) ;重新写入初始值MOV TH0, #HIGH(65536 - 50000) ;50ms@12MHzDJNZ R7, T0_ENDMOV R7, #20MOV P1, TL1MOV P2, TH1MOV TL1, #0MOV TH1, #0T0_END:RETI;---------------------------------END外接74系列驱动电路就行,比如74LS164或74LS138。
动态扫描就是给各个数码管依次显示,任意时间只有一个数码管亮,但闪烁的太快了,人眼分辨不出,给人的感觉就是每个数码管都在亮。
一般过程就是赋值,开显示,延时,关显示,这是我以前写过的程序#include <REGX52.H>main(){unsigned int i;while(1){P0=0x3f;//个位赋值P1_0=0;//开显示for(i=0;i<2;i++);//延时P1_0=1;//关显示P0=0x6;//十位P1_1=0;for(i=0;i<2;i++);P1_1=1;P0=0x5b;//百位P1_2=0;for(i=0;i<2;i++);P1_2=1;P0=0x4f;//千位P1_3=0;for(i=0;i<2;i++);P1_3=1;}}这个是4位数码管,P0口接赋值端,P1口低四位接4个数码管的选通端,你要八个的话就把P1口的高四位再接到另外四个数码管的片选端,程序仿照就可以了djnz r1,loop;ajmp main;delay:mov r7,#245;延时大约1ms djnz r7,$;ret。