6549|9

1098

帖子

0

TA的资源

至上芯片

楼主
 

数字钟 [复制链接]

1.实验任务
(1).开机时,显示12:00:00的时间开始计时;
(2).P0.0/AD0控制“秒”的调整,每按一次加1秒;
(3).P0.1/AD1控制“分”的调整,每按一次加1分;
(4).P0.2/AD2控制“时”的调整,每按一次加1个小时;
2.电路原理图

                           图4.20.1
3.系统板上硬件连线
(1).把“单片机系统”区域中的P1.0-P1.7端口用8芯排线连接到“动态数码显示”区域中的A-H端口上;
(2).把“单片机系统:区域中的P3.0-P3.7端口用8芯排线连接到“动态数码显示”区域中的S1-S8端口上;
(3).把“单片机系统”区域中的P0.0/AD0、P0.1/AD1、P0.2/AD2端口分别用导线连接到“独立式键盘”区域中的SP3、SP2、SP1端口上;
4.相关基本知识
(1).动态数码显示的方法
(2).独立式按键识别过程
(3).“时”,“分”,“秒”数据送出显示处理方法
5.程序框图
6.汇编源程序
SECOND          EQU 30H
MINITE                     EQU 31H
HOUR            EQU 32H
HOURK          BIT P0.0
MINITEK         BIT P0.1
SECONDK        BIT P0.2
DISPBUF            EQU 40H
DISPBIT            EQU 48H
T2SCNTA            EQU 49H
T2SCNTB            EQU 4AH
TEMP               EQU 4BH
  
        ORG 00H
        LJMP START
        ORG 0BH
        LJMP INT_T0
START:  MOV SECOND,#00H
        MOV MINITE,#00H
        MOV HOUR,#12
        MOV DISPBIT,#00H
        MOV T2SCNTA,#00H
        MOV T2SCNTB,#00H
        MOV TEMP,#0FEH
        LCALL DISP
        MOV TMOD,#01H
        MOV TH0,#(65536-2000) / 256
        MOV TL0,#(65536-2000) MOD 256
        SETB TR0
        SETB ET0
        SETB EA
WT:     JB SECONDK,NK1
        LCALL DELY10MS
        JB SECONDK,NK1
        INC SECOND
        MOV A,SECOND
        CJNE A,#60,NS60
        MOV SECOND,#00H
NS60:   LCALL DISP
        JNB SECONDK,$
NK1:    JB MINITEK,NK2
        LCALL DELY10MS
        JB MINITEK,NK2
        INC MINITE
        MOV A,MINITE
        CJNE A,#60,NM60
        MOV MINITE,#00H
NM60:   LCALL DISP
        JNB MINITEK,$
NK2:    JB HOURK,NK3
        LCALL DELY10MS
        JB HOURK,NK3
        INC HOUR
        MOV A,HOUR
        CJNE A,#24,NH24
        MOV HOUR,#00H
NH24:   LCALL DISP
        JNB HOURK,$
NK3:    LJMP WT
DELY10MS:
        MOV R6,#10
D1:     MOV R7,#248
        DJNZ R7,$
        DJNZ R6,D1
        RET
DISP:   
        MOV A,#DISPBUF
        ADD A,#8
        DEC A
        MOV R1,A
        MOV A,HOUR
        MOV B,#10
        DIV AB
        MOV @R1,A
        DEC R1
        MOV A,B
        MOV @R1,A
        DEC R1
        MOV A,#10
        [email=MOV@R1,A]MOV @R1,A[/email]
        DEC R1
        MOV A,MINITE
        MOV B,#10
        DIV AB
        MOV @R1,A
        DEC R1
        MOV A,B
        MOV @R1,A
        DEC R1
        MOV A,#10
        [email=MOV@R1,A]MOV @R1,A[/email]
        DEC R1
        MOV A,SECOND
        MOV B,#10
        DIV AB
        MOV @R1,A
        DEC R1
        MOV A,B
        MOV @R1,A
        DEC R1
        RET
