16-32点阵数字钟及汉字显示.doc_第1页
16-32点阵数字钟及汉字显示.doc_第2页
16-32点阵数字钟及汉字显示.doc_第3页
16-32点阵数字钟及汉字显示.doc_第4页
16-32点阵数字钟及汉字显示.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

16*32点阵数字钟及汉字显示一电路原理框架设计制作作品:1632点阵显示数字钟及汉字显示实现功能:点阵显示的实时时钟以及汉字等字符的左移显示实用特征:采用双电源供电,断电后时钟由电池供电还能继续运行,而且精确性较高实现原理:1 时钟显示是由DS1302精确的时钟芯片产生时钟信号并将其送至单片机,经过单片机处理后再输送到点阵显示模块。2 汉字显示并左移原理是先写入与本点阵驱动相应的代码进单片机,通过单片机控制程序取表进行处理后送点阵模块显示电路主要模块及原理图:1 单片机最小系统及控制按键电路2 DS1302与单片机接口电路DS1302除了系统上电时由系统供电外,如果主电源断电还有一电池给DS1302供电,防止断电后DS1302数据消失。4点阵行驱动模块电路行驱动采用74LS154(416线译码器)及PNP三极管,由于是1632点阵显示功率较大故采用8550NP三极管。5点阵列驱动电路列驱动采用74HC595移位寄存器将控制位级连接入单片机,每个74HC595数据输入端单独接单片机。1632点阵模块由8块小的88点阵模块通过级连而拼成,共16行,32列。二:主要元器件选择:单片机:AT89S51采用市场上比较常用的STC89C51三极管:点阵的行驱动电路用,这里采用PNP管,具体型号用8550点阵块:为了电路简单,采用双色88点阵晶振:采用的是12MHZ的晶振电源部分:采用5V电压供电,采用的是L7805稳压芯片供电电阻:大部分是限流电阻,阻值为4.7K或10K,1K译码器:416线采用市场上较为常用的74LS154,用来作行驱动移位寄存器:采用74HC595移位寄存器作列驱动,驱动列端口分配及连接:P1.0P1.2:DS1302与单片机接口P1.3P1.4:K0,K1按键,用来调整时间,按下为0P0:P0口接点阵行驱动电路接译码器P2:P2口点阵列驱动电路接74HC595最后是做好之后的图附:点阵时间显示源程序/=/*标题:16*32点阵数字钟显示程序/*说明:时钟信号产生采用DS1302,列采用74HC595驱动(共4个),行驱动采用4-16线译码器74LS154/*功能:通过动态扫描显示时钟,可显示时,分,秒,日期中的月和日/*作者:HEY/*日期:2006-05-29/*邮箱:/*备注:此是我刚接触单片机时的一个小制作 程序和电路设计上难免有不足之处 请谅解/=/#include #include #define uchar unsigned char/=/用到的引脚及端口定义/=/sbit SERIALIN_0=P20; /定义P2.0为列向第1个74HC595的DATA输入sbit SERIALIN_1=P21; /定义P2.1为列向第2个74HC595的DATA输入sbit SERIALIN_2=P22; /定义P2.2为列向第2个74HC595的DATA输入sbit SERIALIN_3=P23; /定义P2.3为列向第2个74HC595的DATA输入sbit CLOCK_DATA=P10; /定义P1.0为DS1302的DATA端口sbit CLOCK_RST=P11; /定义P1.1为DS1302的复位输出端口sbit CLOCK_SCLK=P12; /定义P1.2为DS1302的时钟信号状态控制sbit K0=P13; /K0为按键1,用来选择要调整时间的选项(时和分)sbit K1=P14; /K1为按键2,执行加1sbit CLOCK=P24; /74HC595的移位时钟控制sbit LATCH=P25; /74HC595的锁存输出时钟控制void control(); /调整时间控制函数void time();uchar CLOCK_TIME3=0,0,0; /定义时钟时间数据存储区,分别为(时,分,秒)uchar BUFFER8=0,0,0,0,0,0,0,0; /显示缓冲区uchar YEAR3=0,0,0; /定义时钟年月日数据存储区uchar temp4=0,0,0,0; /定义74HC595的移位缓冲区uchar FLASH_STOP; /显示小时和分钟之间的两点控制位uchar sec_flash; /用单片机定时器模拟的一秒(用来控制小时和分中之间的两点)/=/定义0-9的点阵显示代码段 8*8/=/uchar code bmp108=0xe3,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xe3, /00xf7,0xc7,0xf7,0xf7,0xf7,0xf7,0xf7,0xc1, /10xe3,0xdd,0xdd,0xfd,0xfb,0xf7,0xef,0xc1, /20xe3,0xdd,0xfd,0xe3,0xfd,0xfd,0xdd,0xe3, /30xfb,0xf3,0xeb,0xdb,0xdb,0xc1,0xfb,0xf1, /40xc1,0xdf,0xdf,0xc3,0xfd,0xfd,0xdd,0xe3, /50xe3,0xdd,0xdf,0xc3,0xdd,0xdd,0xdd,0xe3, /60xc1,0xdd,0xfd,0xfb,0xf7,0xf7,0xf7,0xf7, /70xe3,0xdd,0xdd,0xe3,0xdd,0xdd,0xdd,0xe3, /80xe3,0xdd,0xdd,0xdd,0xe1,0xfd,0xdd,0xe3, /9;/=/定义0-9的点阵显示代码段 8*8 与上面不同的是多了小时和分钟之间的两点/=/uchar code bmp_1108=0xe3,0xdd,0x5d,0xdd,0xdd,0x5d,0xdd,0xe3, /:00xf7,0xc7,0x77,0xf7,0xf7,0x77,0xf7,0xc1, /:10xe3,0xdd,0x5d,0xfd,0xfb,0x77,0xef,0xc1, /:20xe3,0xdd,0x7d,0xe3,0xfd,0x7d,0xdd,0xe3, /:30xfb,0xf3,0x6b,0xdb,0xdb,0x41,0xfb,0xf1, /:40xc1,0xdf,0x5f,0xc3,0xfd,0x7d,0xdd,0xe3, /:40xe3,0xdd,0x5f,0xc3,0xdd,0x5d,0xdd,0xe3, /:50xc1,0xdd,0x7d,0xfb,0xf7,0x77,0xf7,0xf7, /:60xe3,0xdd,0x5d,0xe3,0xdd,0x5d,0xdd,0xe3, /:70xe3,0xdd,0x5d,0xdd,0xe1,0x7d,0xdd,0xe3, /:8;/=/定义0-9的点阵显示代码段 数码似的字模 8*8 显示数据前有一横杠将月和日格开/=/uchar code bmp_2108=0xff,0xff,0xf8,0xfa,0x8a,0xfa,0xf8,0xff, /-00xff,0xff,0xfe,0xfe,0x8e,0xfe,0xfe,0xff, /-10xff,0xff,0xf8,0xfe,0x88,0xfb,0xf8,0xff, /-20xff,0xff,0xf8,0xfe,0x88,0xfe,0xf8,0xff, /-30xff,0xff,0xfa,0xfa,0x88,0xfe,0xfe,0xff, /-40xff,0xff,0xf8,0xfb,0x88,0xfe,0xf8,0xff, /-50xff,0xff,0xf8,0xfb,0x88,0xfa,0xf8,0xff, /-60xff,0xff,0xf8,0xfe,0x8e,0xfe,0xfe,0xff, /-70xff,0xff,0xf8,0xfa,0x88,0xfa,0xf8,0xff, /-80xff,0xff,0xf8,0xfa,0x88,0xfe,0xf8,0xff, /-9;/=/定义0-9的点阵显示代码段 模拟数码似的字模 8*8/=/uchar code bmp_3108=0xff,0xff,0x8f,0xaf,0xaf,0xaf,0x8f,0xff, /00xff,0xff,0xef,0xef,0xef,0xef,0xef,0xff, /10xff,0xff,0x8f,0xef,0x8f,0xbf,0x8f,0xff, /20xff,0xff,0x8f,0xef,0x8f,0xef,0x8f,0xff, /30xff,0xff,0xaf,0xaf,0x8f,0xef,0xef,0xff, /40xff,0xff,0x8f,0xbf,0x8f,0xef,0x8f,0xff, /50xff,0xff,0x8f,0xbf,0x8f,0xaf,0x8f,0xff, /60xff,0xff,0x8f,0xef,0xef,0xef,0xef,0xff, /70xff,0xff,0x8f,0xaf,0x8f,0xaf,0x8f,0xff, /80xff,0xff,0x8f,0xaf,0x8f,0xef,0x8f,0xff, /9;/=/定义0-59模拟七段数码管显示 8*8/=/uchar code bmp_4608=0xff,0xff,0x88,0xaa,0xaa,0xaa,0x88,0xff, /000xff,0xff,0x8e,0xae,0xae,0xae,0x8e,0xff, /010xff,0xff,0x88,0xae,0xa8,0xab,0x88,0xff, /020xff,0xff,0x88,0xae,0xa8,0xae,0x88,0xff, /030xff,0xff,0x8a,0xaa,0xa8,0xae,0x8e,0xff, /040xff,0xff,0x88,0xab,0xa8,0xae,0x88,0xff, /050xff,0xff,0x88,0xab,0xa8,0xaa,0x88,0xff, /060xff,0xff,0x88,0xae,0xae,0xae,0x8e,0xff, /070xff,0xff,0x88,0xaa,0xa8,0xaa,0x88,0xff, /080xff,0xff,0x88,0xaa,0xa8,0xae,0x88,0xff, /090xff,0xff,0xe8,0xea,0xea,0xea,0xe8,0xff, /100xff,0xff,0xee,0xee,0xee,0xee,0xee,0xff, /110xff,0xff,0xe8,0xee,0xe8,0xeb,0xe8,0xff, /120xff,0xff,0xe8,0xee,0xe8,0xee,0xe8,0xff, /130xff,0xff,0xea,0xea,0xe8,0xee,0xee,0xff, /140xff,0xff,0xe8,0xeb,0xe8,0xee,0xe8,0xff, /150xff,0xff,0xe8,0xeb,0xe8,0xea,0xe8,0xff, /160xff,0xff,0xe8,0xee,0xee,0xee,0xee,0xff, /170xff,0xff,0xe8,0xea,0xe8,0xea,0xe8,0xff, /180xff,0xff,0xe8,0xea,0xe8,0xee,0xe8,0xff, /190xff,0xff,0x88,0xea,0x8a,0xba,0x88,0xff, /200xff,0xff,0x8e,0xee,0x8e,0xbe,0x8e,0xff, /210xff,0xff,0x88,0xee,0x88,0xbb,0x88,0xff, /220xff,0xff,0x88,0xee,0x88,0xbe,0x88,0xff, /230xff,0xff,0x8a,0xea,0x88,0xbe,0x8e,0xff, /240xff,0xff,0x88,0xeb,0x88,0xbe,0x88,0xff, /250xff,0xff,0x88,0xeb,0x88,0xba,0x88,0xff, /260xff,0xff,0x88,0xee,0x8e,0xbe,0x8e,0xff, /270xff,0xff,0x88,0xea,0x88,0xba,0x88,0xff, /280xff,0xff,0x88,0xea,0x88,0xbe,0x88,0xff, /290xff,0xff,0x88,0xea,0x8a,0xea,0x88,0xff, /300xff,0xff,0x8e,0xee,0x8e,0xee,0x8e,0xff, /310xff,0xff,0x88,0xee,0x88,0xeb,0x88,0xff, /320xff,0xff,0x88,0xee,0x88,0xee,0x88,0xff, /330xff,0xff,0x8a,0xea,0x88,0xee,0x8e,0xff, /340xff,0xff,0x88,0xeb,0x88,0xee,0x88,0xff, /350xff,0xff,0x88,0xeb,0x88,0xea,0x88,0xff, /360xff,0xff,0x88,0xee,0x8e,0xee,0x8e,0xff, /370xff,0xff,0x88,0xea,0x88,0xea,0x88,0xff, /380xff,0xff,0x88,0xea,0x88,0xee,0x88,0xff, /390xff,0xff,0xa8,0xaa,0x8a,0xea,0xe8,0xff, /400xff,0xff,0xae,0xae,0x8e,0xee,0xee,0xff, /410xff,0xff,0xa8,0xae,0x88,0xeb,0xe8,0xff, /420xff,0xff,0xa8,0xae,0x88,0xee,0xe8,0xff, /430xff,0xff,0xaa,0xaa,0x88,0xee,0xee,0xff, /440xff,0xff,0xa8,0xab,0x88,0xee,0xe8,0xff, /450xff,0xff,0xa8,0xab,0x88,0xea,0xe8,0xff, /460xff,0xff,0xa8,0xae,0x8e,0xee,0xee,0xff, /470xff,0xff,0xa8,0xaa,0x88,0xea,0xe8,0xff, /480xff,0xff,0xa8,0xaa,0x88,0xee,0xe8,0xff, /490xff,0xff,0x88,0xba,0x8a,0xea,0x88,0xff, /500xff,0xff,0x8e,0xbe,0x8e,0xee,0x8e,0xff, /510xff,0xff,0x88,0xbe,0x88,0xeb,0x88,0xff, /520xff,0xff,0x88,0xbe,0x88,0xee,0x88,0xff, /530xff,0xff,0x8a,0xba,0x88,0xee,0x8e,0xff, /540xff,0xff,0x88,0xbb,0x88,0xee,0x88,0xff, /550xff,0xff,0x88,0xbb,0x88,0xea,0x88,0xff, /560xff,0xff,0x88,0xbe,0x8e,0xee,0x8e,0xff, /570xff,0xff,0x88,0xba,0x88,0xea,0x88,0xff, /580xff,0xff,0x88,0xba,0x88,0xee,0x88,0xff, /59;/=/名称:delay/说明:延时函数/功能:根据需要取不同的值,实现不同的延时效果/=/void delay() uchar n;for(n=0;n=125;n+);void delay2(uchar m) uchar n; while(m-) for(n=0;n=200;n+);/=/名称:shift/说明:74HC595左移程序/功能:实现74HC595的移位输入/=/void shift() uchar j; for(j=0;j8;j+) temp0=temp01; /将temp0左移1位SERIALIN_0=CY; /进位输出到移位寄存器temp1=temp11; /将temp1左移1位后SERIALIN_1=CY; /进位输出到移位寄存器temp2=temp21; /将temp2左移1位后SERIALIN_2=CY; /进位输出到移位寄存器temp3=temp31; /将temp0左移1位后的进位输出到移位寄存器SERIALIN_3=CY; /进位输出到移位寄存器CLOCK=1; /移位时钟控制移位CLOCK=0;/=/名称:display/说明:显示函数/功能:将要显示的数据通过74HC595和74LS154用LED点阵显示出来/实现方法:该16X32点阵为8块小点阵,显示时将上下分开,上面显示时间。下面显示日期和秒/=/void display(void) uchar i,sec;sec=CLOCK_TIME0;BUFFER0=CLOCK_TIME1%10; /显示时钟分钟个位 BUFFER1=CLOCK_TIME1/10; /显示时钟分钟十位 BUFFER2=CLOCK_TIME2%10; /显示时钟小时个位BUFFER3=CLOCK_TIME2/10; /显示时钟小时十位BUFFER4=YEAR1; /显示月,从0012BUFFER5=YEAR2/10; /显示日十位BUFFER6=YEAR2%10; /显示日个位BUFFER7=CLOCK_TIME0; /显示秒从0059 for(i=0;i16;i+) /逐行扫描 if(i8) /上面的8行显示时间 temp0=bmpBUFFER3i; /取表显示时钟十位 temp1=bmpBUFFER2i; /取表显示时钟个位 if(FLASH_STOP=0) /小时和分钟之间的两点闪标志位 temp2=bmp_1BUFFER1i; /标志位为0时,两点亮else temp2=bmpBUFFER1i; /相反不亮 temp3=bmpBUFFER0i; /取表显示分钟个位else temp0=bmp_4BUFFER4i-8; /通过取表显示月 temp1=bmp_2BUFFER5i-8; /通过取表显示日 temp2=bmp_3BUFFER6i-8; temp3=bmp_4BUFFER7i-8; /通过取表显示秒shift(); /调用移位函数处理 LATCH=0;LATCH=1; /输出P0=i; /逐行显示,扫描delay(); /延时P0=0xff; /显示完一行清显示 /=/单字节写子程序 RC0(SCLK),RC1(I/O),RC2(RST)/名称:inputdata/说明:先写地址,后写数据/功能: 往DS1302写入时钟数据/=/void inputdata(unsigned char tmaddr,unsigned char tmdata) uchar loop; CLOCK_DATA=0; /设置为输出; CLOCK_RST=0; CLOCK_SCLK=0; CLOCK_RST=1; for(loop=0;loop1; /右移一位 CLOCK_DATA=CY; /输出移位标志位 CLOCK_SCLK=1; CLOCK_SCLK=0; for(loop=0;loop1; /右移一位 CLOCK_DATA=CY; /输出移位标志 CLOCK_SCLK=1; CLOCK_SCLK=0; CLOCK_SCLK=1; CLOCK_RST=0; CLOCK_DATA=1; /设置为输出;/=/单字节读子程序 RC0(SCLK),RC1(I/O),RC2(RST)/名称:outputdata/说明:读数据/功能: 从DS1302读取1Byte数据/=/unsigned char outputdata(unsigned char tmaddr) uchar loop; uchar tmdata=0; inputdata(0x8F,0x00); CLOCK_DATA=0; /设置为输 CLOCK_RST=0; CLOCK_SCLK=0; CLOCK_RST=1; for(loop=8;loop0;loop-) /送地址 tmaddr=tmaddr1; CLOCK_DATA=CY; CLOCK_SCLK=1; CLOCK_SCLK=0; CLOCK_DATA=1; /设置为输入; CLOCK_DATA=1; CLOCK_SCLK=1; CLOCK_SCLK=0; for(loop=8;loop0;loop-) / 读数据 tmdata=tmdata1; if(CLOCK_DATA=1) tmdata=tmdata|0x80; CLOCK_SCLK=1; CLOCK_SCLK=0; tmdata=tmdata1; /由于在开始读是已经是第二个时钟下降延所以要进行左移处理 if(CY=1) tmdata=tmdata|0x01; CLOCK_SCLK=1; CLOCK_RST=0; return(tmdata);/=/函数:调整时间子程序/名称:control/说明:调整时间控制/功能: 通过两个按键调整时间,其中一个选择要调整的分钟或时钟,另一个加1功能/=/void control() uchar min16,hour16; inputdata(0x80,0x80); /时钟停止运行CLOCK_TIME0=0; /秒初始化位0FLASH_STOP=0; /时钟分钟之间两点状态位为0TR0=0; /开启T0定时器while(1) if(K1=0) /当K1按下时 delay2(50); /延时 if(K1=0) /K1按下 CLOCK_TIME1=CLOCK_TIME1+1; /分钟加1 if(CLOCK_TIME1=60) /当分钟加到60时初始化为0 CLOCK_TIME1=0; if(K0=0) /K0键再次按下,小时调整 delay2(100);if(K0=0) while(1) if(K0=1) /K0键按下加1 while(1) if(K1=0) delay2(50); if(K1=0) CLOCK_TIME2=CLOCK_TIME2+1; /小时加1 if(CLOCK_TIME2=24) /当变成24时初始化为0 CLOCK_TIME2=0; if(K0=0) /当K0再次按下时返回 delay2(100); if(K0=0) while(1) if(K0=1) /按下的键弹起时 min16=CLOCK_TIME1/10*16+CLOCK_TIME1%10; /将所得的分钟数据转变成16进制数据hour16=CLOCK_TIME2/10*16+CLOCK_TIME2%10; /将所得的小时数据转变成16进制数据 inputdata(0x84,hour16); /将调整后的小时数据写入DS1302 inputdata(0x82,min16); /将调整后的分钟数据写入DS1302 inputdata(0x80,0x00); /启动时钟 time(); /回到time函数 display(); /显示函数 display(); /显示函数/=/函数:T0中断服务子程序/名称:time0/说明:控制时钟和分钟之间的两点显示/功能: 利用单片机内部定时器造成0.5秒时钟和分钟之间两点闪动/=/void time0(void) interrupt 1 using 1 /T0中断函数 TH0=-10100/256; /填入计数器初值高位 TL0=-10100%256; /填入计数器初值低位 sec_flash=sec_flash+1; if(sec_flash=50) /0.5S到 FLASH_STOP=0; if(s

温馨提示

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

评论

0/150

提交评论