微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第89节:用单片机内部定时器做一个时钟

第89节:用单片机内部定时器做一个时钟

时间:11-22 来源:互联网 点击:

  1. 的时间需要200个定时中断
  2. #define const_timer_1s418//第二次校验后,最终选定大概1秒的时间需要418个定时中断。如果发现时间还是不准,可以在此基础上继续校验来调整此数据。
  3. void initial_myself(void);
  4. void initial_peripheral(void);
  5. void delay_short(unsigned int uiDelayShort);
  6. void delay_long(unsigned int uiDelaylong);
  7. //驱动数码管的74HC595
  8. void dig_hc595_drive(unsigned char ucDigStatusTemp16_09,unsigned char ucDigStatusTemp08_01);
  9. void display_drive(void); //显示数码管字模的驱动函数
  10. void display_service(void); //显示的窗口菜单服务程序
  11. //驱动LED的74HC595
  12. void hc595_drive(unsigned char ucLedStatusTemp16_09,unsigned char ucLedStatusTemp08_01);
  13. void T0_time(void);//定时中断函数
  14. void key_service(void); //按键服务的应用程序
  15. void key_scan(void);//按键扫描函数 放在定时中断里
  16. void timer_sampling(void); //定时器采样程序,内部每秒钟采集更新一次
  17. unsigned char get_date(unsigned char ucYearTemp,unsigned char ucMonthTemp);//获取当前月份的最大天数
  18. //日调整 每个月份的日最大取值不同,有的最大28日,有的最大29日,有的最大30,有的最大31
  19. unsigned char date_adjust(unsigned char ucYearTemp,unsigned char ucMonthTemp,unsigned char ucDateTemp); //日调整
  20. sbit key_sr1=P0^0; //对应朱兆祺学习板的S1键
  21. sbit key_sr2=P0^1; //对应朱兆祺学习板的S5键
  22. sbit key_sr3=P0^2; //对应朱兆祺学习板的S9键
  23. sbit key_sr4=P0^3; //对应朱兆祺学习板的S13键
  24. sbit key_gnd_dr=P0^4; //模拟独立按键的地GND,因此必须一直输出低电平
  25. sbit beep_dr=P2^7; //蜂鸣器的驱动IO口
  26. sbit dig_hc595_sh_dr=P2^0; //数码管的74HC595程序
  27. sbit dig_hc595_st_dr=P2^1;
  28. sbit dig_hc595_ds_dr=P2^2;
  29. sbit hc595_sh_dr=P2^3; //LED灯的74HC595程序
  30. sbit hc595_st_dr=P2^4;
  31. sbit hc595_ds_dr=P2^5;
  32. unsigned char ucKeySec=0; //被触发的按键编号
  33. unsigned intuiKeyTimeCnt1=0; //按键去抖动延时计数器
  34. unsigned char ucKeyLock1=0; //按键触发后自锁的变量标志
  35. unsigned intuiKeyTimeCnt2=0; //按键去抖动延时计数器
  36. unsigned char ucKeyLock2=0; //按键触发后自锁的变量标志
  37. unsigned intuiKeyTimeCnt3=0; //按键去抖动延时计数器
  38. unsigned char ucKeyLock3=0; //按键触发后自锁的变量标志
  39. unsigned int uiKey4Cnt1=0;//在软件滤波中,用到的变量
  40. unsigned int uiKey4Cnt2=0;
  41. unsigned char ucKey4Sr=1;//实时反映按键的电平状态
  42. unsigned char ucKey4SrRecord=0; //记录上一次按键的电平状态
  43. unsigned intuiVoiceCnt=0;//蜂鸣器鸣叫的持续时间计数器
  44. unsigned charucVoiceLock=0;//蜂鸣器鸣叫的原子锁
  45. unsigned char ucDigShow8;//第8位数码管要显示的内容
  46. unsigned char ucDigShow7;//第7位数码管要显示的内容
  47. unsigned char ucDigShow6;//第6位数码管要显示的内容
  48. unsigned char ucDigShow5;//第5位数码管要显示的内容
  49. unsigned char ucDigShow4;//第4位数码管要显示的内容
  50. unsigned char ucDigShow3;//第3位数码管要显示的内容
  51. unsigned char ucDigShow2;//第2位数码管要显示的内容
  52. unsigned char ucDigShow1;//第1位数码管要显示的内容
  53. unsigned char ucDigDot8;//数码管8的小数点是否显示的标志
  54. unsigned char ucDigDot7;//数码管7的小数点是否显示的标志
  55. unsigned char ucDigDot6;//数码管6的小数点是否显示的标志
  56. unsigned char ucDigDot5;//数码管5的小数点是否显示的标志
  57. unsigned char ucDigDot4;//数码管4的小数点是否显示的标志
  58. unsigned char ucDigDot3;//数码管3的小数点是否显示的标志
  59. unsigned char ucDigDot2;//数码管2的小数点是否显示的标志
  60. unsigned char ucDigDot1;//数码管1的小数点是否显示的标志
  61. unsigned char ucDigShowTemp=0; //临时中间变量
  62. unsigned char ucDisplayDriveStep=1;//动态扫描数码管的步骤变量
  63. unsigned char ucWd=2;//本程序的核心变量,窗口显示变量。类似于一级菜单的变量。代表显示不同的窗口。
  64. unsigned char ucPart=0;//本程序的核心变量,局部显示变量。类似于二级菜单的变量。代表显示不同的局部。
  65. unsigned char ucWd1Update=0; //窗口1更新显示标志
  66. unsigned char ucWd2Update=1; //窗口2更新显示标志
  67. unsigned char ucWd1Part1Update=0;//在窗口1中,局部1的更新显示标志
  68. unsigned char ucWd1Part2Update=0; //在窗口1中,局部2的更新显示标志
  69. unsi

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top