记录一下单片机大作业,
项目介绍:
我们小组在经过了半个学期的计算机系统设计的学习后,并结合了平时停车场的管理模式,使用C51单片机和各个模块完成了一个停车场的管理系统。该套系统模拟了当汽车进入停车时的收费提示液晶屏,我们这里使用了16个按键来模拟停车位,主要由以下功能:
(1)该系统可以提醒管理员该停车场是否剩余停车位;
(2)当汽车停入汽车位时开始计算停车时间,并显示车位占用量和余量;
(3)当汽车离开停车位时在液晶屏上显示期间该车停车的总时间与停车费,重置车位的状态,并显示车位占用量和余量。
(4)温度传感器测温(一直测温的状态,超过温度的时候响)
使用液晶屏用到的函数调用
流程图:
源码:
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
#define LCDDATA P0
sbit led_red = P2^4; //红色led引脚定义
sbit led2_green = P2^3; //绿色led引脚定义
sbit led3_red = P3^4; //火警控制灯
//LCD1602引脚定义
//采用8位并行方式,DB0~DB7连接至LCDDATA0~LCDDATA7
sbit RS=P2^0; //数据指令控制
sbit RW=P2^1; //读写选择(0写1读)
sbit CS=P2^2; //使能信号
uchar code KeyCodeTable[]={
0x11,0x12,0x14,0x18,0x21,0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88};// 设定键值
uchar i_,j_;
static int a[16];
unsigned int n;
static int timeStart[16];
//static int timeStop[16]; 无需此数组
static int timeCount = 0;
static uchar timer = 0;
static uint temp;//测得温度
sbit buzzer=P3^3;//蜂鸣器引脚
sbit DQ=P3^7;//ds18b20 端口
//功能:延时1毫秒
//说明:当晶振为12M时,j<112;当晶振为11.0592M时,j<122
void Delay_xms(uint x)
{
uint i,j;
for(i=0;i<x;i++)
for(j=0;j<112;j++);
}
//功能:12us延时
//STC89C52为1T单片机,即1个时钟/机器周期,速度为AT89C52的12倍
void Delay_xus(uint t)
{
for(;t>0;t--)
{
_nop_(); //_nop_(); 指令的延迟时间为 1us。可以较为精确得控制延迟时间。
}
}
uchar Keys_Scan() //按键扫描函数
{
uchar sCode,kCode,i,k; //定义变量
P1 = 0xf0; //P1口接按键,P1口赋值0xf0表示屏蔽低四位
if((P1&0xf0)!=0xf0) //判断高四位是否有按键按下
{
Delay_xus(200);
if((P1&0xf0)!=0xf0) //消抖 再判断
{
sCode = 0xfe;
for(k=0;k<4;k++)
{
P1 = sCode;
if(