INT_T0:
        MOV TH0,#(65536-2000) / 256
        MOV TL0,#(65536-2000) MOD 256
        MOV A,#DISPBUF
        ADD A,DISPBIT
        MOV R0,A
        MOV A,@R0
        MOV DPTR,#TABLE
        MOVC A,@A+DPTR
        MOV P1,A
        MOV A,DISPBIT
        MOV DPTR,#TAB
        MOVC A,@A+DPTR
        MOV P3,A
        INC DISPBIT
        MOV A,DISPBIT
        CJNE A,#08H,KNA
        MOV DISPBIT,#00H
KNA:    INC T2SCNTA
        MOV A,T2SCNTA
        CJNE A,#100,DONE
        MOV T2SCNTA,#00H
        INC T2SCNTB
        MOV A,T2SCNTB
        CJNE A,#05H,DONE
        MOV T2SCNTB,#00H
        INC SECOND
        MOV A,SECOND
        CJNE A,#60,NEXT
        MOV SECOND,#00H
        INC MINITE
        MOV A,MINITE
        CJNE A,#60,NEXT
        MOV MINITE,#00H
        INC HOUR
        MOV A,HOUR
        CJNE A,#24,NEXT
        MOV HOUR,#00H
NEXT:   LCALL DISP
DONE:   RETI
TABLE:  DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H
TAB:    DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
        END
7

最新回复

先前用面包板搭了一个  详情 回复 发表于 2009-9-12 20:25
点赞 关注
 

回复
举报

1098

帖子

0

TA的资源

至上芯片

沙发
 

回复 楼主 的帖子

#include
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,
                               0x66,0x6d,0x7d,0x07,
                               0x7f,0x6f,0x77,0x7c,
                               0x39,0x5e,0x79,0x71,0x00};
unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
                             0xef,0xdf,0xbf,0x7f};
unsigned char dispbuf[8]={0,0,16,0,0,16,0,0};
unsigned char dispbitcnt;
unsigned char second;
unsigned char minite;
unsigned char hour;
unsigned int tcnt;
unsigned char mstcnt;
unsigned char i,j;
void main(void)
{
  TMOD=0x02;
  TH0=0x06;
  TL0=0x06;
  TR0=1;
  ET0=1;
  EA=1;
  while(1)
    {
      if(P0_0==0)
        {
          for(i=5;i>0;i--)
          for(j=248;j>0;j--);
          if(P0_0==0)
            {
              second++;
              if(second==60)
                {
                  second=0;
                }
              dispbuf[0]=second;
              dispbuf[1]=second/10;
              while(P0_0==0);
            }
        }
      if(P0_1==0)
        {
          for(i=5;i>0;i--)
          for(j=248;j>0;j--);
          if(P0_1==0)
            {
              minite++;
              if(minite==60)
                {
                  minite=0;
                }
              dispbuf[3]=minite;
              dispbuf[4]=minite/10;
              while(P0_1==0);
            }
        }
      if(P0_2==0)
        {
          for(i=5;i>0;i--)
          for(j=248;j>0;j--);
          if(P0_2==0)
            {
              hour++;
              if(hour==24)
                {
                  hour=0;
                }
              dispbuf[6]=hour;
              dispbuf[7]=hour/10;
              while(P0_2==0);
            }
        }
    }
}
void t0(void) interrupt 1 using 0
{
  mstcnt++;
  if(mstcnt==8)
    {
      mstcnt=0;
      P1=dispcode[dispbuf[dispbitcnt]];
      P3=dispbitcode[dispbitcnt];
      dispbitcnt++;
      if(dispbitcnt==8)
        {
          dispbitcnt=0;
        }
    }
  tcnt++;
  if(tcnt==4000)
    {
      tcnt=0;
      second++;
      if(second==60)
        {
          second=0;
          minite++;
          if(minite==60)
            {
              minite=0;
              hour++;
              if(hour==24)
                {
                  hour=0;
                }
            }
        }
      dispbuf[0]=second;
      dispbuf[1]=second/10;
      dispbuf[3]=minite;
      dispbuf[4]=minite/10;
      dispbuf[6]=hour;
      dispbuf[7]=hour/10;
    }
}
 
 

