欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
51單片機點滴控制系統程序
[打印本頁]
作者:
stc89c52wzy
時間:
2019-9-8 22:01
標題:
51單片機點滴控制系統程序
0.png
(59.19 KB, 下載次數: 49)
下載附件
2019-9-9 21:12 上傳
單片機源程序如下:
#include<reg52.h>
#include<intrins.h>
#include "delay.h"
#include "lcd1602.h"
#include "steper.h"
#include "keypress.h"
uchar dishu_sheding = 0;//設定滴數
uchar dishu_shiji = 0;//實際滴數
uchar diandi_number = 0;//滴數數值
uchar Number = 0;//時間計數
uchar PuZh[4] = "";//存儲發送數據
uchar level = 0;//當前步進電機的位置
sbit buzzer = P2^0;//蜂鳴器
/*******************************************************************************
* 函 數 名 : Timer_Init()
* 函數功能 : 設置定時
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void Timer_Init()
{
TMOD = 0x11;//定時器0定時器1為工作方式1
/* 裝載初值 */
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
EA = 1;//開總中斷
/* 開啟定時器中斷 */
ET0 = 1;//定時器0
/* 啟動定時器 */
TR0 = 1;//定時器0
/* 外部中斷 */
EX0 = 1;
EX1 = 1;
IT0 = 1;
IT1 = 1;
}
/*******************************************************************************
* 函 數 名 : UsartConfiguration()
* 函數功能 : 設置串口
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void UsartConfiguration()
{
SCON=0X50; //設置為工作方式1,8位數據,可變波特率
TMOD=0X20; //設置計數器工作方式2
PCON=0X00; //波特率不加倍
TH1=0XFd; //計數器初始值設置,9600@11.0592MHz
TL1=0XFd;
TR1=1; //打開計數器
ES = 1; //開串口中斷
EA = 1; //開總中斷
}
/*------------------------------------------------
中斷0函數,檢測滴管里面下落點滴的數量
------------------------------------------------*/
void Interrupt0() interrupt 0
{
diandi_number++;
DelayMs(100);//軟件防止波動
}
/*------------------------------------------------
定時計數0,設定為60s,檢測點滴速度,時間越長,精度越高
------------------------------------------------*/
void T0_Time() interrupt 1
{
/* 重裝初值 */
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
Number++;//自動校正流速程序
if(Number==20*60)//定時1分鐘
{
Number = 0;
dishu_shiji = diandi_number;
if((dishu_shiji-dishu_sheding)>6)//滴速過快,步進電機正向轉動,減慢滴速
{
if(level<=13)//步進電機是否轉到最大角度
{
level++;
Move(1,10);//正向轉動
}
}
else if((dishu_shiji-dishu_sheding)<-6)//滴速過慢,步進電機反向轉動,加快滴速
{
if(level>=0)//步進是否轉到最小角度
{
level--;
Move(0,10);//反向轉動
}
}
else;
diandi_number = 0;
}
}
/*------------------------------------------------
中斷1函數,檢測點滴袋是否有液體,當發生中斷,蜂鳴器報警,并且關閉輸液管
------------------------------------------------*/
void Interrupt1() interrupt 2
{
uchar i=0;
for(;i<13-level;i++)
{
Move(1,10);
}
dishu_sheding=0;
buzzer = 0;
}
/********************************************************************
* 名稱 : Com_Int()
* 功能 : 串口中斷子函數
* 輸入 : 無 * 輸出 : 無
***********************************************************************/
void Com_Int(void) interrupt 4
{
uchar i;
uchar receive_data;
EA = 0;
if(RI == 1) //當硬件接收到一個數據時,RI會置位
{
RI = 0;
receive_data = SBUF;//接收到的數據
if(receive_data == '1')
{
PuZh[0]='0'+dishu_shiji/100;
PuZh[1]='0'+dishu_shiji%100/10;
PuZh[2]='0'+dishu_shiji%10;
PuZh[3]='\0';
for(i=0; i<4; i++)
{
SBUF = PuZh[i]; //將要發送的數據放入到發送寄存器
while(!TI); //等待發送數據完成
TI=0; //清除發送完成標志位
DelayMs(1);
//LED =0;
}
}
else if(receive_data == '2')//關閉蜂鳴器
{
buzzer=1;
}
else if(receive_data == '3')//正向調整步進電機
{
if(level<=13)
{
level++;
Move(1,10);
}
}
else if(receive_data == '4')//反向調整步進電機
{
if(level>=0)
{
level--;
Move(0,10);
}
}
else if(receive_data == '5')//關閉點滴
{
uchar i=0;
for(;i<13-level;i++)
{
Move(1,10);
}
dishu_sheding=0;
}
else;
}
EA = 1;
}
void main()
{
uchar keyvalue;//鍵值
uchar k;//設定滴數顯示的位置
uchar value[3]={0,0,0};//保存輸入設定滴數的值,默認為0
uchar i;//臨時變量
buzzer=1;//初始化蜂鳴器
lcd1602_init();//初始化lcd
Timer_Init();//初始化定時
UsartConfiguration();//初始化串口
while(1)
{
lcd1602_clear();//清屏
lcd1602_write_string(0,0,"now:");
lcd1602_write_string(9,0,"d/min");
lcd1602_write_string(0,1,"set:");
lcd1602_write_string(9,1,"d/min");
lcd1602_write_char(6,0,'0'+dishu_shiji/100);
lcd1602_write_char(7,0,'0'+dishu_shiji%100/10);
lcd1602_write_char(8,0,'0'+dishu_shiji%10);
if (KeyPress())
{//按鍵處理程序
keyvalue = KeyScan();
if (keyvalue ==14)
{//手動校準步進電機
DelayMs(200);//去抖
while(1)
{
if(KeyPress())
{
keyvalue = KeyScan();
if(keyvalue == 11)//正向調整
{
Move(1,10);
}
if(keyvalue == 12)//反向調整
{
Move(0,10);
}
if(keyvalue ==16)//退出
{
level = 0;
break;
}
while (KeyPress());
}
}
}
if(keyvalue ==15)
{//設置顯示模式
DelayMs(200);//去抖
while(1)
{
if(KeyPress())
{
keyvalue = KeyScan();
if(keyvalue ==11)//向左滾動
{
i=40;
while(i--)
{
DelayMs(200);
lcd1602_turn_right();
}
}
if(keyvalue ==12)//向右滾動
{
i=40;
while(i--)
{
DelayMs(200);
lcd1602_turn_left();
}
}
if(keyvalue ==16)//清屏并退出
{
lcd1602_clear();
break;
}
while (KeyPress());
}
}
}
if(keyvalue==13)
{//設定滴數
DelayMs(200);//去抖
k=6;
while(1)
{
DelayMs(200);//去抖
if(KeyPress())
{
keyvalue = KeyScan();
if(keyvalue==0||keyvalue==1||keyvalue==2||keyvalue==3||keyvalue==4||keyvalue==5||keyvalue==6||keyvalue==7||keyvalue==8||keyvalue==9)
{
if(k==6)
{
value[0]=keyvalue;
}
else if(k==7)
{
value[1]=keyvalue;
}
else if(k==8)
{
value[2]=keyvalue;
}
keyvalue = '0'+ keyvalue;
lcd1602_write_char(k,1,keyvalue);
}
else if(keyvalue == 11)
{
k=k-1;
}
else if(keyvalue == 12)
{
k=k+1;
}
else if (keyvalue==16)
{
dishu_sheding = value[0]*100+value[1]*10+value[2];
break;
}
else;
while (KeyPress());
}
}
}
while (KeyPress());
}else{
lcd1602_write_char(6,1,'0'+dishu_sheding/100);
lcd1602_write_char(7,2,'0'+dishu_sheding%100/10);
lcd1602_write_char(8,3,'0'+dishu_sheding%10);
}
DelayMs(200);
}
}
復制代碼
所有資料51hei提供下載:
程序代碼.rar
(50.05 KB, 下載次數: 63)
2019-9-8 22:01 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
原理圖.pdf
(282.8 KB, 下載次數: 33)
2019-9-8 22:01 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
test.PDF
(30.01 KB, 下載次數: 33)
2019-9-8 22:01 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
lpc837964145
時間:
2020-4-23 08:49
請問作者有沒有proteus仿真文件呀,急求
作者:
淺若清風過
時間:
2020-5-28 11:35
有沒有仿真軟件,大佬
作者:
stc89c52wzy
時間:
2020-6-6 15:02
淺若清風過 發表于 2020-5-28 11:35
有沒有仿真軟件,大佬
對不起,沒有哦。
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1