欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11099|回復: 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 單片機教程網

快速回復 返回頂部 返回列表