標(biāo)題:
藍(lán)橋杯程序 自動(dòng)售水機(jī)單片機(jī)程序(15轉(zhuǎn)接板)
[打印本頁(yè)]
作者:
szg19961122
時(shí)間:
2017-5-20 10:24
標(biāo)題:
藍(lán)橋杯程序 自動(dòng)售水機(jī)單片機(jī)程序(15轉(zhuǎn)接板)
第五屆藍(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開始計(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)閉繼電器,打開蜂鳴器
}
else if(dong==2)
{
P2=0XA0;P0=0X10; //此處為打開繼電器,關(guān)閉蜂鳴器
}
else if(dong==3)
{
P2=0XA0;P0=0Xff; //此處為打開蜂鳴器和繼電器
}
}
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;//打開位選573 U8
P0=0X01;//選擇第一個(gè)數(shù)碼管
P2=0XFF;//打開段選573 U7
P0=tab[yi];
delayms(1);
P2=0XC0;//打開位選573 U8
P0=0X02;//選擇第二個(gè)數(shù)碼管
P2=0XFF;//打開段選573 U7
P0=dot[er];
delayms(1);
}
void display2(uchar san,uchar si)
{
P2=0XC0;//打開位選573 U8
P0=0X04;//選擇第三個(gè)數(shù)碼管
P2=0XFF;//打開段選573 U7
P0=tab[san];
delayms(1);
P2=0XC0;//打開位選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
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1