老古开发网首页
导航:老古开发网首页文章索引索引第2185页文章分类单片机第45页→[motorola的电子钟(转)]
| -文章搜索 - 最新文章 - |

第2800篇:motorola的电子钟(转)

发布时间:2006年8月6日 点击次数:1029
来源:   作者:
 
今天试着添加段代码吧。运行于mc68hc908gp32上的电子钟,显示在zlg7289的八个七段显示器上。

声控电子钟初具有普通钟的功能外,还具有15秒钟休眠功能,此时当接收到触发端触发后,点亮显示屏,显示当前时间并在15秒后关闭。以节省电能。亦可晚上睡眠时使用。

#include <hidef.h> /* for EnableInterrupts macro */
#include <MC68HC908GP32.h> /* include peripheral declarations */
unsigned char counter=0;
unsigned char second,minute,hour;
unsigned char second0,second1;
unsigned char minute0,minute1;
unsigned char hour0,hour1;
unsigned char gleaming,task;
unsigned char hs;
#define TskSetHour 0
#define TskSetMinute 1
#define TskSetSecond 2
#define TskPrint 3
#define TskSleep 4

void delay(int);
void ScreenOpen(void);
void IncreaseTime(void);
void Translate(void);
void send_command(unsigned char);
void send_single_command(unsigned char);
void send_double_command(unsigned char);
void PrintToZLG7289(void);
void GleamingHour(void);
void GleamingMinute(void);
void GleamingSecond(void);
void GleamingNone(void);
void ChangeStatus(void);
void Increase(void);
void Decrease(void);
void boot(void);

void boot(void)
{/*PLL初始化*/
    PCTL_BCS=0;
 PCTL=0x00;     //禁止PLL
 PBWC=0x80;     //自动控制方式
 PMSH=0x02;     //反馈分频器因子高位N=02H
 PMSL=0x58;     //反馈分频器因子低位N=58H
 PMRS=0x80;     //因子L=80H
 PCTL=0x22;     //P=0,E=2,启动PLL
 PCTL_PLLON=1;  //启动压控振荡器时钟
 PBWC_LOCK=0;   //LOCK位为0,频率未稳定,等待
 PCTL_BCS=1;    //频率已锁定,选PLL作为时钟源
}


void main(void) {
 CONFIG2=0x01;  //stop模式下禁止振荡器工作;内部总线时钟用作SCI的时钟
 CONFIG1=0x3d;  //COP溢出范围在2^18-2^4个CGMXCLK时钟周期;禁止COP模块
 DisableInterrupts;
 boot();
 T1SC=0b01000110;
 T1MODH=0x96;
 T1MODL=0x00;
 
 DDRA=0x00;
 DDRC=0x0f;
 DDRB=0xff;
 DDRD=0xff;
 DDRE=0xff;
 INTKBSCR_MODEK = 1;  //选择触发方式为下降沿和低电平
   INTKBSCR_IMASKK = 1; //禁止键盘中断
   INTKBIER = 0xff;       //A口都作为键盘输入
   INTKBSCR_ACKK = 1;  //键盘响应置1,用于清除IREQ
   INTKBSCR_IMASKK = 0;   //允许键盘中断
 hour=16;
 minute=27;
 second=55;
 hs=0;
 gleaming=0x0a;
 task=TskPrint;
 PTC_PTC0=1;
 GleamingNone();
 EnableInterrupts;
 for(;;);
}

void delay(int k){
 int i;
 for (i=0;i<=k;i++);
}

void ScreenOpen(void){
 char i;
 if (task==TskSleep) counter++;
 if (counter==15) {
  for(i=0;i<=8;i++){
   delay(30000);
   delay(30000);
   send_single_command(0xa1);
   counter=0;
  }
  PTC_PTC0=0;
 }
}


void IncreaseTime(void){
 second++;
 if (second==60){
 second=0;
 minute++;
  if (minute==60){
  minute=0;
  hour++;
   if (hour==24){
    hour=0;
    }
  }
 }
}

void Translate(void){
 second1=second/10;
 second0=second-second1*10;
 minute1=minute/10;
 minute0=minute-minute1*10;
 hour1=hour/10;
 hour0=hour-hour1*10;
}

void send_command(unsigned char i_command)
{
   unsigned char i;
   for(i=0; i<8; i++)
    {
      PTC_PTC1=((i_command&0x80)==0x80?1:0);
      delay(0);
      PTC_PTC3=1;           //  clk=1;
      delay(0);
      PTC_PTC3=0;            //  clk=0;
      i_command=i_command<<1;
    }
}

void send_single_command(unsigned char command){
  PTC_PTC2=0;       //enable=0
  delay(0);
  send_command(command);
  PTC_PTC2=1;       //enable=1
  delay(0);
}

void send_double_command(unsigned char command1,unsigned char command2){
  PTC_PTC2=0;       //enable=0
  delay(0);
  send_command(command1);
  send_command(command2);
  PTC_PTC2=1;       //enable=1
  delay(0);
}

