找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10701|回复: 1
收起左侧

STC89C52单片机秒表程序分享

[复制链接]
ID:354012 发表于 2018-12-17 21:26 | 显示全部楼层 |阅读模式
利用STC89C52芯片,进行秒表的设计。将四位共阳极数码管的,段选依口次连接到89C52的P2口上来送段选数据,位选连接在P3口的0,1,2,3上。独立键盘1连接到P1.6上,控制秒表暂停启动。键盘2连接到P1.7上,在秒表暂停状态下可以进行复位功能。晶振采用的是11.0592MHz,一个机器周期的时间为1.09us,两边电容的值为22pF,在电路中其稳定振荡频率,达到快速起振的作用。将晶振两端分别连接在XTAL1和XTAL2上,给单片机提供时钟信号。

单片机源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. sbit key1= P1^6;
  5. sbit key2= P1^7;
  6. uint a,c,bai,shi,ge,hao,num,num1,state=0;
  7. uchar code table[]={
  8. 0xc0,0xf9,0xa4,0xb0,
  9. 0x99,0x92,0x82,0xf8,
  10. 0x80,0x90,0x88,0x83,
  11. 0xc6,0xa1,0x86,0x8e};
  12. void init();
  13. void display();
  14. void delay(uchar);
  15. void keyscan();

  16. void main()
  17. {
  18. init();
  19. while(1){
  20. keyscan();
  21. display();
  22. }
  23. }

  24. void display()
  25. {
  26. hao = num%10;
  27. ge = num/10%10;
  28. shi = num /100%10;
  29. bai = num/1000%10;

  30. P3=0x01;
  31. P2=table[bai];//送百秒上段选数据
  32. delay(1);

  33. P3=0x02;
  34. P2=table[shi];//送十秒上段选数据
  35. delay(1);

  36. P3=0x04;
  37. P2=table[ge];//送秒上段选数据
  38. delay(1);

  39. P3=0x08;
  40. P2=table[hao];//送零点秒上段选数据
  41. delay(1);
  42. }

  43. void init()//初始化函数
  44. {
  45. TMOD=0x01;//工作方式选择定时器0的工作方式1
  46. TH0=(65536-45872)/256;
  47. TL0=(65536-45872)%256;
  48. EA=1;
  49. ET0=1;
  50. TR0=0;
  51. num = 0;
  52. }

  53. void time() interrupt 1
  54. {

  55. TH0=(65536-45872)/256;
  56. TL0=(65536-45872)%256;
  57. a++;
  58. if(a==2)//2次50ms为0.1s
  59. {
  60. a=0;
  61. num++;
  62. if(num == 10000)//计满,归零重新开始
  63. num = 0;
  64. }
  65. }

  66. void keyscan(){
  67. if(!key1)
  68. {
  69. delay(10);//消抖
  70. if(!key1)//如果key1按下
  71. {
  72. state=~state;//state取反
  73. while(!key1){};
  74. TR0 = ~TR0;//定时器0的运行控制位取反
  75. }
  76. }
  77. else if(!key2)
  78. {
  79. delay(10);
  80. if(!key2)//如果key2按下
  81. {
  82. if(state==1){}//在state为1即运行状态时继续计时
  83. else if(state==0)//在state为0即暂停状态时,复位全部归零
  84. {
  85. hao=0;
  86. ge=0;
  87. shi=0;
  88. bai=0;
  89. num=0;
  90. }
  91. }
  92. }
  93. }

  94. void delay(uchar z)
  95. {
  96. uchar x,y;
  97. for(x=z;x>0;x--)
  98. for(y=110;y>0;y--);
  99. }
复制代码

所有资料51hei提供下载:
秒表.zip (13.45 KB, 下载次数: 63)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:863362 发表于 2023-11-1 14:51 | 显示全部楼层
加个小数点就更完美了!
P3=0x04;
P2=table[ge]+0x80;//送秒上段选数据
delay(1);
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表