找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5131|回复: 3
收起左侧

四位数字频率计数码管显示

[复制链接]
ID:137190 发表于 2016-10-10 12:56 | 显示全部楼层 |阅读模式
一个51单片机做的四位数字频率计数码管显示,下面是原理图:
0.png 0.png

仿真工程文件及所有完整程序等资料下载地址:
http://www.51hei.com/bbs/dpj-56298-1.html


单片机源程序:
  1. /********************************************************************
  2.                            天马电子
  3. *********************************************************************/
  4. #include <reg52.h>
  5. #define uchar unsigned char
  6. #define uint  unsigned  int        
  7. uchar duan[10]={0xc0,0Xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};         //所需的段的位码
  8. //uchar wei[4]={0XEf,0XDf,0XBf,0X7f};                                 //位的控制端        (开发板)
  9. uchar wei[4]={0X80,0X40,0X20,0X10};                                 //位的控制端        (仿真)
  10. uint z,x,c,v, date;        //定义数据类型
  11. uint dispcount=0;
  12. uint lck=0;
  13. uint disp=0;
  14. /******************************************************************

  15. 延时函数

  16. ******************************************************************/
  17. void delay(uchar t)
  18. {
  19.   uchar i,j;
  20.    for(i=0;i<t;i++)
  21.    {
  22.             for(j=13;j>0;j--);
  23.          { ;
  24.          }
  25.    }
  26. }

  27. /**********************************************************************
  28.                 数码管动态扫描
  29. *********************************************************************/
  30. void xianshi()
  31. {
  32. /*****************数据转换*****************************/
  33.   z=date/1000;                         //求千位
  34.   x=date%1000/100;                 //求百位
  35.   c=date%100/10;                 //求十位
  36.   v=date%10;                         //求个位

  37.       P2=wei[0];
  38.           P0=duan[z];
  39.           delay(50);  
  40.             P2=wei[1];
  41.       P0=duan[x];
  42.           delay(50);  
  43.              P2=wei[2];
  44.       P0=duan[c];
  45.           delay(50);  
  46.       P2=wei[3];
  47.       P0=duan[v];
  48.           delay(50);  
  49.                                        

  50.        }

  51. /*************************************************************************
  52.                                 定时器初值1ms        
  53. **************************************************************************/
  54. void initTimer(void)
  55. {
  56. TMOD=0x0;
  57. TH0=0xe3;
  58. TL0=0xc;
  59. }

  60. /*************************************************************************
  61.                                 定时器函数        
  62. **************************************************************************/
  63. void timer0(void) interrupt 1
  64. {
  65. TH0=0xe3;
  66. TL0=0xc;
  67. lck++;
  68. if(lck==1000)
  69.        {
  70.         disp=dispcount;
  71.              lck=0;
  72.                 dispcount=0;
  73.        }

  74. }

  75. /*************************************************************************
  76.                                 中断函数        
  77. **************************************************************************/
  78. void int0(void) interrupt 0
  79. {

  80. dispcount++; //每一次中断,计数加一

  81. }

  82. /*************************************************************************
  83.                                 主函数        
  84. **************************************************************************/
  85. void main(void)
  86. {

  87. IT0=1;     //INT0下降沿中断
  88. EX0=1;     //允许INT1中断
  89. initTimer(); //装入初值
  90. TR0=1;
  91. ET0=1;
  92. EA=1;
  93. while(1)

  94. {
  95. date=disp;
  96. xianshi();
  97. }
  98. }

  99.                                                                           
复制代码



回复

使用道具 举报

ID:205869 发表于 2017-5-31 11:01 | 显示全部楼层
芯片换成AT89C52要如何修改程序
回复

使用道具 举报

ID:214608 发表于 2017-7-2 23:29 | 显示全部楼层
差的有点多啊,几千的时候差好几百,差的太多了
回复

使用道具 举报

ID:890642 发表于 2023-12-13 22:03 来自手机 | 显示全部楼层
楼主很用心,注生活愉快
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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