4203|6

633

帖子

0

TA的资源

裸片初长成(中级)

楼主
 

转帖:AVR M8 做的超大数码管时钟 有半米多长了。 [复制链接]

















最新回复

值得收藏  详情 回复 发表于 2010-1-29 09:39
点赞 关注
个人签名DIY是一种信仰~~
 

回复
举报

633

帖子

0

TA的资源

裸片初长成(中级)

沙发
 
by starli 李明星
来源:ouravr

原理图: Clock-System.pdf (49.69 KB, 下载次数: 25)

关键代码



  1. #include "includes.h"

  2. typedef enum
  3. {
  4. SYS_CLOCK_RUN,
  5. SYS_CLOCK_SET,
  6. }SYSTEM_STATE;

  7. static SYSTEM_STATE SystemFlag;

  8. static void SysTem_ClockRun(void);
  9. static void System_ClockSet(void);


  10. static void (*pFunc_Sys[])(void)=
  11. {
  12. SysTem_ClockRun,
  13. System_ClockSet,
  14. };


  15. typedef struct  
  16. {
  17. unsigned char buff[DISP_NUM>>1];
  18. unsigned char Flash;
  19. unsigned char dp;
  20. }CLOCK_SET_STRUCT;


  21. static __flash unsigned char const FlashTbl[]={DISP_1|DISP_2, DISP_3|DISP_4, DISP_5|DISP_6};



  22. static CLOCK_SET_STRUCT ClockSet;


  23. //static void Download(void);
  24. static void SystemInitialize(void);


  25. static void TimerToDisplayBuff(unsigned char *pbuff, TIMER_STRUCT *ptimer);


  26. static unsigned char disp_buff[DISP_NUM];

  27. /*
  28. //////////////////////////////////////////////////////////////////////////
  29. static void Download(void)
  30. {
  31. unsigned char i;
  32. unsigned char cnt;
  33. unsigned int j;

  34. PORTB &= 0xc7;
  35. DDRB &= 0xc7;
  36. PORTD &= 0xbf;
  37. DDRD &= 0xbf;
  38. cnt = 0;

  39. for(i=0; i<200; i++)
  40. {
  41. for(j=0; j<1000; j++)
  42. {
  43. if(GETB(PIND, PD6))
  44. {
  45. cnt++;
  46. break;
  47. }
  48. }

  49. if(cnt>10)
  50. {
  51. cnt = 100;
  52. break;
  53. }
  54. }

  55. // 要进行下载
  56. if(cnt==100)
  57. {
  58. cnt = 1;

  59. while(cnt)
  60. {
  61. i = PINB&(1<
  62. __delay_cycles(3000);
  63. }
  64. }
  65. }
  66. */
  67. //////////////////////////////////////////////////////////////////////////
  68. static void SystemInitialize(void)
  69. {
  70. unsigned char i;

  71. __disable_interrupt();

  72. #if CPU_TYPE==0x48
  73. CLKPR = (1<
  74. CLKPR = (1<
  75. #endif
  76. //Download();

  77. SPI_Init();
  78. ExFlash_Init();
  79. Timer_Init();
  80. Key_Init();
  81. Display_Init();
  82. __enable_interrupt();

  83. for(i=0; i
  84. {
  85. disp_buff[i] = 0;
  86. }

  87. SystemFlag = SYS_CLOCK_RUN;
  88. }


  89. static void TimerToDisplayBuff(unsigned char *pbuff, TIMER_STRUCT *ptimer)
  90. {
  91. *pbuff++ = ptimer->sec%10;
  92. *pbuff++ = ptimer->sec/10;
  93. *pbuff++ = ptimer->min%10;
  94. *pbuff++ = ptimer->min/10;
  95. *pbuff++ = ptimer->hour%10;
  96. *pbuff = ptimer->hour/10;
  97. }

  98. void main(void)
  99. {
  100. SystemInitialize();

  101. while(TRUE)
  102. {
  103. pFunc_Sys[SystemFlag]();
  104. }
  105. }
  106. //////////////////////////////////////////////////////////////////////////
  107. static void SysTem_ClockRun(void)
  108. {
  109. TIMER_STRUCT *ptimer;
  110. unsigned long time;
  111. unsigned int addr;
  112. unsigned char mask;
  113. unsigned char dbyte;
  114. CRITICAL_DEF;

  115. ptimer = Timer_GetTimer();

  116. if(Timer_IsUpdate())
  117. {
  118. time = ptimer->hour;
  119. time *= 3600;
  120. addr = ptimer->min;
  121. addr *= 60;
  122. time += addr+ptimer->sec;

  123. addr = time>>3;
  124. mask = 7-(time&0x07);
  125. ENTER_CRITICAL();
  126. dbyte = ExFlash_ReadByte(addr);
  127. EXIT_CRITICAL();

  128. if(GETB(dbyte, mask))
  129. {
  130. TimerToDisplayBuff(disp_buff, Timer_GetTimer());
  131. Display_Update(disp_buff);
  132. }


  133. /*
  134. ENTER_CRITICAL();
  135. dbyte = ExFlash_ReadByte(ad);
  136. EXIT_CRITICAL();

  137. ad++;
  138. if(ad>=10800)
  139. {
  140. ad = 0;
  141. }
  142. addr = ad;
  143. for(mask=0; mask<4; mask++)
  144. {
  145. disp_buff[mask+2] = addr%10;
  146. addr /= 10;
  147. }
  148. disp_buff[0] = dbyte&0x0f;
  149. disp_buff[1] = dbyte>>4;
  150. Display_Update(disp_buff);
  151. */
  152. }

  153. if(Key_GetCode()==KEY_CODE_ENTER)
  154. {
  155. SystemFlag = SYS_CLOCK_SET;
  156. ClockSet.Flash = 0;
  157. ClockSet.dp = 0;
  158. ClockSet.buff[0] = ptimer->sec;
  159. ClockSet.buff[1] = ptimer->min;
  160. ClockSet.buff[2] = ptimer->hour;
  161. Display_SetFlash(FlashTbl[ClockSet.Flash]);
  162. }
  163. }
  164. //////////////////////////////////////////////////////////////////////////
  165. static __flash unsigned char const TimerTbl[]={59, 59, 23};
  166. static void System_ClockSet(void)
  167. {
  168. unsigned char key;

  169. key = Key_GetCode();

  170. if(key^KEY_CODE_NULL)
  171. {
  172. switch(key)
  173. {
  174. case KEY_CODE_ENTER:
  175. SystemFlag = SYS_CLOCK_RUN;

  176. Timer_SetTimer((TIMER_STRUCT*)ClockSet.buff);
  177. Display_SetFlash(DISP_NULL);
  178. break;
  179. case KEY_CODE_SUB:
  180. if(--ClockSet.buff[ClockSet.Flash]>TimerTbl[ClockSet.Flash])
  181. {
  182. ClockSet.buff[ClockSet.Flash] = TimerTbl[ClockSet.Flash];
  183. }
  184. disp_buff[ClockSet.dp] = ClockSet.buff[ClockSet.Flash]%10;
  185. disp_buff[ClockSet.dp+1] = ClockSet.buff[ClockSet.Flash]/10;
  186. break;
  187. case KEY_CODE_ADD:
  188. if(++ClockSet.buff[ClockSet.Flash]>TimerTbl[ClockSet.Flash])
  189. {
  190. ClockSet.buff[ClockSet.Flash] = 0;
  191. }
  192. disp_buff[ClockSet.dp] = ClockSet.buff[ClockSet.Flash]%10;
  193. disp_buff[ClockSet.dp+1] = ClockSet.buff[ClockSet.Flash]/10;
  194. break;
  195. case KEY_CODE_SWITCH:
  196. if(++ClockSet.Flash>=3)
  197. {
  198. ClockSet.Flash = 0;
  199. }
  200. ClockSet.dp = ClockSet.Flash<<1;
  201. Display_SetFlash(FlashTbl[ClockSet.Flash]);
  202. break;
  203. default:
  204. ;
  205. }

  206. Display_Update(disp_buff);
  207. }
  208. }
  209. //////////////////////////////////////////////////////////////////////////
  210. // END


复制代码
个人签名DIY是一种信仰~~
 
 

回复

633

帖子

0

TA的资源

裸片初长成(中级)

板凳
 

11.bmp (1.37 MB, 下载次数: 2)

11.bmp

12.bmp (1.37 MB, 下载次数: 0)

12.bmp

13.bmp (1.37 MB, 下载次数: 0)

13.bmp

14.bmp (1.37 MB, 下载次数: 0)

14.bmp

15.bmp (1.37 MB, 下载次数: 0)

15.bmp

16.bmp (1.37 MB, 下载次数: 0)

16.bmp

17.bmp (1.37 MB, 下载次数: 0)

17.bmp

18.bmp (1.37 MB, 下载次数: 0)

18.bmp

19.bmp (1.37 MB, 下载次数: 0)

19.bmp

20.bmp (1.37 MB, 下载次数: 0)

20.bmp
个人签名DIY是一种信仰~~
 
 
 

回复

268

帖子

0

TA的资源

五彩晶圆(高级)

4
 
不错的东西,这么快就从OURAVR上转过来了。
个人签名QQ:1289535315
淘宝:http://feixue008.taobao.com
论坛:http://dianzhen.5d6d.com/bbs.php
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

5
 
好大啊
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 
确实不小!!!
个人签名Everybody call me wow gold.LOL.
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(中级)

7
 
值得收藏
 
 
 

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

查找数据手册?

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