22118|45

367

帖子

0

TA的资源

裸片初长成(高级)

楼主
 

旋转的时钟( 源码+电路+图片)(附件含原理图) [复制链接]






//**************************************
//**************************************
// Clock 16Mhz
// Version 1.0 Janvier 2002
// Sylvain Bissonnette
//**************************************

//**************************************
//            I N C L U D E
//**************************************
#i nclude
#i nclude

//**************************************
//            D E F I N E
//**************************************
#define TRUE      0x01
#define FALSE     0x00
#define ANALOG    0x01
#define DIGITAL   0x02

//**************************************
//  I N T E R R U P T   H A N D L E R
//**************************************
#pragma interrupt_handler Crossing_interrupt:2
#pragma interrupt_handler IR_interrupt:4
#pragma interrupt_handler Degre_interrupt:5
#pragma interrupt_handler Ticker_interrupt:7

//**************************************
//          P R O T O T Y P E
//**************************************

void Crossing_interrupt(void);
void Degre_interrupt(void);
void Time(unsigned char);
void IR_interrupt(void);
void Ticker_interrupt(void);
void Display(void);
void CopyData(int Value);
void CopyDot(void);

//**************************************
//   G L O B A L   V A R I A B L E
//**************************************

int WeelPosition;
unsigned char Pos;
unsigned int Adder;

unsigned char LatchedIrData;

unsigned char Sec;
unsigned char Min;
unsigned char Hrs;

int SecComp;
int MinComp;
int HrsComp;

unsigned char ClockStyle;

unsigned char TimeString[50];
unsigned char *TimeStringPtr;


unsigned char i;

//**************************************
//           C O N S T A N T
//**************************************
const unsigned char table[12][6] = {{ 0x3e, 0x41, 0x41, 0x41, 0x3e, 0x00 }, // 0
                                    { 0x00, 0x21, 0x7f, 0x01, 0x00, 0x00  }, // 1
                                    { 0x21, 0x43, 0x45, 0x49, 0x31, 0x00  }, // 2
                                    { 0x42, 0x41, 0x51, 0x69, 0x46, 0x00  }, // 3
                                    { 0x0c, 0x14, 0x24, 0x5f, 0x04, 0x00  }, // 4
                                    { 0x72, 0x51, 0x51, 0x51, 0x4e, 0x00  }, // 5
                                    { 0x1e, 0x29, 0x49, 0x49, 0x06, 0x00  }, // 6
                                    { 0x40, 0x47, 0x48, 0x50, 0x60, 0x00  }, // 7
                                    { 0x36, 0x49, 0x49, 0x49, 0x36, 0x00  }, // 8
                                    { 0x30, 0x49, 0x49, 0x4a, 0x3c, 0x00  }, // 9
                                    { 0x00, 0x36, 0x36, 0x00, 0x00, 0x00  }, // :
                                    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00  }};// space


//**************************************
//            M A I N
//**************************************
void main()
{
WDTCR = 0x0e;        // Enable WatchDog at 0.97 sec

PORTD = 0x0d;        // Pull up on PD2&D3 & Led White ON
DDRD = 0x03;         // PD0-O PD1-O PD2-I PD3-I PD4-I PD5-I PD6-I PD7-I

//INT 0
MCUCR = 0x02;        // Int0 generate int on falling eadge
GIMSK = 0x40;        // Int0 enable

//Timer0
TCCR0 = 0x05;        // Timer0 / 1024

//Timer1
TCCR1B = 0x42;       // Timer1 / 8 & Input Capture on Rising eadge
TIMSK = 0x4a;        // int enable on Timer1 Compare Match
                     // int enable on Timer 1 Input Capture
                     // int enable on Timer0 Overflow
PORTB = 0x00;
DDRB = 0xff;         // PB0-7 as output

Hrs = 0;
Min = 0;
Sec = 0;
ClockStyle = ANALOG;

SEI();

while(1)
   {
   asm("WDR");
   for (i=0;i<200;i++);
   if ((LatchedIrData == 0xbb) || (LatchedIrData == 0x92)) Time(TRUE);
   if ((LatchedIrData == 0xb3) || (LatchedIrData == 0xb0)) ClockStyle = DIGITAL;
   if ((LatchedIrData == 0xb4) || (LatchedIrData == 0xb1)) ClockStyle = ANALOG;

   LatchedIrData = 0;
   }
}