void PrintToZLG7289(void){
 if (gleaming==0x0f) gleaming=0x0a;
 else gleaming=0x0f;
 
 send_double_command(0x80,second0);
 send_double_command(0x81,second1);
 send_double_command(0x82,gleaming);
 send_double_command(0x83,minute0);
 send_double_command(0x84,minute1);
 send_double_command(0x85,gleaming);
 send_double_command(0x86,hour0);
 send_double_command(0x87,hour1);
}
void GleamingHour(void){
 send_double_command(0x88,0b00111111);
}
void GleamingMinute(void){
 send_double_command(0x88,0b11100111);
}
void GleamingSecond(void){
 send_double_command(0x88,0b11111100);
}
void GleamingNone(void){
 send_double_command(0x88,0b11111111);
}
void ChangeStatus(void){
 if (task==TskPrint) {
 T1SC_TOIE=0;
 GleamingHour(); 
 task=TskSetHour;
 }
 else if (task==TskSetHour) {
 task=TskSetMinute;
 GleamingMinute();
 }
 else if (task==TskSetMinute) {
 task=TskSetSecond;
 GleamingSecond();
 }
 else if (task==TskSetSecond) {
 task=TskSleep;
 counter=14;
 ScreenOpen();
 GleamingNone(); 
 T1SC_TOIE=1;
 }
 else if (task==TskSleep){
 task=TskPrint;
 PTC_PTC0=1;
 GleamingNone(); 
 counter=0;
 }
}

void Increase(void){
 if (task==TskSetHour) {
  hour++;
  if (hour==24) hour=0;
  Translate();
  PrintToZLG7289();
 }
 if (task==TskSetMinute) {
  minute++;
  if (minute==60) minute=0;
  Translate();
  PrintToZLG7289();
 }
 if (task==TskSetSecond) {
  second++;
  if (second==60) second=0;
  Translate();
  PrintToZLG7289();
 }
}
void Decrease(void){
 if (task==TskSetHour) {
  if (hour==0) hour=24;
  hour--;
  Translate();
  PrintToZLG7289();
 }
 if (task==TskSetMinute) {
  if (minute==0) minute=60;
  minute--;
  Translate();
  PrintToZLG7289();
 }
 if (task==TskSetSecond) {
  if (second==0) second=60;
  second--;
  Translate();
  PrintToZLG7289();
 }
}

interrupt 6 void OverFlow(){
T1SC_TOIE=0;
T1SC_TOF=0;
if (hs==0){
 hs=1;
}
else {
 hs=0;
 ScreenOpen();
 IncreaseTime();
 Translate();
 PrintToZLG7289();
}
T1SC_TOIE=1;
}
interrupt 15 void KBI_ISR(void)
{
  unsigned char i;
     INTKBSCR_IMASKK = 1;  //屏蔽键盘中断
     delay(30000);
  if (task!=TskPrint && task!=TskSleep){  
   if (PTA_PTA2==0)
    Decrease();
   if (PTA_PTA3==0)
    Increase();
  }
  if (PTA_PTA0==0)
    ChangeStatus();
  if (PTA_PTA4==0) {
   PTC_PTC0=1;
   counter=0;
  }
  INTKBSCR_ACKK = 1;    //清除中断确认
  INTKBSCR_IMASKK = 0;  //开启键盘中断
}

其硬件接线?图片怎么传不上去呢?


欢迎进入老古论坛进行讨论
[单片机] 相关文章:
全系列三极管应用参数
简介:
名 称 封装 极性 功 能 耐 压 电 流 功 率 频 率 配对管 D633 28 NPN 音频功放开关 100V 7A 40W 达林顿 9013 21 NPN 低频放大 50V 0.5A 0.625W 9012 9014 21 NPN 低噪放大 50V 0.1A 0.4W 150HMZ 9015 9015 21 PNP 低噪放大 50V 0.1A 0.4W 150MHZ 9014 9018 21 ......

单片机笔记——显示驱动
基于MAX155的同步数据采集系统
硬件工程师必看---必杀技学习(转)
模拟串口程序
 
下一个:[新闻热点]DRAM内存销售台湾地区稳坐出货大户(图)
简介:
  来自存储器市场研究机构DRAMeXchange的最新研究数据,2006年第一季度全球DRAM内存条实际销售额为49.2亿美元。除掉DRAM原厂直接提供PC OEM的内存条出货,其中经由内存条厂商出货至零售市场及PC OEM的销售额为25.5亿美元。而内存条厂商25.5亿美元销售额中,自有品牌业务占内存条厂商营收比重高达73%。   DRAMeXchange进一步指出,从整体内存条产业出货型态观察,2006年第一季度DDR2内存条销售仅占......

上一个:[单片机]电路中的"地"【转载】

老古开发网版权所有 2006年9月 asp.Net V2.0 设计:老古
页面缓存:30分钟 执行时间:47毫秒