论文格式
电气工程 会计论文 金融论文 国际贸易 财务管理 人力资源 轻化工程 德语论文 工程管理 文化产业管理 信息计算科学 电气自动化 历史论文
机械设计 电子通信 英语论文 物流论文 电子商务 法律论文 工商管理 旅游管理 市场营销 电视制片管理 材料科学工程 汉语言文学 免费获取
制药工程 生物工程 包装工程 模具设计 测控专业 工业工程 教育管理 行政管理 应用物理 电子信息工程 服装设计工程 教育技术学 论文降重
通信工程 电子机电 印刷工程 土木工程 交通工程 食品科学 艺术设计 新闻专业 信息管理 给水排水工程 化学工程工艺 推广赚积分 付款方式
  • 首页 |
  • 毕业论文 |
  • 论文格式 |
  • 个人简历 |
  • 工作总结 |
  • 入党申请书 |
  • 求职信 |
  • 入团申请书 |
  • 工作计划 |
  • 免费论文 |
  • 现成论文 |
  • 论文同学网 |
搜索 高级搜索

当前位置:论文格式网 -> 免费论文 -> 其他论文

实时数字电子时钟设计及毕业设计总结(二)

本论文在其他论文栏目,由论文格式网整理,转载请注明来源www.lwgsw.com,更多论文,请点论文格式范文查看
 2. Micrel Inc. QwikRadio TM Low Power UHF Receiver[A] .2001,8
 3. 薛晓书. 单片微机原理及接口技术[M].西安石油大学 2002,3
 4. 黄智伟,朱卫华. 单片机与嵌入式系统应用[M].南华大学.2005,3
 5. 付浩.AT89C2051单片机高速串行输出口设计[A].淮阴师范学院 2004,10
 6. 周志德 单片机原理及应用 高等教育出版社 2001,6
 7. 徐淑华 单片微型机原理及应用 哈尔滨工业大学出版社 1990
 8. 吴微,文军. 单片机原理及制作 武汉大学出版社 1991
 9. 薛钧义,张彦斌. MCS-51、96系列单片微型计算机及其应用 西安交通大学出版社 1990
 10.何立民. MCS-51系列单片机应用系统设计系统配置与接口技术 北京航空航天大学出版社 1990
 附录一 系统硬件电路图
附录二:程序清单
    void main(void)
{
 sys_init();     /* 系统初始化 */
 t0_init();     /* 定时器初始化 */
 t1_init();
 uart_init();    /* 串口初始化 */
 buf[0]=0x0a;    /* "P."的段码送显示缓冲区 */
 buf[1]=0x0b;
 buf[2]=0x0b;
 buf[3]=0x0b;
 display();     /* 显示待机符P. */
 settime();     /* 等待设置当前时间 */
 display();     /* 带闪烁后要加显,否则会出现尾位不显的现象 */
 TR0=1;      /* 设置完后开始走时,启动定时器T0 */
 ET0=1;      /* 允许T0溢出中断 */
 while(1)
 {
  if(fresh)    /* 判是否要刷新显示(分或时变化) */
  {
   buf[0]=hourh;  /* 是,则新的时间送显示缓冲区 */
   buf[1]=hourl;
   buf[2]=minuh;
   buf[3]=minul;
   display();   /* 显示刷新 */
   if(sec)    /* 判秒指示要刷新否 */
   {
    sec=0;   /* 是,则刷新(闪烁) */
    L1=!L1;
    L2=!L2;
    delay20ms(); /* 点亮时间不能太长,否则影响秒指示,短则太暗 */
   }
  }
  else
  {
   if(sec)
   {
    sec=0;
    L1=!L1;
    L2=!L2;
    delay20ms();
   }
  }
 }
 }