/**********************************************************

Name:       void Time(void)

Description:   

Input:         none

Output:        none

Misc:      

**********************************************************/
void Time(unsigned char Fast)
{
if (Fast == FALSE) Sec++;
else Sec += 60;
if (Sec > 59)
   {
   Sec = 0;
   Min++;
   if (Min > 59)
        {
     Min = 0;
     Hrs++;
     if (Hrs > 11)
       {
       Hrs = 0;
       }
     }
   }

if (ClockStyle == ANALOG)
   {
   SecComp = Sec*6;
   MinComp = Min*6;
   HrsComp = (Hrs*30)+(Min/2);
   }
else
   {
   TimeStringPtr = &TimeString[0];
   CopyData(Hrs);
   CopyDot();
   CopyData(Min);
   CopyDot();
   CopyData(Sec);
   }
}

/**********************************************************

Name:       void CopyData(int Value)

Description:   

Input:         none

Output:        none

Misc:      

**********************************************************/

void CopyData(int Value)
{
if (Value < 10)
   {
   for (i=0;i<6;i++) *TimeStringPtr++ = table[0];
   for (i=0;i<6;i++) *TimeStringPtr++ = table[Value];
   }
else
   {
   for (i=0;i<6;i++) *TimeStringPtr++ = table[Value/10];
   for (i=0;i<6;i++) *TimeStringPtr++ = table[Value-((Value/10)*10)];
   }
}

/**********************************************************

Name:       void CopySpace(void)

Description:   

Input:         none

Output:        none

Misc:      

**********************************************************/

void CopyDot(void)
{
for (i=0;i<6;i++) *TimeStringPtr++ = table[10];
}

/**********************************************************

Name:       void Crossing_interrupt(void

Description:   

Input:         none

Output:        none

Misc:      

**********************************************************/
void Crossing_interrupt(void)
{
static unsigned int LastCount;
static unsigned int TotalCount;
static int Latch;
static unsigned char Lap;

Latch = TCNT1;
TotalCount = Latch - LastCount;
LastCount = Latch;
Lap++;
if (Lap > 250)
   {
   Adder = TotalCount / 378;
   Lap = 0;
   }

WeelPosition = 0;
OCR1 = Latch + Adder;
TIFR |= 0x80;
Display();
}

/**********************************************************

Name:       void Degre_interrupt(void)

Description:   

Input:         none

Output:        none

Misc:      

**********************************************************/
void Degre_interrupt(void)
{
OCR1 = TCNT1 + Adder;
Display();
}

/**********************************************************

Name:       void Display(void)

Description:   

Input:         none

Output:        none

Misc:      

**********************************************************/

void Display(void)
{
PORTB = 0x00;

if (ClockStyle == ANALOG)
   {
   if (WeelPosition == HrsComp) PORTB = 0x80;
   if (WeelPosition == MinComp) PORTB = 0xff;
   if (WeelPosition == SecComp) PORTB |= 0x03;

   if ((WeelPosition == 0) ||
       (WeelPosition == 30) ||
       (WeelPosition == 60) ||
       (WeelPosition == 90) ||
       (WeelPosition == 120) ||
       (WeelPosition == 150) ||
       (WeelPosition == 180) ||
       (WeelPosition == 210) ||
       (WeelPosition == 240) ||
       (WeelPosition == 270) ||
       (WeelPosition == 300) ||
       (WeelPosition == 330)) PORTB |= 0x01;
   }
else
   {
   Pos = ((WeelPosition-100) / 3);
   if (Pos < 49)
        {
     PORTB = TimeString[48-Pos];
     }
   }
WeelPosition++;
}

/**********************************************************

Name:       void IR_interrupt(void)

Description:   This routine is called whenever a rising edge (beginning
                of valid IR signal) is received.

                - The data codes are sent using pulse coding.
                - Each packet has 12 bits and a header.
                - The basic time period T = 550us.
                - The header length = 4T (2.2ms)
                - 0 = pulse with length T followed by space of length T.
                - 1 = pulse with length 2T followed by space of length T.
                - The last 5 bits represent the Addess.
                - The first 7 bits represent the command.
                - A packet is transmitted every 25ms while a button is down.

Input:         none     

Output:        Global variable LatchedIrData

Misc:       Sony VCR protocol

**********************************************************/
void IR_interrupt(void)
{
static unsigned int LastCapture;
unsigned int PulseWidth;
static unsigned int IrPulseCount;
static unsigned int IrData;

PulseWidth = ICR1 - LastCapture;
LastCapture = ICR1;


if (PulseWidth > 4000)
   {
   IrPulseCount = 0;
   IrData = 0;
   }
else
   {
   IrData = IrData >> 1;
   if (PulseWidth > 2800) IrData = IrData | 0x8000;
   IrPulseCount++;
   if (IrPulseCount == 12) LatchedIrData = ((IrData >> 4) & 0x00ff);
   }
}

