|
第五屆藍(lán)橋杯自動(dòng)售水機(jī)程序
單片機(jī)源程序如下:
- #include<STC15F2K60S2.H>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit scl=P2^0;
- sbit sda=P2^1;
- uchar code tab[]={
- 0XC0,0XF9,0XA4,0XB0,
- 0X99,0X92,0X82,0XF8,
- 0X80,0X90,0XFF};
- uchar code dot[]={
- 0x40,0x79,0x24,0x30,
- 0x19,0x12,0x02,0x78,
- 0x00,0x10};
- uchar yi,er,san,si,wu ,liu,qi,ba;
- uchar tt=0;
- uint XL;
- unsigned long int money=0;
- void delayms(int ms); //延時(shí)函數(shù)
- void allinit(); //初始化函數(shù)(關(guān)閉蜂鳴器,繼電器,數(shù)碼管)
- void keyscan(); //獨(dú)立按鍵掃描程序
- void rel(uchar dong); //
- void display1(uchar yi,uchar er);
- void display2(uchar san,uchar si);
- void display3(uchar wu,uchar liu);
- void display4(uchar qi,uchar ba);
- uchar iicread(uchar add);
- void adrun();
- void Timer0Init(void) //5毫秒@11.0592MHz
- {
- AUXR |= 0x80; //定時(shí)器時(shí)鐘1T模式
- TMOD &= 0xF0; //設(shè)置定時(shí)器模式
- TL0 = 0x00; //設(shè)置定時(shí)初值
- TH0 = 0x28; //設(shè)置定時(shí)初值
- TF0 = 0; //清除TF0標(biāo)志
- TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
- }
- void main()
- {
- allinit();
- Timer0Init();
- yi=10,er=0,san=5,si=0;
- while(1)
- {
- adrun();
- keyscan();
- display1(yi,er);
- display2(san,si);
- display3(wu,liu);
- display4(qi,ba);
- }
- }
- void time0() interrupt 1
- {
- tt++;
- if(tt==20)
- {
- tt=0;
- XL+=10;
- wu=XL/10000%10;
- liu=XL/1000%10;
- qi=XL/100%10;
- ba=XL/10%10;
- if(XL==9999)
- {
- rel(0);
- money=XL*5;
- wu=money/100000;
- liu=money%100000/10000;
- qi=money%10000/1000;
- ba=money%1000/100;
- XL=0;
- EA=0;ET0=0;
- }
- }
- }
- void keyscan()
- {
- if(P30==0)
- {
- delayms(5);
- if(P30==0)
- {
- rel(2);
- wu=liu=qi=ba=0;
- EA=1;ET0=1;
- }
- while(!P30);
- }
- else if(P31==0)
- {
- delayms(5);
- if(P31==0)
- {
- rel(0);
- money=XL*5;
- wu=money/100000;
- liu=money%100000/10000;
- qi=money%10000/1000;
- ba=money%1000/100;
- XL=0;
- EA=0;ET0=0;
- }
- while(!P31);
- }
- }
- void rel(uchar dong)
- {
- if(dong==0)
- {
- P2=0XA0;P0=0X00; //此處為關(guān)閉蜂鳴器和繼電器
- }
- else if(dong==1)
- {
- P2=0XA0;P0=0X40; //此處為關(guān)閉繼電器,打開(kāi)蜂鳴器
- }
- else if(dong==2)
- {
- P2=0XA0;P0=0X10; //此處為打開(kāi)繼電器,關(guān)閉蜂鳴器
- }
- else if(dong==3)
- {
- P2=0XA0;P0=0Xff; //此處為打開(kāi)蜂鳴器和繼電器
- }
- }
- void iicdelay(uchar m)
- {
- do
- {
- _nop_();
- }
- while(m--);
- }
- void iicstrat()
- {
- sda=1;
- _nop_();
- scl=1;
- _nop_();
- sda=0;
- _nop_();
- scl=0;
- _nop_();
- }
- void iicstop()
- {
- sda=0;
- _nop_();
- scl=1;
- _nop_();
- sda=1;
- _nop_();
- }
- void writebyte(uchar dat)
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- scl=0;
- sda=dat&0x80;
- scl=1;
- dat<<=1;
- }
- scl=0;
- }
- uchar iicreadbyte()
- {
- uchar dat;
- uchar i;
- for(i=0;i<8;i++)
- {
- scl=1;
- iicdelay(5);
- dat<<=1;
- if(sda)
- {
- dat|=0x01;
- }
- scl=0;
- }
-
- return dat;
- }
- uchar ack()
- {
- scl=1;
- iicdelay(5);
- if(sda==1)
- {
- scl=0;
- iicstop();
- return 0;
- }
- else
- {
- scl=0;
- return 1;
- }
- }
- uchar iicread(uchar add)
- {
- uchar temp;
-
- iicstrat();
- writebyte(0x90);
- ack();
- writebyte(add);
- ack();
- iicstop();
-
- iicstrat();
- writebyte(0x91);
- ack();
- temp=iicreadbyte();
- iicstop();
-
- temp=0.39*temp;
-
- return temp;
- }
- void adrun()
- {
- uchar num;
- num=iicread(0x01);
- if(num<25)
- {
- P2=0x80;
- P0=0xfe;
- }
- else
- {
- P2=0x80;
- P0=0xff;
- }
- }
- void delayms(int ms)
- {
- int i,j;
- for(i=ms;i>0;i--)
- for(j=845;j>0;j--);
- }
- void allinit()
- {
- P2=0XA0;
- P0=0X00;//關(guān)閉蜂鳴器,繼電器
-
- P2=0X80;
- P0=0XFF;//關(guān)閉LED燈
-
- P2=0XC0;
- P0=0XFF;//選擇所有數(shù)碼管
- P2=0XFF;
- P0=0XFF;//關(guān)閉所有數(shù)碼管
- }
- void display1(uchar yi,uchar er)
- {
- P2=0XC0;//打開(kāi)位選573 U8
- P0=0X01;//選擇第一個(gè)數(shù)碼管
- P2=0XFF;//打開(kāi)段選573 U7
- P0=tab[yi];
- delayms(1);
-
- P2=0XC0;//打開(kāi)位選573 U8
- P0=0X02;//選擇第二個(gè)數(shù)碼管
- P2=0XFF;//打開(kāi)段選573 U7
- P0=dot[er];
- delayms(1);
- }
- void display2(uchar san,uchar si)
- {
- P2=0XC0;//打開(kāi)位選573 U8
- P0=0X04;//選擇第三個(gè)數(shù)碼管
- P2=0XFF;//打開(kāi)段選573 U7
- P0=tab[san];
- delayms(1);
-
- P2=0XC0;//打開(kāi)位選573 U8
- P0=0X08;//選擇第四個(gè)數(shù)碼管
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
自動(dòng)售水機(jī).doc
(44 KB, 下載次數(shù): 28)
2017-5-20 10:23 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|