void display(void)
{
 uchar out; 
 DISPCON=1;    /* 关闭显示,防止传送数据期间闪烁 */
 out=seg[buf[0]];  /* 取出高位时段码 */
 SBUF=out;    /* 送入74LS164 */
 while(!TI);    /* 等待发送完成 */
 TI=0;
 out=seg[buf[1]];  /* 取出低位时段码 */
 out&=0xfe;    /* 显示时分分隔符:(这里用.代替)*/
 SBUF=out;
 while(!TI);
 TI=0;
 out=seg[buf[2]];  /* 分*/
 SBUF=out;
 while(!TI);
 TI=0;
 out=seg[buf[3]];
 SBUF=out;
 while(!TI);
 TI=0;
 DISPCON=0;    /* 所有数据已送入后开显示*/
 }
 buf[0]=hourh;     /* 将目前设定的参数送显示缓冲区 */
 buf[1]=hourl;
 buf[2]=minuh;
 buf[3]=minul;
 if(ss)        /* 这部分程序实现了当前位闪烁 */
  {
  switch(setflag)    /* 判当前设定位 */
  {
   case 0x01:  buf[0]=0x0b;/* 全暗代码 */
      break;
   case 0x02:  buf[1]=0x0b;
      break;
   case 0x04:  buf[2]=0x0b;
      break;
   case 0x08:  buf[3]=0x0b;
       break;

  }
 }
 display();

 void timer1(void) interrupt 3 using 1
{
 TH1=0x3c;    /* 100ms定时常数 */
 TL1=0xb0;
 count++;    /* 中断次数加1*/
 if(count!=5)   /* 判到10次(1s)否,不到直接返回 */
  return;
 ss=!ss;     /* ss闪烁标志求反 */
 count=0;
 }
void settime(void)
{
 uchar i;
 while(S1);    /* 等待S1键开始设置 */
 for(i=0;i<4;i++)
  delay20ms();  /* 延时去抖动 */
 while(S1);
 setflag=0;
 ss=0;
 hh=1;     /* 设置当前位标志 */

 TR1=1;     /* 启动定时器T1 */
 ET1=1;     /* 允许T1溢出中断 */
 
 void settime(void)
{
 uchar i;
 while(S1);    /* 等待S1键开始设置 */
 for(i=0;i<4;i++)
  delay20ms();  /* 延时去抖动 */
 while(S1);
 setflag=0;
 ss=0;
 hh=1;     /* 设置当前位标志 */

 TR1=1;     /* 启动定时器T1 */
 ET1=1;     /* 允许T1溢出中断 */
       break;
    case 0x04:  buf[2]=0x0b;
       break;
    case 0x08:  buf[3]=0x0b;
       break;
   }
 }
  /****************************************************/
  display();
  if(S1) goto sett_1;
  for(i=0;i<4;i++)
   delay20ms(); /* 延时去抖动 */
  if(S1) goto sett_1;
  if(ml)
  { 
   TR1=0;     /* 关闭定时器T1 */
    ET1=0;     /* 禁止T1溢出中断 */
 buf[0]=hourh;
   buf[1]=hourl;
   buf[2]=minuh;
   buf[3]=minul;
   return;  /* 如果当前编辑的份低位,则按S1键结束设定 */
  }
  setflag<<=1;  /* 当前位右移(标志左移1位) */
  continue;
  sett_1: if(S2) continue;
    for(i=0;i<4;i++)
      delay20ms(); /* 延时去抖动 */

    if(S2) continue;
    if(!hh) goto sett_2;
    { hourh++;  /* 时高位加1处理 */
     if(hourh!=2) continue;
     hourh=0;  /* 时高位只能是0,1 */
     continue;
    }
  sett_2: if(!hl) goto sett_3;
    {
      hourl++;/* 时低位加1处理,高位为0,可以是0~9,否则,只能0~2 */

     if(hourh) goto sett_20;
     if(hourl==10) goto sett_21;
     continue;
     sett_21: hourl=0;
        continue;
     sett_20: if(hourl==3) goto sett_22;
        continue;
     sett_22: hourl=0;
        continue;
     }

  sett_3: if(!mh) goto sett_4;
    { minuh++;  /* 分高位加1处理,只能是0~5 */
     if(minuh==6) goto sett_30;
     continue;
     sett_30: minuh=0;
        continue;
    }
  sett_4: minul++;   /* 分低位加1处理,只能是0~9 */
    if(minul==10) goto sett_40;
    continue;
    sett_40: minul=0;
        continue;

  }

 } 
#include  "REG51.H"
#define  uchar unsigned char
#define  PSEG 0x30 /* P.的段码 */

/* 0~9和P,暗的的段码(共阳数码管) */
uchar code seg[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,0x30,0xff};
/*****************************************************************
;74LS164的3 4 5 6 10 11 12 13 对应数码管的A,B,C,D,E,F,G,DP
DB  0C0h,0F9H,0A4H,0B0H,99H 
; DB  92H,82H,0F8H,80H,90H
*****************************************************************/

/* 输入输出定义 */
sbit  DISPCON =P3^2;  /* 显示控制 */
sbit  S1  =P1^3;  /* 设置键 */
 sbit  S2  =P1^2;  /* 数字+1键 */
 
