找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2839|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机传感器计数程序

[复制链接]
跳转到指定楼层
楼主
ID:237596 发表于 2017-12-19 15:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机进行传感器计数

单片机源程序如下:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned  int
  4. sbit dula=P2^6;
  5. sbit wela=P2^7;
  6. uchar code table[]={0x3f,0X06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};     //所需的段的位码0~9
  7. uchar code tablewe[]={0xfe,0xfd,0xfb};
  8. uchar aa,bai,shi,ge;      //定义百位、十位、个位数据类型
  9. uint  date=0,dispcount=0;//定义数据类型
  10. /******************************************************************
  11. 延时函数
  12. ******************************************************************/
  13. void delay(uchar t)//延时程序 t=1时为 1ms
  14. {
  15. uchar m,n,z;
  16. for(m=t;m>0;m--)
  17. for(n=110;n>0;n--)
  18. for(z=1;z>0;z--);
  19. }

  20. /**********************************************************************
  21.                 数码管动态扫描
  22. *********************************************************************/
  23. void display(uint dispcount)
  24. {
  25. /*****************数据转换*****************************/
  26.                 bai=dispcount/100;           //求百位
  27.                 shi=dispcount%100/10;        //求十位
  28.                 ge=dispcount%10;                                   //求个位

  29.                 dula=1;                                         //打开段选
  30.                 P0=table[bai];                                //百位输给P0口
  31.                 dula=0;                                                //关闭段选
  32.                 wela=1;                                                //打开位选
  33.                 P0=0xfe;                                        //P0口输给第一位
  34.                 wela=0;                                                //关闭位选
  35.                 delay(1);

  36.                 dula=1;
  37.                 P0=table[shi];
  38.                 dula=0;
  39.                 wela=1;
  40.                 P0=0xfd;
  41.                 wela=0;
  42.                 delay(1);

  43.                 dula=1;
  44.                 P0=table[ge];
  45.                 dula=0;
  46.                 wela=1;
  47.                 P0=0xfb;
  48.                 wela=0;
  49.                 delay(1);
  50.     }

  51. void init()
  52. {       
  53.         wela=0;
  54.         dula=0;
  55.         EX0=1;                                //int0外部中断打开。
  56.         IT0=0;                                //低电平有效,3.0口,不设置也没关系
  57. //        ET0=1;                                //t0定时中断。即IE=0x82;
  58. //        TMOD=0x01;                        //t0启动方式为方式1,16位
  59. //        TR0=1;                                //启动定时器0
  60. //        TH0=0x4c;
  61. //        TL0=0x00;
  62.         EA=1;                                //开总中断       
  63.        
  64. }


  65. /*************************************************************************
  66.                                 主函数      
  67. **************************************************************************/
  68. void main()
  69. {
  70. //        aa=0;
  71. //        TH0=0x4c;
  72. //        TL0=0x00;
  73.         init();
  74.         while(1)
  75.         {
  76.                 display(dispcount);
  77.         }         
  78. }   

  79. void ExtInt0() interrupt 0 //外部0中断服务程序
  80. {
  81.                 delay(200);
  82.                 date++;//每按一次中断按键,计数加一
  83.                 dispcount=date;
  84.                 if (dispcount==999) //计数范围0-999
  85.                         {
  86.                                 dispcount=0;
  87. ……………………

  88. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
传感器计数.rar (26.47 KB, 下载次数: 16)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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