⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 16-32.c

📁 基于ds1302的16*32led点阵显示屏
💻 C
字号:
#define uchar unsigned char
#define uint unsigned int
#include <reg52.h>
#include<1302.h>
#include<zifu.h>

#define BLKN 2      //列锁存器数
sbit G=P1^7;        //P1.7为显示允许控制信号端
sbit CLK=P1^6;     //P1.6为输出锁存器时钟信号端
sbit SCLR=P1^5;     //移位寄存器的清0端
void delay(unsigned int);
void showtime(uchar);
void showxq(uchar);
unsigned char data dispram[32];
unsigned char data dispram0[32];
unsigned char code  time[][16];
unsigned char code Timename[][32];
unsigned char code xinqi[][32];
uchar inittime[7]={0x00,0x24,0x15,0x25,0x12,0x04,0x07};	 //初始化后设置



 void main()
 {
 register unsigned char i,j,k,l;
 uchar ucAddr = 0x81;
 SCON=0x00;            //串口工作模式0:移位寄存器方式
 TMOD=0x01;            //定时器T0工作在试1:16位方式
 TR0=1;                //启动定时器
 P1=0x3f;              //P1口初值允许接收,锁存,显示
 IE=0x82;              //允许定时器T0中断
 Set1302(inittime);            //初始化 
 W1302(0x8e,0x00);           /* 控制命令,WP=0,写操作?*/                 
 W1302(0x90,0xa5);           //打开充电二级管  一个二级管串联一个2K电阻 
 du1302();            //读取 秒 分 时 日 月 星期 年
 while(1)
 {
 delay(2000);          //延时2S

/*for(i=0;i<32;i++)     //显示效果:卷帘出
 {
 dispram[i]=Bmp[1][i];

 if(i%2)delay(100);
 }
 delay(100);*/



 for(i=0;i<9;i++)     //显示效果:左移显示:你好我是......
    {
     for(j=0;j<2;j++)
         for(k=1;k<9;k++)
            {
             for(l=0;l<16;l++)
                {
               dispram[l*BLKN]=dispram[l*BLKN]
<<1|dispram[l*BLKN+1]>>7;
	             dispram[l*BLKN+1]=dispram[l*BLKN+1]
<<1|dispram0[l*BLKN]>>7;
                 dispram0[l*BLKN]=dispram0[l*BLKN]
<<1|dispram0[l*BLKN+1]>>7;
                 dispram0[l*BLKN+1]=dispram0[l*BLKN+1]
<<1|Bmp[i][l*BLKN+j]>>(8-k);
                 }
             delay(100);
            }
    }
   delay(100);


   du1302();                   // 读时间
for(i=0;i<11;i++)
  {
	if(i==3) 
	   {
        showtime(Year);
		}
	 if(i==4) 
	   { 		 
	    showtime(Month); 
    	}
	 if(i==5) 
	   { 		 
	    showtime(Day); 
    	}
	 if(i==6) 
	   { 		 
	    showtime(Hour); 
    	}
	 if(i==7) 
	   { 		 
	    showtime(Cent); 
    	}
	 if(i==8) 
	   { 		 
	    showtime(Sec); 
    	}
	 if(i==10) 
	   {
            for(j=0;j<2;j++)
         for(k=1;k<9;k++)
            {
             for(l=0;l<16;l++)
                {
                 dispram[l*BLKN]=dispram[l*BLKN]
<<1|dispram[l*BLKN+1]>>7;
	             dispram[l*BLKN+1]=dispram[l*BLKN+1]
<<1|dispram0[l*BLKN]>>7;
                 dispram0[l*BLKN]=dispram0[l*BLKN]
<<1|dispram0[l*BLKN+1]>>7;
                 dispram0[l*BLKN+1]=dispram0[l*BLKN+1]
<<1|xinqi[Week%16][l*BLKN+j]>>(8-k);
                 }
      delay(100);
      }
	     	}
     for(j=0;j<2;j++)
         for(k=1;k<9;k++)
            {
             for(l=0;l<16;l++)
                {
                 dispram[l*BLKN]=dispram[l*BLKN]
<<1|dispram[l*BLKN+1]>>7;
	             dispram[l*BLKN+1]=dispram[l*BLKN+1]
<<1|dispram0[l*BLKN]>>7;
                 dispram0[l*BLKN]=dispram0[l*BLKN]
<<1|dispram0[l*BLKN+1]>>7;
                 dispram0[l*BLKN+1]=dispram0[l*BLKN+1]
<<1|Timename[i][l*BLKN+j]>>(8-k);
                 }
      delay(100);
      }
  }
   





			  
for(i=0;i<32;i++)     //显示效果:卷帘入
    {
     dispram[i]=0;
	 dispram0[i]=0;
     if(i%2)delay(100);
    }
 }
 }
 /*-------------延时------------*/
 void delay(unsigned int dt)
{
 register unsigned char bt;
 for(;dt;dt--)
 for(bt=0;bt<225;bt++);
 }



 /*-------显示屏扫描(定时器T0中断)函数-------------*/
 void leddisplay(void) interrupt 1 using 1
 {
 register unsigned char i,j=BLKN;
 TH0=0xf8;                      //设定显示屏刷新率每秒62.5帧
 TL0=0x30;
 i=P1;                          //读出当前显示的行号
 i=++i&0x0f;                    //行号加1屏蔽高四位
 do
 {
 j--;
SBUF=~dispram0[i*BLKN+j];        //送显示数据
 //SBUF=dispram0[i*BLKN+j]; 
 while (!TI);TI=0;
 }
 while(j);                       //完成一行数据传输
j=BLKN;
do
{j--;
SBUF=~dispram[i*BLKN+j];
//SBUF=dispram[i*BLKN+j];
while(!TI);TI=0;
}
while(j); 
 G=1;                            //消隐(关闭显示)
 P1&=0xf0;                       //行号端清0
 CLK=1;                         //显示数据输出到锁存寄存器
 P1 |=i;                         //写入行号
 CLK=0;                         //锁存器显示数据
 G=0;                            //打开显示
 }


void showtime(uchar shijian)
{
 uchar l,k;
         for(k=1;k<9;k++)
            {
             for(l=0;l<16;l++)
                {
                 dispram[l*BLKN]=dispram[l*BLKN]
<<1|dispram[l*BLKN+1]>>7;
	             dispram[l*BLKN+1]=dispram[l*BLKN+1]
<<1|dispram0[l*BLKN]>>7;
                 dispram0[l*BLKN]=dispram0[l*BLKN]
<<1|dispram0[l*BLKN+1]>>7;
                 dispram0[l*BLKN+1]=dispram0[l*BLKN+1]
<<1|time[shijian/16][l]>>(8-k);
                 }
             delay(100);
			 }
			 for(k=1;k<9;k++)
            {
             for(l=0;l<16;l++)
                {
                 dispram[l*BLKN]=dispram[l*BLKN]
<<1|dispram[l*BLKN+1]>>7;
	             dispram[l*BLKN+1]=dispram[l*BLKN+1]
<<1|dispram0[l*BLKN]>>7;
                 dispram0[l*BLKN]=dispram0[l*BLKN]
<<1|dispram0[l*BLKN+1]>>7;
                 dispram0[l*BLKN+1]=dispram0[l*BLKN+1]
<<1|time[shijian%16][l]>>(8-k);
                 }
             delay(100);
			 }
			 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -