【51单片机】【protues仿真】基于51单片机送带计数器系统

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

1、数码管显示

2、按键设置计数值、开始、暂停​

3、超声波进行物体测量通过相应指示灯会点亮

4、电源电路设计

二、使用步骤

基于51单片机的传送带计数器系统设计通常包含硬件电路模块和软件程序逻辑两部分,核心功能是实现产品自动计数、显示与报警控制。

三、硬件资源

1、51单片机核心模块

2、按键模块

3、超声波传感器

4、蜂鸣器模块

5、继电器模块

6、数码管显示模块

四、软件设计

#include<reg52.h> //头文件

#include <intrins.h>

#define uint unsigned int

#define uchar unsigned char

sbit seg_1=P3^4;//定义数码管的位选

sbit seg_2=P3^5;

sbit seg_3=P3^6;

sbit seg_4=P3^7;

sbit TX=P2^5; //超声波传感器的接口

sbit RX=P2^6;

sbit LED=P2^7; //指示灯接口

sbit motor=P1^5; //传送带电机接口

sbit K1=P1^0; //按键接口

sbit K2=P1^1;

sbit K3=P1^2;

sbit K4=P1^3;

sbit K5=P1^4;

uchar code SEG_Table\[\]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //CC共阴

char dis_data_buf4= {0,0,0,0};

uchar counter_buf4= {0,0,0,0};

long int set_num=2;

unsigned long int counter_num=0;

uchar start_flag=0; //开始标志

uchar set_flag=0;//设定计数值得标志

uchar key_num=0; //按键值

unsigned int time=0; //声波时间

unsigned int S=0; //距离

void Delay_1ms(uint i)//1ms延时

{

uchar x,j;

for(j=0; j<i; j++)

for(x=0; x<=148; x++);

}

//*********************************

//按键扫描程序

//mode:0,不支持连续按;1,支持连续按;

//*********************************

uchar KEY_Scan(uchar mode)

{

static uchar key_up=1;//按键按松开标志

if(mode)key_up=1; //支持连按

if(key_up&&(K1==0||K2==0||K3==0||K4==0||K5==0))

{

//Delay_1ms(10);//去抖动

key_up=0;

if(K1==0)return 1;

else if(K2==0)return 2;

else if(K3==0)return 3;

else if(K4==0)return 4;

else if(K5==0)return 5;

} else if(K1==1&&K2==1&&K3==1&&K4==1&&K5==1)key_up=1;

return 0;// 无按键按下

}

void delayms(unsigned int ms) //延时函数

{

unsigned char i=100,j;

for(;ms;ms--)

{

while(--i)

{

j=10;

while(--j);

}

}

}

//************************************

//定时器初始化

//初始化为10MS定时器

//************************************

void Time0_init()

{

TMOD |= 0x01; //使用模式1,16位定时器

TH0 = 0; //定时器装入初始值10ms

TL0 = 0;

EA = 1; //总中断

ET0 = 1;//定时器0初始化

TR0 = 0;

}

//************************************

//定时器初始化

//初始化为60MS定时器

//************************************

void Time1_init()

{

TMOD |= 0x10; //使用模式1,16位定时器

TH1 = (65536-6000)/256; //定时器装入初始值60ms

TL1 = (65536-6000)%256;

EA = 1; //总中断

ET1 = 1;//定时器1初始化

TR1 = 1;

}

/********************************************************************

* 名称 : Main()

* 功能 : 主函数

* 输入 : 无

* 输出 : 无

***********************************************************************/

void Main(void)

{

uint try=0;

uchar timeout_flag=0;

Time0_init(); //初始化定时器

Time1_init();

dis_data_buf0=set_num/1000;

dis_data_buf1=set_num%1000/100;

dis_data_buf2=set_num%100/10;

dis_data_buf3=set_num%10;

while(1)

{

StartModule();

while(!RX) //当RX为零时等待

{

try++;

if(try>6000) //等待时间不能太长,防止程序死机

{

try=0;

timeout_flag=1;//置位超时标志

break;

}

}

TH0=0;

TL0=0;

TR0=1; //开启计数

if(timeout_flag==0)

{

while(RX) //当RX为1计数并等待

{

try++;

if(try>6000) //等待时间不能太长,防止程序死机

{

try=0;

timeout_flag=1; //置位超时标志

break;

}

}

}

TR0=0; //关闭计数

if(timeout_flag)//如果超时了

{

TH0=0;

TL0=0;

timeout_flag=0;

}

else//正常数据

{

Conut(); //计算

}

}

}

五、实验现象

演示视频:

相关推荐
Dr.kangder14 分钟前
嵌入式面试总结(十八)——JTAG调试
嵌入式硬件·面试·职场和发展·架构·嵌入式
MEIXIFU11 小时前
便利店实际经营面积怎么选最合适
大数据·人工智能·物联网·生活·迭代加深
恒锐丰科技韩生1 小时前
率能 SS6226|2.4~7.2V 低压双通道双 H 桥电机驱动 SOP16 玩具小家电专用芯片
嵌入式硬件·硬件工程
Dr.kangder3 小时前
嵌入式面试总结(十九)——内存泄露
单片机·算法·面试·职场和发展·架构·硬件架构
Herbert_hwt3 小时前
【C语言基础】常量、选择结构与运算符全解析
c语言·开发语言·算法
2601_953988074 小时前
Ricon组态系统vs传统组态软件:为什么选择新一代Web组态平台
前端·后端·物联网·tcp/ip·数学建模·前端框架
萌新小白YXY5 小时前
SAE J1587/SAE J1708 协议笔记
笔记·单片机·嵌入式硬件
恒锐丰科技韩生5 小时前
率能 SS6635E|3.0~30V 直流双向 H 桥电机驱动 SOP8 玩具电子锁机器人分享
嵌入式硬件·硬件工程
嘉子的秃头日记5 小时前
机械革命“自动修复”无法修复你的电脑
stm32·单片机·电脑
恒锐丰科技林技术员5 小时前
高集成双通道 H 桥驱动芯片 SS6850H:低压直流电机驱动优选方案
嵌入式硬件·硬件工程