74ls164动态驱动多位数码管_第1页
74ls164动态驱动多位数码管_第2页
74ls164动态驱动多位数码管_第3页
74ls164动态驱动多位数码管_第4页
74ls164动态驱动多位数码管_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

74ls164可否动向驱动多位数码管voiddisplay( )//数码显示{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);led2=1;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数码管驱动(第二个程序)#defineclockPORTD.1#definedatePORTD.0#defineclock_enDDRD.1#definedate_enDDRD.0unsignedcharlab[2][10]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,0x02,0x9E,0x24,0x0C,0x98,0x48,0x40,0x1E,0x00,0x08};voidsend(unsignedcharw){unsignedchari;for(i=0;i<8;i++){clock=0;date=w&1;clock=1;w=w>>1;}return;}voidxianshi(longw,unsignedcharweishu){unsignedchari,j;bitflag=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>sbitsclk=P2^0;sbitsda=P2^1;sbitslck=P2^2;inttab[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};voiddelay( ){inti,j;for(i=0;i<255;i++)for(j=0;j<80;j++);}voidbit_dat(biti){sclk=0;sda=i;sclk=1;}voiddat(chari){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( ){inti;while(1){for(i=0;i<10;i++){dat(i);delay( );}i=0;}}程序以下:/**************************************//*74LS164数码管动向显示*//**************************************///-------------------------------------

库函数申明,管脚定义

------------#include<at89x51.h>#defineucharunsignedcharsbitsimuseri_CLK=P1^1;sbitsimuseri_DATA=P1^0;

//用//用

P1^1P1^0

模拟串口时钟模拟串口数据sbita0=ACC^0;unsignedcharcodedis_code[11]={0x28,0x7E,0xa2,0x62,//查表显示0,1、、90x74,0x61,0x21,0x7A,0x20,0x60,0x01};ucharnumer,temp;ucharge,shi;//----------------------------------------------------------------------------函数名称:out_simuseri输入参数:data_buf输出参数:无//功能说明:8位同步移位存放器,将data_buf的数据逐位输出到//----------------------------------------------------------------------------

simuseri_DATAvoidout_simuseri(uchardata_buf){uchari;i=8;ACC=data_buf;do{simuseri_CLK=0;simuseri_DATA=a0;simuseri_CLK=1;ACC=ACC>>1;}while(--i!=0);}/************************************/voiddelay(ucharms){uchari;while(ms--){for(i=0;i<125;i++);}}

//延时程序/***********************************/voidmain( ){ucharm;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;}m=0;}}}/****************************************/*******************************************************************************第二个程序74HC164是个移位存放器,以下程序是我用过的,绝对没问题:此中ShowData为164数据脚,ShowClck为164时钟脚;voidShow_164(unsignedchar_ShowValue){unsignedcharCount0;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-2722:26;===============================================最正确答案:这是个简略频次计,程序以下;---------------------------------

:ORG0000HJMPSTARTORG000BHJMPT0_INT;---------------------------------START:MOVTMOD,#51H;/*01010001T1

计数,T0

准时*/MOVTH0,#HIGH(65536-50000);50ms@12MHzMOVTL0,#LOW(65536-50000)MOVTH1,#0MOVTL1,#0SETBTR0SETBTR1SETBET0SETBEAMOVR7,#20SJMP$;---------------------------------T0_INT:;50ms履行一次MOVTL0,#LOW(65536-50000);从头写入初始值MOVTH0,#HIGH(65536-50000);50ms@12MHzDJNZR7,T0_ENDMOVR7,#20MOVP1,TL1MOVP2,TH1MOVTL1,#0MOVTH1,#0T0_END:RETI;---------------------------------END外接74系列驱动电路就行,比方74LS164或74LS138。动向扫描就是给各个数码管挨次显示,随意时间只有一个数码管亮,但闪耀的太快了,人眼分辨不出,给人的感觉就是每个数码管都在亮。一般过程就是赋值,开显示,延时,关显示,这是我从前写过的程序#include<REGX52.H>main( ){unsignedinti;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口的高四位再接到此外四个数码管的片选端,程序模

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论