一個(gè)51單片機(jī)做的出租車計(jì)費(fèi)系統(tǒng)proteus仿真,采用數(shù)碼管來(lái)顯示數(shù)據(jù),下面是原理圖:
0.png (22.54 KB, 下載次數(shù): 128)
下載附件
2016-9-25 18:08 上傳
0.png (49.4 KB, 下載次數(shù): 110)
下載附件
2016-9-25 18:07 上傳
所有資料下載:
出租車計(jì)費(fèi)系統(tǒng).rar
(59.49 KB, 下載次數(shù): 207)
2016-9-25 18:11 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
c51源程序:
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define T 100
- sbit RES=P3^7;
- int S=0,M=30;
- uchar count=0,ct=0;
- uchar tab_d[10]={0X3F,0X06,0X5B,0X4F,0X66, //段碼
- 0X6D,0X7D,0X07,0X7F,0X6F};
- uchar tab_wei[8]={0xfe,0xfd,0xfb,0xf7, //位碼
- 0xef,0xdf,0xbf,0x7f};
- //延時(shí)函數(shù)
- void delay(uint t) // tms
- {
- uchar i=0;
- while(t--)
- for(i;i<120;i++);
- }
- //數(shù)碼管顯示函數(shù)
- void disp(uchar d,uchar x,uchar w) //d為段選,x為小數(shù)點(diǎn),w為位選
- {
- P2=0xff; //位碼選擇 只能先設(shè)置位碼再設(shè)置段碼
- P2=tab_wei[w];
- P0=0;
- P0=tab_d[d]|x; // 加上小數(shù)點(diǎn)
- delay(T);
- }
- //計(jì)數(shù)函數(shù)
- void timer()
- {
- disp(M%10,0,0); // 角
- disp(M/10%10,0x80,1); // 元 0x80表示加上小數(shù)點(diǎn)
- if(M>=100)
- disp(M/100%10,0,2); // 十元
- if(M>=1000)
- disp(M/1000%10,0,3); // 百元
- disp(S%10,0,4); // 公里
- disp(S/10%10,0x80,5);
- if(S>=100)
- disp(S/100%10,0,6);
- if(S>=1000)
- disp(S/1000%10,0,7);
- }
- //定時(shí)器0中斷
- void time_50ms() interrupt 1
- {
- ct++;
- if(ct==5)
- {
- ct=0;
- S+=5;
- if(S>20)
- M+=8;
- }
- }
- //主函數(shù)
- void main()
- {
- P0=0;
- P2=0XFF;
- TMOD=0X0E; //設(shè)置計(jì)數(shù)器模式
- IT0=1; //電平觸發(fā)
- TH0=255; //1個(gè)脈沖延時(shí)
- TL0=255;
- TR0=1;
- IE=0X82;
- while(1)
- {
- if(RES==0)
- {
- S=0;
- M=30;
- }
- timer();
- }
- }
復(fù)制代碼 |