回复

362

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
。。。学          习。。。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 

Re: [分享] 数字钟

编译不通过
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

5
 

Re: [分享] 数字钟

很好学习中谢谢楼主
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

6
 

Re: [分享] 数字钟

不错学习中谢谢
 
 
 

回复

46

帖子

0

TA的资源

一粒金砂(高级)

7
 

Re: [分享] 数字钟

学习学习。。。。。。呵呵。。。
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(高级)

8
 
我看不到图,学习一下。
个人签名宁愿无知产生在知识之后!
 
 
 

回复

273

帖子

0

TA的资源

五彩晶圆(中级)

9
 
查看文章   
16×16点阵显示屏成功点亮!!2009-04-17 09:59
      看到江同学的3216屏(www.jiangx.net),对于我来说,稍显复杂,所以决定做个1616的屏看看效果,原理图就是以下了,注意做1616时,要去掉一个74LS154(当然这里也能换用74HC154,虽然功耗大,但价格较低),经过两天的奋斗,终于完工了。简单的调试后,点亮了!!编个流动显示的程序,哈哈,很炫啊。心动不如赶快行动啊!!

       我是把点阵块焊到一块板子上,可方便检查有无虚焊,控制部分放到了另一张板上,做成的实物图就是下面的了,视频在这里:http://u.youku.com/springvirus (注:以下原理图均来自www.jiangx.net














/*********************************************************
程序名称:LED1616点阵流动显示汉字
简要说明:最大可显示16*16汉字
                   P0口接上行线,P2口接下行线,P3口接扫描线
编    写:   JiangX.net

改    编:   springvirus
*********************************************************/
#include
#define hang1    P0       //上行线
#define hang2    P2       //下行线
#define lie      P1 //列线
#define sum   sizeof(hanzi)/32 //自动计算汉字字数

/*****参数设置*****/
#define ziti    16   //字体大小(宽度)
#define light   50   //显示亮度
#define move_speed 50     //移动速度

