單片機進行傳感器計數
單片機源程序如下:
- #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)
2017-12-19 15:08 上傳
點擊文件名下載附件
|