/**********************************************************

Name:       void Ticker_interrupt(void)

Description:   

Input:         none

Output:        none

Misc:      

**********************************************************/
void Ticker_interrupt(void)
{
static unsigned char Tick;
Tick++;
if (Tick > 62)
   {
   Time(FALSE);
   Tick = 0;
   }
TCNT0 = 0x04; // reload counter

1226432497.pdf

14.94 KB, 下载次数: 655

pdf

此帖出自单片机论坛

最新回复

这个好东东,学习了  详情 回复 发表于 2015-10-20 16:35
点赞 关注
 

回复
举报

1

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

回复:旋转的时钟( 源码+电路+图片)(附件含原理图)

好东西 ,附件怎么下啊,下不了啊?
此帖出自单片机论坛
 
 

回复

367

帖子

0

TA的资源

裸片初长成(高级)

板凳
 

回复:旋转的时钟( 源码+电路+图片)(附件含原理图)

可以下啊,你遇到什么困难了呢?
此帖出自单片机论坛
 
 
 

回复

367

帖子

0

TA的资源

裸片初长成(高级)

4
 

回复:旋转的时钟( 源码+电路+图片)(附件含原理图)

点一下文件名右边PDF格式的文件就行啦
此帖出自单片机论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

5
 

回复:旋转的时钟( 源码+电路+图片)(附件含原理图)

漂亮,早在网上看到这类的,口水都成河了…… “Clock 16Mhz”是什么意思?LED咋接的?有套件供应吗?
此帖出自单片机论坛
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(中级)

6
 

回复:旋转的时钟( 源码+电路+图片)(附件含原理图)

呵呵,银行显示信息的就用的这个时钟
此帖出自单片机论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

7
 

回复:旋转的时钟( 源码+电路+图片)(附件含原理图)

LZ怎么联系你呀?很感兴趣,可以提供更详细的资料或是套件吗? daviyzhh123@sina.com
此帖出自单片机论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

8
 

回复: 旋转的时钟( 源码+电路+图片)(附件含原理图)

看看.................
此帖出自单片机论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 

很好啊 太好了 我很喜欢啊 啊啊啊啊啊

很好啊 太好了 我很喜欢啊  啊啊啊啊啊   很好啊 太好了 我很喜欢啊  啊啊啊啊啊   很好啊 太好了 我很喜欢啊  啊啊啊啊啊   很好啊 太好了 我很喜欢啊  啊啊啊啊啊   很好啊 太好了 我很喜欢啊  啊啊啊啊啊
此帖出自单片机论坛
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

10
 

Re: 旋转的时钟( 源码+电路+图片)(附件含原理图)

sddddaaaaaaaaaaaaaaaaaaaaaaaaaaaa
此帖出自单片机论坛
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

11
 

Re: 旋转的时钟( 源码+电路+图片)(附件含原理图)

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
此帖出自单片机论坛
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

12
 

Re: 旋转的时钟( 源码+电路+图片)(附件含原理图)

DDDDDDDDDDDDDDDDDDDDDDDDDDDDSSSS
此帖出自单片机论坛
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

13
 

Re: 旋转的时钟( 源码+电路+图片)(附件含原理图)

DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
此帖出自单片机论坛
 
 
 

回复

41

帖子

0

TA的资源

纯净的硅(初级)

14
 

Re: 旋转的时钟( 源码+电路+图片)(附件含原理图)

很喜欢啊 啊啊啊啊
此帖出自单片机论坛
 
 
 

回复

440

帖子

0

TA的资源

五彩晶圆(高级)

15
 

Re: 旋转的时钟( 源码+电路+图片)(附件含原理图)

下了哦,希望很有用,看看来
此帖出自单片机论坛
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

16
 

Re: 旋转的时钟( 源码+电路+图片)(附件含原理图)

look look!!!!!!!!!!!!!!!
此帖出自单片机论坛
 
 
 

回复

188

帖子

0

TA的资源

五彩晶圆(中级)

17
 

Re: 旋转的时钟( 源码+电路+图片)(附件含原理图)

lou zhu shou lei,
du  zhe zhou hui.
lun tan xing  wang,
shou ru wang qian.
此帖出自单片机论坛
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(高级)

18
 

Re: 旋转的时钟( 源码+电路+图片)(附件含原理图)

没有程序阿,哪里找?
此帖出自单片机论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

19
 

Re: 旋转的时钟( 源码+电路+图片)(附件含原理图)

厉害啊
不错
此帖出自单片机论坛
 
 
 

回复

30

帖子

0

TA的资源

纯净的硅(初级)

20
 

Re: 旋转的时钟( 源码+电路+图片)(附件含原理图)

好东西!!!
努力回帖,挣钱下载!!!
此帖出自单片机论坛
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表