找回密码
 立即注册

QQ登录

只需一步,快速开始

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

怎样让每次发生低电平时计数器计数,高点平时不计数呢?

[复制链接]
跳转到指定楼层
楼主
ID:67905 发表于 2014-10-25 15:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小车上方有宽窄不同的障碍物,要求小车数出宽的障碍物个数并显示。怎样让每次发生低电平时计数器计数,而恢复高点平时不计数呢?我的程序可以让它在第一次低电平时开始计数,但是当电平恢复高电平时还在计数停不下来。
#include<stc12c5a60s2.h>
#define uint unsigned int
#define uchar unsigned char
sbit  chuanganqi=P3^3;
sbit RS=P2^5;
sbit RW=P2^6;
sbit EP=P2^7;
unsigned int geshu,kuan,num;
void delay(int z)
{
  int i,j;
  for(i=z;i>0;i--)
    for(j=1000;j>0;j--);
}
void zhongduan1() interrupt 2   //外部中断1
{
TR1=0;
Timer1_int();
  TR1=1;
}
void zhongduan2() interrupt 3        //定时器中断1
{
    num++;
  TL1 = 0x9C;  //设置定时初值
TH1 = 0xFF;  //设置定时初值 //定时100us=0.1ms
}
void Timer1_int()  //定时器1初始化
{
/* TMOD|=0x10;
TH1=(65536-65436)/256;
TL1=(65536-65436)%256;   //定时100us=0.1ms
EA=1;
TR1=1;
ET1=1; */
AUXR &= 0xBF;  //定时器时钟12T模式
TMOD &= 0x0F;  //设置定时器模式
TMOD |= 0x10;  //设置定时器模式
TL1 = 0x9C;  //设置定时初值
TH1 = 0xFF;  //设置定时初值
TF1 = 0;  //清除TF1标志  
// TR1 = 1;  //定时器1开始计时
ET1=1;
}
void write_com(char com) //输入命令函数
{
RS=0;
RW=0;
EP=0;
P0=com;
delay(5);
EP=1;
delay(5);
EP=0;
}
void write_date(char date)//输入数据函数
{
RS=1;
RW=0;
EP=0;
P0=date;
delay(5);
EP=1;
delay(5);
EP=0;
}
void write_init()//初始化函数
{
  write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void display()
{
write_com(0x80+0x00);
write_date(geshu/1000+0x30);
write_com(0x80+0x01);
write_date(geshu%1000/100+0x30);
write_com(0x80+0x02);
write_date(geshu%1000%100/10+0x30);
write_com(0x80+0x03);
write_date(geshu%10+0x30);
}
void main()
{
IT1=1;  //低电平触发中断
EX1=1;
write_init();
while(1)
{ EA=1;
Timer1_int();  
  if (num>=1000)
  {  
    kuan++;   // kuan/2是托盘个数
  num=0;
     TR1=0;
geshu=kuan/2;
}
    display();
// delay(5);
}
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:67905 发表于 2014-10-25 16:19 | 只看该作者
急死我了,有人知道吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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