本帖最后由 Eibles 于 2018-6-21 14:41 編輯
- #include<reg51.h>
- #define uchar unsigned char //定義數據類型
- #define uint unsigned int //定義數據類型
- sbit P2_4=P2^4;
- sbit ST=P2^5;
- sbit EOC=P2^6;
- sbit OE=P2^7;
- sbit p2_0=P2^0;
- sbit p2_1=P2^1;
- sbit p2_2=P2^2;
- sbit p2_3=P2^3;
- uchar code led_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //建立0-9字模
- void delay0(void)
- {
- uchar i,j;
- for(i=0;i<10;i++)
- for(j=0;j<100;j++);
- }
- timer0()interrupt 1
- {
- P2_4=!P2_4; //改變電平狀態
- }
- void main(void)
- {
- uchar k;
- uint l;
- TMOD=0x02; //定時器T0方式2
- TH0=(256-100)%256; //0.1ms定時,裝載初始值
- TL0=(256-100)%256;
- IE=0x82;
- EA= 1; //開啟全局中斷
- ET0= 1;
- TR0=1; //啟動定時器0
- P2=0x4f; //初始化 P2口
- while(1)
- {
- ST=0; //發出啟動脈沖信號
- delay0();
- ST=1;
- delay0();
- ST=0;
- while(EOC==1); //查詢結束狀態
- delay0();
- OE=1; //OE置1信號
- k=P1; //將A/D結果賦值給k
- l=5000*((float)k/255); //計算電壓值
- p2_3=0; //打開p2_3口
- P0=led_mod[l%10]; //求個位
- delay0();
- p2_3=1; //關閉p2_3口
- p2_2=0; //打開p2_2口
- P0=led_mod[l/10%10]; //求十位
- delay0();
- p2_2=1; //關閉p2_2口
- p2_1=0; //打開p2_1口
- P0=led_mod[l/100%10]; //求百位
- delay0();
- p2_1=1; //關閉p2_1口
- p2_0=0; //打開p2_0口
- P0=led_mod[l/1000]; //求千位
- delay0();
- p2_0=1; //關閉p2_0口
- }
- }
復制代碼
|