51hei.png (8.49 KB, 下載次數: 53)
下載附件
2020-5-28 01:09 上傳
51hei.png (10.04 KB, 下載次數: 51)
下載附件
2020-5-28 01:12 上傳
51hei.png (18.11 KB, 下載次數: 45)
下載附件
2020-5-28 01:12 上傳
單片機源程序如下:
- #include<reg51.h>
- #include<math.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit cs=P1^2;
- sbit clk=P1^0;
- sbit di=P1^1;
- uchar num,num1,i,a,b,c,e,f,g;
- int wendu;
- sbit we = P2^7; //位定義數碼管位選鎖存器接口
- sbit du = P2^6; //位定義數碼管段選鎖存器接口
- sbit pay_plus=P1^4;
- sbit pay_minus=P1^3;
- sbit confirm=P1^5;
- sbit LED=P1^6;
- int TimerCount=0,time_count=0;
- int L_set_wendu=0;
- int H_set_wendu=20;
- bit confirm_scan=1;
- bit pay_plus_scan=1;
- bit pay_minus_scan=1;
- //數碼管段選表
- uchar code leddata[]={
-
- 0x3F, //"0"
- 0x06, //"1"
- 0x5B, //"2"
- 0x4F, //"3"
- 0x66, //"4"
- 0x6D, //"5"
- 0x7D, //"6"
- 0x07, //"7"
- 0x7F, //"8"
- 0x6F, //"9"
- 0x40, //"-"
- 0x00, //熄滅
- 0x00 //自定義
-
- };
- void delay(unsigned long x)
- {
- uchar y;
- for(;x>0;x--)
- for(y=110;y>0;y--);
- }
- uchar ADC0832()
- {
- cs=1;
- clk=0;
- cs=0;
- di=1;
-
- clk=1;
- clk=0;
- di=1;
- clk=1;
- clk=0;
- di=0;
- clk=1;
- clk=0;
- di=1;
- for(i=0;i<8;i++)
- {
- clk=1;
- clk=0;
- num=num<<1;
- num|=(uchar)di;
- }
- cs=1;
- return num;
- }
- int SG=0;
- void Key()
- {
-
- if(confirm!=confirm_scan)
- {
- if(confirm==0) //下降沿
- { SG++;
- // step++;
- if(SG>=3)
- SG=0;
- }
- confirm_scan=confirm;
- }
- }
- void Timer0_Init(void)
- {
- TMOD |= 0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- }
- void main()
- {
- pay_plus=1;
- pay_minus=1;
- confirm=1;
- Timer0_Init();
- while(1)
- {Key();
- ADC0832();
- if(num<=38)
- wendu=num-69;
- if(num>38&&num<=70)
- wendu=num-70;
- if(num>70)
- wendu=num-71;
- if(SG==0)
- {
- if(wendu>=0)
- {
- a=wendu/100;
- b=wendu%100/10;
- c=wendu%10;
- if(a>0)
- {
- P0 = 0xfd;//1111 1101 只選通第二位數碼管
- we = 1; //打開位選
- we = 0; //關閉位選
-
- P0 = leddata[a]; //顯示2
- du = 1;//打開段選
- du = 0; //關閉段選
- delay(2);//延時
- }
- if(a!=0||b>0)
- {
- P0 = 0xfb;// 1111 1011只選通第三位數碼管
- we = 1; //打開位選
- we = 0; //關閉位選
-
- P0 = leddata[b]; //顯示3
- du = 1;//打開段選
- du = 0; //關閉段選
- delay(2);//延時
- }
- P0 = 0xf7;//1111 0111 只選通第四位數碼管
- we = 1; //打開位選
- we = 0; //關閉位選
-
- P0 = leddata[c]; //顯示4
- du = 1;//打開段選
- du = 0; //關閉段選
- delay(2);//延時
- }
- }
-
- if(SG==1) //設定上限報警
- {
- P0 = 0xfe;//1111 0111 只選通第二位數碼管
- we = 1; //打開位選
- we = 0; //關閉位選
-
- P0 = 0x76; //顯示2
- du = 1;//打開段選
- du = 0; //關閉段選
- delay(2);//延時
- if(pay_minus!=pay_minus_scan) //減少
- {
- if(pay_minus==0) //下降沿
- { H_set_wendu--;
-
-
- }
- pay_minus_scan=pay_minus;
- }
- if(pay_plus!=pay_plus_scan) //增加
- {
- if(pay_plus==0) //下降沿
- {
- H_set_wendu++;
-
- }
- pay_plus_scan=pay_plus;
- }
-
-
- if(H_set_wendu>=0)
- {
- e=H_set_wendu/100;
- f=H_set_wendu%100/10;
- g=H_set_wendu%10;
- if(e>0)
- {
- P0 = 0xfd;//1111 1101 只選通第二位數碼管
- we = 1; //打開位選
- we = 0; //關閉位選
-
- P0 = leddata[e]; //顯示2
- du = 1;//打開段選
- du = 0; //關閉段選
- delay(2);//延時
- }
- if(e!=0||f>0)
- {
- P0 = 0xfb;// 1111 1011只選通第三位數碼管
- we = 1; //打開位選
- we = 0; //關閉位選
-
- P0 = leddata[f]; //顯示3
- du = 1;//打開段選
- du = 0; //關閉段選
- delay(2);//延時
- }
- P0 = 0xf7;//1111 0111 只選通第四位數碼管
- we = 1; //打開位選
- we = 0; //關閉位選
-
- P0 = leddata[g]; //顯示4
- du = 1;//打開段選
- du = 0; //關閉段選
- delay(2);//延時
- }
-
-
-
-
-
- }
-
-
- if(SG==2) //設定下限報警
- {
- P0 = 0xfe;//1111 0111 只選通第二位數碼管
- we = 1; //打開位選
- we = 0; //關閉位選
-
- P0 = 0X38; //顯示2
- du = 1;//打開段選
- du = 0; //關閉段選
- delay(2);//延時
- if( time_count>=2)
- {
- if(pay_minus!=pay_minus_scan) //減少金額
- {
- if(pay_minus==0) //下降沿
- { L_set_wendu--;
- // pay_price_shi--;
- // if(pay_price_shi==0)
- // pay_price_shi=0;
- // }
-
- } pay_minus_scan=pay_minus;
- }
- if(pay_plus!=pay_plus_scan) //增加金額
- {
- if(pay_plus==0) //下降沿
- { L_set_wendu++;
- // pay_price_shi++;
- // if(pay_price_shi>=10)
- // pay_price_shi=10;
- }
- pay_plus_scan=pay_plus;
- }
- }
-
-
-
-
- if(L_set_wendu>=0)
- {
- e=L_set_wendu/100;
- f=L_set_wendu%100/10;
- g=L_set_wendu%10;
- if(a>0)
- {
- P0 = 0xfd;//1111 1101 只選通第二位數碼管
- we = 1; //打開位選
- we = 0; //關閉位選
-
- P0 = leddata[e]; //顯示2
- du = 1;//打開段選
- du = 0; //關閉段選
- delay(2);//延時
- }
- if(f!=0||g>0)
- {
- P0 = 0xfb;// 1111 1011只選通第三位數碼管
- we = 1; //打開位選
- we = 0; //關閉位選
-
- P0 = leddata[f]; //顯示3
- du = 1;//打開段選
- du = 0; //關閉段選
- delay(2);//延時
- }
- P0 = 0xf7;//1111 0111 只選通第四位數碼管
- we = 1; //打開位選
- we = 0; //關閉位選
-
- P0 = leddata[g]; //顯示4
- du = 1;//打開段選
- du = 0; //關閉段選
- delay(2);//延時
- }
-
- }
-
-
- if((H_set_wendu<=wendu)||(L_set_wendu>=wendu))
- {
- if(TimerCount>=20) //1秒
- {TimerCount=0;
- LED=!LED;
- }
- // delay(2000);//延時
- // LED=1;
- }
-
- // if((H_set_wendu>=wendu)||(L_set_wendu<=wendu))
- // {
- // LED=0;
- // }
- // else
- // {
- // num1=abs(wendu);
- // a=num1/100;
- // b=num1%100/10;
- // c=num1%10;
- // if(num1>9)
- // {
- // P0 = 0xfd;//1111 1101 只選通第二位數碼管
- // we = 1; //打開位選
- // we = 0; //關閉位選
- //
- // P0 = leddata[10]; //顯示2
- // du = 1;//打開段選
- // du = 0; //關閉段選
- // delay(2);//延時
- // }
- // else
- // {
- // P0 = 0xfb;// 1111 1011只選通第三位數碼管
- // we = 1; //打開位選
- // we = 0; //關閉位選
- //
- // P0 = leddata[10]; //顯示3
- // du = 1;//打開段選
- // du = 0; //關閉段選
- // delay(2);//延時
- // }
- // if(a>0)
- // {
- // P0 = 0xfd;//1111 1101 只選通第二位數碼管
- // we = 1; //打開位選
- // we = 0; //關閉位選
- //
- // P0 = leddata[a]; //顯示2
- // du = 1;//打開段選
- // du = 0; //關閉段選
- // delay(2);//延時
- // }
- // if(a!=0||b>0)
- // {
- // P0 = 0xfb;// 1111 1011只選通第三位數碼管
- // we = 1; //打開位選
- // we = 0; //關閉位選
- //
- // P0 = leddata[b]; //顯示3
- // du = 1;//打開段選
- // du = 0; //關閉段選
- // delay(2);//延時
- // }
- // P0 = 0xf7;//1111 0111 只選通第四位數碼管
- // we = 1; //打開位選
- // we = 0; //關閉位選
- //
- // P0 = leddata[c]; //顯示4
- // du = 1;//打開段選
- // du = 0; //關閉段選
- // delay(2);//延時
- // }
- }
- }
-
- void TIM0_IRQHandler(void) interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- TimerCount++;
- time_count++;
- }
復制代碼
所有資料51hei提供下載:
pt100.rar
(167.74 KB, 下載次數: 130)
2020-5-26 21:56 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|