标题:
基于15单片机的自动售水机装置设计程序 蓝桥杯CT107资料
[打印本页]
作者:
啊哈呦
时间:
2017-12-30 17:13
标题:
基于15单片机的自动售水机装置设计程序 蓝桥杯CT107资料
(分享设计)有意参加蓝桥杯的童鞋可借鉴参考。
软件环境: Keil uVision 4.10
硬件环境: CT107单片机综合实训平台(12MHz)
所有资料51hei提供下载:
自动售水机.rar
(36.09 KB, 下载次数: 22)
2017-12-30 17:13 上传
点击文件名下载附件
下载积分: 黑币 -5
单片机源程序如下:
#include "iic.h"
#define temp P3
#define uchar unsigned char
#define uint unsigned int
sbit d6=P4^2;
sbit d7=P4^4;
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
uchar code led[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar dispuff[8]={0xc0,0x12,0xc0,0xc0,0xc0,0x40,0xc0,0xc0};
uchar v0,v1,v2,v3,p0,p1,p2,p3,m0,m1,m2,m3;
uint p,v;
uchar buzz,rel,count,light_value;
uchar start_flag;
void choose(uchar t)
{
switch(t)
{
case 4:P2=((P2&=0x1f)|0x80);break;
case 5:P2=((P2&=0x1f)|0xa0);break;
case 6:P2=((P2&=0x1f)|0xc0);break;
case 7:P2=((P2&=0x1f)|0xe0);break;
case 0:P2&=0x1f;break;
}
// _nop_();
// _nop_();
// P2=0x00;
}
void delay(uint ms)
{
uchar i,j;
while(ms--)
{
_nop_();
_nop_();
_nop_();
i=11;
j=190;
do
{
while(--j);
} while(--i);
}
}
void display(uchar loc,uchar duan)
{
P0=led[loc];choose(6);choose(0);
P0=duan; choose(7);choose(0);
}
void buzzer(uchar t)
{
if(t==0)
{
P0&=0xbf;choose(5);choose(0);
}
if(t==1)
{
P0|=0x40;choose(5);choose(0);
}
}
void relay(uchar t)
{
if(t==0)
{
P0&=0xef;choose(5);choose(0);
}
if(t==1)
{
P0|=0x10;choose(5);choose(0);
}
}
uchar key_scan(void)
{
uchar key_value=16;
temp=0x0f;d6=0;d7=0;
if(temp!=0x0f)
{
delay(20);
if(temp!=0x0f)
{
switch(temp)
{
case 0x0e:key_value=0;break;
case 0x0d:key_value=4;break;
case 0x0b:key_value=8;break;
case 0x07:key_value=12;break;
}
temp=0xf0;d6=1;d7=1;
if(d7==0)key_value+=0;while(d7==0);
if(d6==0)key_value+=1;while(d6==0);
if(temp==0xd0)key_value+=2;while(temp==0xd0);
if(temp==0xe0)key_value+=3;while(temp==0xe0);
}
}
return key_value;
}
void show(uchar t)
{
if(t==0)
{
dispuff[1]=tab[0]+0x80;
dispuff[2]=tab[5];
dispuff[3]=tab[0];
dispuff[4]=tab[v3];
dispuff[5]=tab[v2]+0x80;
dispuff[6]=tab[v1];
dispuff[7]=tab[v0];
}
if(t==1)
{
dispuff[1]=tab[0]+0x80;
dispuff[2]=tab[5];
dispuff[3]=tab[0];
dispuff[4]=tab[p3];
dispuff[5]=tab[p2]+0x80;
dispuff[6]=tab[p1];
dispuff[7]=tab[p0];
}
}
uchar ad_get(uchar addr)
{
uchar dat;
IIC_Start();
IIC_SendByte(0x90);IIC_WaitAck();
IIC_SendByte(addr);IIC_WaitAck();
IIC_Start();
IIC_SendByte(0x91);IIC_WaitAck();
dat=IIC_RecByte();IIC_Ack(0);
IIC_Stop();
return dat;
}
void Timer1Init(void) //2毫秒@11.0592MHz
{
AUXR |= 0x40; //定时器时钟1T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0x9A; //设置定时初值
TH1 = 0xA9; //设置定时初值
EA=1;
ET1=1;
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
}
void Timer0Init(void) //2毫秒@11.0592MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL1 = 0x9A; //设置定时初值
TH1 = 0xA9; //设置定时初值
EA=1;
ET0=1;
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
void main()
{
uchar value;//s;
Timer1Init();
Timer0Init();
while(1)
{
value=key_scan();
// s=ad_get(0x43);
// dispuff[0]=tab[s%1000/100];
// dispuff[1]=tab[s%100/10];
// dispuff[2]=tab[s%10];
if(value==0)
{
rel=1;start_flag=1;
}
if(start_flag==1)show(0);
if(value==4)
{rel=0;start_flag=2;
}
if(start_flag==2)
{show(1);
v0=0;v1=0;v2=0;v3=0;}
}
}
void timer1(void) interrupt 3
{
static uchar m=0;
buzzer(buzz);
relay(rel);
display(m,dispuff[m]);
m++;
if(m==8)m=0;
}
void timer0(void) interrupt 1
{
count++;
light_value=ad_get(0x41);
if(light_value<64)
{P0|=0xff;choose(4);P0&=0xfe;choose(0);}
if(light_value>64)
{P0=0xff;choose(4);choose(0);}
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1