unsigned char code hanzi[]={

/*-- 文字: 自 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x00,0xF8,0x48,0x48,0x4C,0x4B,0x4A,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFF,0x00,0x00,0x00,

/*-- 文字: 制 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x50,0x4F,0x4A,0x48,0xFF,0x48,0x48,0x48,0x00,0xFC,0x00,0x00,0xFF,0x00,0x00,
0x00,0x00,0x3F,0x01,0x01,0xFF,0x21,0x61,0x3F,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00,

/*-- 文字: 小 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x00,0xC0,0x70,0x20,0x00,0xFF,0x00,0x10,0x20,0xC0,0x80,0x00,0x00,0x00,
0x04,0x02,0x01,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x01,0x07,0x02,0x00,

/*-- 文字: 型 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x12,0x92,0x7E,0x12,0x12,0xFE,0x12,0x12,0x10,0xFC,0x00,0x00,0xFF,0x00,0x00,
0x40,0x42,0x49,0x48,0x48,0x48,0x49,0x7E,0x48,0x48,0x48,0x4A,0x4C,0x4B,0x40,0x00,

/*-- 文字: 点 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x00,0xE0,0x20,0x20,0x20,0x3F,0x24,0x24,0x24,0xF4,0x24,0x00,0x00,0x00,
0x00,0x40,0x30,0x07,0x12,0x62,0x02,0x0A,0x12,0x62,0x02,0x0F,0x10,0x60,0x00,0x00,

/*-- 文字: 阵 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16   --*/
0xFE,0x02,0x12,0x2A,0xC6,0x88,0xC8,0xB8,0x8F,0xE8,0x88,0x88,0x88,0x88,0x00,0x00,
0xFF,0x00,0x02,0x04,0x03,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x00,

/*-- 文字: 显 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x00,0x3E,0x2A,0xEA,0x2A,0x2A,0x2A,0xEA,0x2A,0x3E,0x00,0x00,0x00,0x00,
0x20,0x21,0x22,0x2C,0x20,0x3F,0x20,0x20,0x20,0x3F,0x28,0x24,0x23,0x20,0x20,0x00,

/*-- 文字: 示 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x20,0x20,0x22,0x22,0x22,0x22,0xE2,0x22,0x22,0x22,0x22,0x22,0x20,0x20,0x00,
0x10,0x08,0x04,0x03,0x00,0x40,0x80,0x7F,0x00,0x00,0x01,0x02,0x0C,0x18,0x00,0x00,

/*-- 文字: 系 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x02,0x22,0xB2,0xAA,0x66,0x62,0x22,0x11,0x4D,0x81,0x01,0x01,0x00,0x00,
0x00,0x40,0x21,0x13,0x09,0x05,0x41,0x81,0x7F,0x01,0x05,0x09,0x13,0x62,0x00,0x00,

/*-- 文字: 统 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16   --*/
0x20,0x30,0x2C,0xA3,0x60,0x10,0x84,0xC4,0xA4,0x9D,0x86,0x84,0xA4,0xC4,0x84,0x00,
0x20,0x22,0x23,0x12,0x12,0x92,0x40,0x30,0x0F,0x00,0x00,0x3F,0x40,0x41,0x70,0x00,

/*****空白,用于区分显示内容的头和尾*****/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

};

uint k=0,j;      //移位变量,k:移位个数
uint a=0;      //用于软件延时  
ulong s=(sum+1)*ziti;   //s为全部列数
uchar disbuf[16][2];     //定义显示缓冲区(16行两列的二维数组以开辟1个16*16汉字的空间)
bit   move_st;    //移动标志

/*****可变延时*****/
void delay(void)   

{
uchar i;
for(i=0;i }

/*****初始化子程序*****/
void init(void)  

{   
   TMOD=0x1;
   TH0=0xfc;
   TL0=0x18;
}

/*****计数器中断程序*****/
void timer0(void) interrupt 1    //中断处理
{
   TH0=0xfc;
   TL0=0x18;
   a++;         
}

/*****汉字循环显示*****/
void run_move(void)
{
uchar k1,k2;
if(a>=move_speed) //move_speed控制移动速度
{   
      
   if(k>s-ziti-1)k=0; //整屏移动列数  
   k1=k/ziti;
   k2=k%ziti;
   j=ziti*2*k1+k2;   //显示指针
   k++;
   move_st=1;
   a=0;
}
}

/*****装载显示数据至缓冲区*****/
void load_hanzi(void)
{  
uchar i;
run_move();
if(move_st)
{
   for(i=0;i<15;i++)
   {
    disbuf[0]=disbuf[i+1][0];//移位处理
    disbuf[1]=disbuf[i+1][1];//移位处理
   }
   disbuf[15][0]=hanzi[j];
   disbuf[15][1]=(hanzi[ziti+j]);   
   move_st=0;      
}  
}

/*****扫描显示数据缓冲区的内容*****/
void display(void)
{  
uchar i;
for (i=0;i<16;i++)
{
   lie=i;      
   hang1=disbuf[0];
   hang2=disbuf[1];
   delay();
   hang1=0;
   hang2=0;      
}
}

/*****主程序*****/
void main (void)
{    init();
      EA=1; //开中断
     TR0=1;         
     ET0=1;      
    while(1)
{ load_hanzi();
     display(); }
}
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

10
 
先前用面包板搭了一个
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表