单片机进行传感器计数
单片机源程序如下:
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit dula=P2^6;
- sbit wela=P2^7;
- uchar code table[]={0x3f,0X06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //所需的段的位码0~9
- uchar code tablewe[]={0xfe,0xfd,0xfb};
- uchar aa,bai,shi,ge; //定义百位、十位、个位数据类型
- uint date=0,dispcount=0;//定义数据类型
- /******************************************************************
- 延时函数
- ******************************************************************/
- void delay(uchar t)//延时程序 t=1时为 1ms
- {
- uchar m,n,z;
- for(m=t;m>0;m--)
- for(n=110;n>0;n--)
- for(z=1;z>0;z--);
- }
- /**********************************************************************
- 数码管动态扫描
- *********************************************************************/
- void display(uint dispcount)
- {
- /*****************数据转换*****************************/
- bai=dispcount/100; //求百位
- shi=dispcount%100/10; //求十位
- ge=dispcount%10; //求个位
- dula=1; //打开段选
- P0=table[bai]; //百位输给P0口
- dula=0; //关闭段选
- wela=1; //打开位选
- P0=0xfe; //P0口输给第一位
- wela=0; //关闭位选
- delay(1);
- dula=1;
- P0=table[shi];
- dula=0;
- wela=1;
- P0=0xfd;
- wela=0;
- delay(1);
- dula=1;
- P0=table[ge];
- dula=0;
- wela=1;
- P0=0xfb;
- wela=0;
- delay(1);
- }
- void init()
- {
- wela=0;
- dula=0;
- EX0=1; //int0外部中断打开。
- IT0=0; //低电平有效,3.0口,不设置也没关系
- // ET0=1; //t0定时中断。即IE=0x82;
- // TMOD=0x01; //t0启动方式为方式1,16位
- // TR0=1; //启动定时器0
- // TH0=0x4c;
- // TL0=0x00;
- EA=1; //开总中断
-
- }
- /*************************************************************************
- 主函数
- **************************************************************************/
- void main()
- {
- // aa=0;
- // TH0=0x4c;
- // TL0=0x00;
- init();
- while(1)
- {
- display(dispcount);
- }
- }
- void ExtInt0() interrupt 0 //外部0中断服务程序
- {
- delay(200);
- date++;//每按一次中断按键,计数加一
- dispcount=date;
- if (dispcount==999) //计数范围0-999
- {
- dispcount=0;
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
传感器计数.rar
(26.47 KB, 下载次数: 16)
|