sbit  L1  =P1^7;  /* L1,L2构成秒指示":" */
sbit  L2  =P1^6; 

/* 全局变量定义 */
uchar buf[4];    /* 显示缓冲区 */
uchar hourh;    /* BCD时钟各位 */
 uchar hourl;

uchar minuh;
uchar minul;
uchar   second;    /* 秒变量 */

uchar count;    /* 溢出中断计数器 */
uchar bdata setflag;  /* 设置用标志字节 */
uchar bdata uflag;    /* 通用标志字节 */  

/* 位变量定义 */ 
 /* 以下4个位变量在setflag中,便于移位处理 */

sbit hh =setflag^0;  /* 当前设置位标志 */
sbit hl =setflag^1;
sbit mh =setflag^2;
sbit ml =setflag^3;

/* 以下位变量在uflag */
sbit fresh =uflag^0; /* 显示刷新标志 */
sbit ss  =uflag^1; /* 位闪烁标志 */
sbit sec  =uflag^2; /* 秒指示标志 */
 sbit warning =uflag^3; /* 定时标志 */


/*-----------------------------------------------------------------*/
sbit tfix =uflag^4; /* 开始修正标志 */
#define  N 60   /* 误差值,单位:1/10秒,默认为0,即不修正 */
/*-----------------------------------------------------------------*/

/* 函数说明 */
void sys_init(void);
void t0_init(void);
void uart_init(void);
void display(void);
void delay20ms(void) ;
void settime(void);

void t1_init(void);

/*****************************************************************
;时钟主函数:main()
;定时器T0工作于中断方式
;一旦走时开始,无法进行设置。如要重新设置,则必须复位
;24小时制
;如果某74LS164的1,2脚与其他74LS164的1,2脚错连了,则会出现同显示的状态
;
;带编辑设定位闪烁功能和走时误差自动纠正功能.与此相关的函数是:
;  settime(),位闪烁标志ss
;  timer1(),在settime()中启动,每1s将标志ss求反,达到闪烁目的
;*******************************************************************
;******************************************************************/
void main(void)
{
 sys_init();     
 t0_init();     
 t1_init();
 uart_init();    
 buf[0]=0x0a;    
 buf[1]=0x0b;
 buf[2]=0x0b;
 buf[3]=0x0b;
 display();     
 settime();     
 display();     
 TR0=1;      
 ET0=1;      
 while(1)
 {
  if(fresh)    
  {
   buf[0]=hourh;  
   buf[1]=hourl;
   buf[2]=minuh;
   buf[3]=minul;
   display();   
   if(sec)     
   {
    sec=0;   
    L1=!L1;
    L2=!L2;
    delay20ms(); 
   }
  }
  else
  {
   if(sec)
   {
    sec=0;
    L1=!L1;
    L2=!L2;
    delay20ms();
   }
  }
 }
}
/*****************************************************************
;****************************************************************/
void display(void)
{
 uchar out; 
 DISPCON=1;    
 out=seg[buf[0]];  
 SBUF=out;    
 while(!TI);    
 TI=0;

首页 上一页 1 2 3 下一页 尾页 2/3/3


相关论文
上一篇:农村义务教育应对税费改革的策略 下一篇:上岗实践周记及小结
Tags:实时 数字 电子 时钟 设计 毕业设计 总结 【收藏】 【返回顶部】
人力资源论文
金融论文
会计论文
财务论文
法律论文
物流论文
工商管理论文
其他论文
保险学免费论文
财政学免费论文
工程管理免费论文
经济学免费论文
市场营销免费论文
投资学免费论文
信息管理免费论文
行政管理免费论文
财务会计论文格式
数学教育论文格式
数学与应用数学论文
物流论文格式范文
财务管理论文格式
营销论文格式范文
人力资源论文格式
电子商务毕业论文
法律专业毕业论文
工商管理毕业论文
汉语言文学论文
计算机毕业论文
教育管理毕业论文
现代教育技术论文
小学教育毕业论文
心理学毕业论文
学前教育毕业论文
中文系文学论文
最新文章
热门文章
计算机论文
推荐文章

本站部分文章来自网络,如发现侵犯了您的权益,请联系指出,本站及时确认删除 E-mail:349991040@qq.com

论文格式网(www.lwgsw.com--论文格式网拼音首字母组合)提供其他论文毕业论文格式,论文格式范文,毕业论文范文

Copyright@ 2010-2018 LWGSW.com 论文格式网 版权所有