标题:
单片机啤酒瓶计数原理图+程序
[打印本页]
作者:
xiaolouluo
时间:
2019-12-11 11:06
标题:
单片机啤酒瓶计数原理图+程序
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
批注 2019-12-11 110207.png
(95.74 KB, 下载次数: 24)
下载附件
2019-12-11 11:04 上传
单片机源程序如下:
#include<reg51.h>
void T0_init();
unsigned char code table[]={0xC0,0XF9,0xA4,0XB0,0x99,0x92,0x82,0xF8,0x80,0x90};
unsigned char dat_T=0,aa;
unsigned int counter=0;
unsigned char dat_Q=0;
void delay(unsigned int time)
{
unsigned int i,j;
for(i=0;i<time;i++)
for(j=0;j<120;j++)
;
}
void display1()
{
P2=0x01;
P1=table[dat_T/10];
delay(10);
P2=0x02;
P1=table[dat_T%10];
delay(10);
P2=0x04;
P1=table[dat_Q/10];
delay(10);
P2=0x08;
P1=table[dat_Q%10];
delay(10);
}
void calspeed()
{
if(aa>=20) //20*50ms=1s计算一次 or aa==20
{
dat_T=counter;
counter=0;//清零脉冲数
aa=0; //清零标志
}
}
main()
{
EA = 1; //开总中断
EX0=1; //外部中断0
IT0=1; //下降沿方式 触发方式
TMOD = 0x01; //定时器0 工作方式一
TH0= (65536 - 50000)/256; //定时50ms
TL0= (65536 - 50000)%256;
ET0 = 0; //定时器开关
TR0 = 1;
while(1)
{
display1();
calspeed();
}
}
void T0_init() interrupt 1 //定时器中断0
{
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
aa++;
}
void int0() interrupt 0 //外部中断0
{
dat_T++;
if(dat_T>11)
{
dat_Q++;
dat_T=0;
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1