【51單片機】【protues仿真】基于51單片機寵物投食器系統

目錄

一、主要功能

二、使用步驟

三、硬件資源

四、軟件設計

五、實驗現象

一、主要功能

1、LCD1602液晶顯示當前時間
2、按鍵設置時間,5個定時投喂時間?
3、可以通過手動按鍵進行投喂食物
4、步進電機模擬投喂食物

二、使用步驟

基于51單片機的寵物自動投食器系統設計可實現定時喂食、手動喂食及狀態監測等功能。

三、硬件資源

1、51單片機核心模塊
2、按鍵模塊
3、時鐘模塊
4、蜂鳴器模塊
5、步進電機模塊
6、LCD1602顯示模塊

四、軟件設計

#include "common.h"
#include "lcd1602.h"
#include "eeprom52.h"
#include "DS1302.h"

sbit key1 = P1^0;//切換鍵
sbit key2 = P1^1;//加鍵
sbit key3 = P1^2;//減鍵
sbit key4 = P1^3;//開啟
sbit key5 = P1^4;//關閉

sbit beep = P3^7;//蜂鳴器

#define ?angle ?360 ?//電機旋轉的角度
uchar code Clock[]={0x01,0x02,0x04,0x08}; ?? ??? ??? ?// 步進電機順時針旋轉數組
uchar code AntiClock[]={0x08,0x04,0x02,0x01};?? ??? ?// 步進電機逆時針旋轉數組
unsigned char setn = 0;//設置標志
uchar ?DS1302_Table[7]={0};
uchar ?sec, min, hour, day, month, week, year;
bit ? open_flag=0;
bit ? feeding_time = 0;

typedef struct {
?? ?unsigned char ?shi;?? ? ?//時
?? ?unsigned char?? ? fen;?? ??? ?//分
}user;

user ?foodtime1={7,00}; ? ?//喂食時間1
user ?foodtime2={11,03}; ? //喂食時間2
user ?foodtime3={14,0}; ? //喂食時間3
user ?foodtime4={17,0}; ? //喂食時間4
user ?foodtime5={22,19}; ? //喂食時間5

/*********************************************************/
// 毫秒級的延時函數,time是要延時的毫秒數
/*********************************************************/
void DelayMs(uint time)
{
?? ?uint i,j;
?? ?for(i=0;i<time;i++)
?? ??? ?for(j=0;j<112;j++);
}

/*********************************************************/
// 開
/*********************************************************/
void Ul2003_Open()
{
?? ?uint i,j;
?? ??? ?for(j=0;j<10;j++)?? ??? ?// 控制步進電機正轉
?? ??? ?{
?? ??? ??? ?for(i=0;i<4;i++)
?? ??? ??? ?{
?? ??? ??? ??? ?P2=Clock[i]|0xf0;
?? ??? ??? ??? ?DelayMs(10);
?? ??? ??? ?}
?? ??? ?}
}

/*********************************************************/
// 關
/*********************************************************/
void Ul2003_Close()
{
?? ?uint i,j;
?? ??? ?for(j=0;j<10;j++)?? ??? ?// 控制步進電機反轉
?? ??? ?{
?? ??? ??? ?for(i=0;i<4;i++)
?? ??? ??? ?{
?? ??? ??? ??? ?P2=AntiClock[i]|0xf0;
?? ??? ??? ??? ?DelayMs(10);
?? ??? ??? ?}
?? ??? ?}
}


void time_init(void)?? ? ?//定時器初始化
{
?? ?TMOD |= 0x01;?? ? ?//定時器0工作方式1
? TL0 = 0xCD;?? ??? ?
?? ?TH0 = 0xF8; ?//定時器定時2ms
??? ?TR0 = 1;
?? ?ET0 = 1;?? ??? ? ?//開定時器0中斷?
?? ?EA ?= 1;?? ? ?? ? ?//開總中斷
}

void eepromWriteByte(void)
{
?? ? ?uint addr=0x2000;
?? ?
?? ??? ? SectorErase(addr);//扇區擦除
?? ? ? byte_write(addr++, foodtime1.shi);
?? ? ? byte_write(addr++, foodtime1.fen);
?? ? ? byte_write(addr++, foodtime2.shi);
?? ? ? byte_write(addr++, foodtime2.fen);
?? ? ? byte_write(addr++, foodtime3.shi);
?? ? ? byte_write(addr++, foodtime3.fen);
?? ? ? byte_write(addr++, foodtime4.shi);
?? ? ? byte_write(addr++, foodtime4.fen);
?? ? ? byte_write(addr++, foodtime5.shi);
?? ? ? byte_write(addr++, foodtime5.fen);
?? ? ? byte_write(0x2014, 0xAA);
}

void eepromInit(void)
{
?? ? ?uint addr=0x2000;
?? ?
?? ??? ?if(byte_read(0x2014)!=0xAA)//校驗是不是新的單片機
?? ??? ?{
?? ??? ??? ??? ?eepromWriteByte();
?? ??? ??? ? ?delay_ms(100);
?? ??? ?}
}

void displayTime(void)
{
?? ? //顯示時間
?? ? lcd_write_com(0x80);
?? ? lcd_write_data(DS1302_Table[0]/10+0x30);
?? ? lcd_write_data(DS1302_Table[0]%10+0x30);
?? ? lcd_write_data('/');
?? ? lcd_write_data(DS1302_Table[1]/10+0x30);
?? ? lcd_write_data(DS1302_Table[1]%10+0x30);
?? ? lcd_write_data('/');
?? ? lcd_write_data(DS1302_Table[2]/10+0x30);
?? ? lcd_write_data(DS1302_Table[2]%10+0x30);

?? ? lcd_write_com(0x80+0x40);
?? ? lcd_write_data(DS1302_Table[4]/10+0x30);
?? ? lcd_write_data(DS1302_Table[4]%10+0x30);
?? ? lcd_write_data(':');
?? ? lcd_write_data(DS1302_Table[5]/10+0x30);
?? ? lcd_write_data(DS1302_Table[5]%10+0x30);
?? ? lcd_write_data(':');
?? ? lcd_write_data(DS1302_Table[6]/10+0x30);
?? ? lcd_write_data(DS1302_Table[6]%10+0x30);
}

void write_week(uchar week)//寫星期函數
{
? ? lcd_write_com(0x80+9);//星期字符的顯示位置
? ? switch(week)
? ? {
? ? case 1:
? ? ? ? lcd_write_data('M');//星期數為1時,顯示
? ? ? ? lcd_write_data('O');
? ? ? ? lcd_write_data('N');
? ? ? ? break;

? ? case 2:
? ? ? ? lcd_write_data('T');//星期數據為2時顯示
? ? ? ? lcd_write_data('U');
? ? ? ? lcd_write_data('E');
? ? ? ? break;

? ? case 3:
? ? ? ? lcd_write_data('W');//星期數據為3時顯示
? ? ? ? lcd_write_data('E');
? ? ? ? lcd_write_data('D');
? ? ? ? break;

? ? case 4:
? ? ? ? lcd_write_data('T');//星期數據為4是顯示
? ? ? ? lcd_write_data('H');
? ? ? ? lcd_write_data('U');
? ? ? ? break;

? ? case 5:
? ? ? ? lcd_write_data('F');//星期數據為5時顯示
? ? ? ? lcd_write_data('R');
? ? ? ? lcd_write_data('I');
? ? ? ? break;

? ? case 6:
? ? ? ? lcd_write_data('S');//星期數據為6時顯示
? ? ? ? lcd_write_data('A');
? ? ? ? lcd_write_data('T');
? ? ? ? break;

? ? case 0:
? ? ? ? lcd_write_data('S');//星期數據為7時顯示
? ? ? ? lcd_write_data('U');
? ? ? ? lcd_write_data('N');
? ? ? ? break;
? ? }

}

void Run_DS1302(void)//DS1302運行
{
?? ? ?//獲取時間:年月日時分秒
?? ??? ?v_W1302(0x8f, 0);
?? ??? ?sec = bcdtodec(uc_R1302(0x81));?? ? ?
?? ??? ?v_W1302(0x8f, 0);
?? ??? ?min = bcdtodec(uc_R1302(0x83));?? ? ?
?? ??? ?v_W1302(0x8f, 0);
?? ??? ?hour = bcdtodec(uc_R1302(0x85));?
?? ??? ?v_W1302(0x8f, 0);
?? ??? ?day = bcdtodec(uc_R1302(0x87));?? ??
?? ??? ?v_W1302(0x8f, 0);
?? ??? ?month = bcdtodec(uc_R1302(0x89));?
?? ??? ?v_W1302(0x8f, 0);
?? ??? ?week = bcdtodec(uc_R1302(0x8b));?
?? ??? ?v_W1302(0x8f, 0);
?? ??? ?year = bcdtodec(uc_R1302(0x8d));?
?? ??? ?
?? ? ?DS1302_Table[0]=year;
?? ??? ?DS1302_Table[1]=month;
?? ??? ?DS1302_Table[2]=day;
?? ??? ?DS1302_Table[3]=week;
?? ??? ?DS1302_Table[4]=hour;
?? ??? ?DS1302_Table[5]=min;
?? ??? ?DS1302_Table[6]=sec;
?? ??? ?
?? ??? ?displayTime();
// ? ?write_week(week);
}

void displayUserSetValue(const user * const date)//顯示設置值
{
?? ? lcd_write_char(6,1,date ->shi / 10+'0');
?? ? lcd_write_char(7,1,date ->shi % 10+'0');
?? ? lcd_write_char(9,1,date ->fen / 10+'0');
?? ? lcd_write_char(10,1,date ->fen % 10+'0');
}

void keyscan()
{
? if(key1 == 0)//設置鍵
?? ?{
?? ??? ?delay_ms(10);
?? ??? ?if(key1 == 0)
?? ??? ?{
?? ??? ??? ?beep = 0;
?? ??? ??? ?delay_ms(100);
?? ??? ??? ?beep = 1;
?? ??? ??? ?while(key1 == 0);//等待按鍵松開
?? ??? ??? ?setn++;
?? ??? ??? ?if(setn > 16)//按下次數超過16次,退出設置
?? ??? ??? ?{
?? ??? ??? ??? ?setn = 0;
?? ??? ??? ??? ?lcd_write_com(0x0c);//關閉光標
?? ??? ??? ??? ?lcd_clear();
?? ??? ??? ??? ?lcd_write_str(0, 0, " ?/ ?/ ? ? ? ? ?");
?? ??? ? ? ?lcd_write_str(0, 1, " ?: ?: ? ? ? ? ?");
?? ??? ??? ??? ?eepromWriteByte(); ? ?//退出設置之后,把數據保存一遍
?? ??? ??? ?}
?? ??? ??? ?
?? ??? ??? ?if(setn == 1)//設置年
?? ??? ??? ?{
?? ??? ??? ??? ? displayTime();
?? ??? ??? ??? ?
?? ??? ??? ??? ? lcd_write_com(0x80+1);
?? ??? ??? ??? ? lcd_write_com(0x0f);
?? ??? ??? ?}
?? ??? ??? ?if(setn == 2)//設置月
?? ??? ??? ?{
?? ??? ??? ??? ? lcd_write_com(0x80+4);
?? ??? ??? ??? ? lcd_write_com(0x0f);
?? ??? ??? ?}
?? ??? ??? ?if(setn == 3)//日
?? ??? ??? ?{
?? ??? ??? ??? ? lcd_write_com(0x80+7);
?? ??? ??? ??? ? lcd_write_com(0x0f);
?? ??? ??? ?}
?? ??? ??? ?if(setn == 4)//時
?? ??? ??? ?{
?? ??? ??? ??? ? lcd_write_com(0x80+0x40+1);
?? ??? ??? ??? ? lcd_write_com(0x0f);
?? ??? ??? ?}
?? ??? ??? ?if(setn == 5)//分
?? ??? ??? ?{
?? ??? ??? ??? ? lcd_write_com(0x80+0x40+4);
?? ??? ??? ??? ? lcd_write_com(0x0f);
?? ??? ??? ?}
?? ??? ??? ?if(setn == 6)//秒
?? ??? ??? ?{
?? ??? ??? ??? ?lcd_write_com(0x80+0x40+7);
?? ??? ??? ??? ?lcd_write_com(0x0f);
?? ??? ??? ?}
?? ??? ??? ?if(setn == 7)
?? ??? ??? ?{
?? ??? ??? ??? ?lcd_write_str(0, 0, "set food time 1 ");
?? ??? ??? ??? ?lcd_write_str(0, 1, " ? ? ?00:00 ? ? ");
?? ??? ??? ??? ?
?? ??? ??? ??? ?displayUserSetValue(&foodtime1);
?? ??? ??? ??? ?
?? ??? ??? ??? ?lcd_write_com(0x80+0x40+7);
?? ??? ??? ??? ?lcd_write_com(0x0f);
?? ??? ??? ?}
?? ??? ??? ?if(setn == 8)
?? ??? ??? ?{
?? ??? ??? ??? ??? ?lcd_write_com(0x80+0x40+10);
?? ??? ??? ??? ??? ?lcd_write_com(0x0F);
?? ??? ??? ?}
?? ??? ??? ?if(setn == 9)
?? ??? ??? ?{
?? ??? ??? ??? ?lcd_write_str(0, 0, "set food time 2 ");
?? ??? ??? ??? ?lcd_write_str(0, 1, " ? ? ?00:00 ? ? ");
?? ??? ??? ??? ?
?? ??? ??? ??? ?displayUserSetValue(&foodtime2);
?? ??? ??? ??? ?
?? ??? ??? ??? ?lcd_write_com(0x80+0x40+7);
?? ??? ??? ??? ?lcd_write_com(0x0f);
?? ??? ??? ?}
?? ??? ??? ?if(setn == 10)
?? ??? ??? ?{
?? ??? ??? ??? ??? ?lcd_write_com(0x80+0x40+10);
?? ??? ??? ??? ??? ?lcd_write_com(0x0F);
?? ??? ??? ?}
?? ??? ??? ?if(setn == 11)
?? ??? ??? ?{
?? ??? ??? ??? ?lcd_write_str(0, 0, "set food time 3 ");
?? ??? ??? ??? ?lcd_write_str(0, 1, " ? ? ?00:00 ? ? ");
?? ??? ??? ??? ?
?? ??? ??? ??? ?displayUserSetValue(&foodtime3);
?? ??? ??? ??? ?
?? ??? ??? ??? ?lcd_write_com(0x80+0x40+7);
?? ??? ??? ??? ?lcd_write_com(0x0f);
?? ??? ??? ?}
?? ??? ??? ?if(setn == 12)
?? ??? ??? ?{
?? ??? ??? ??? ??? ?lcd_write_com(0x80+0x40+10);
?? ??? ??? ??? ??? ?lcd_write_com(0x0F);
?? ??? ??? ?}
?? ??? ??? ?if(setn == 13)
?? ??? ??? ?{
?? ??? ??? ??? ?lcd_write_str(0, 0, "set food time 4 ");
?? ??? ??? ??? ?lcd_write_str(0, 1, " ? ? ?00:00 ? ? ");
?? ??? ??? ??? ?
?? ??? ??? ??? ?displayUserSetValue(&foodtime4);
?? ??? ??? ??? ?
?? ??? ??? ??? ?lcd_write_com(0x80+0x40+7);
?? ??? ??? ??? ?lcd_write_com(0x0f);
?? ??? ??? ?}
?? ??? ??? ?if(setn == 14)
?? ??? ??? ?{
?? ??? ??? ??? ??? ?lcd_write_com(0x80+0x40+10);
?? ??? ??? ??? ??? ?lcd_write_com(0x0F);
?? ??? ??? ?}
?? ??? ??? ?if(setn == 15)
?? ??? ??? ?{
?? ??? ??? ??? ?lcd_write_str(0, 0, "set food time 5 ");
?? ??? ??? ??? ?lcd_write_str(0, 1, " ? ? ?00:00 ? ? ");
?? ??? ??? ??? ?
?? ??? ??? ??? ?displayUserSetValue(&foodtime5);
?? ??? ??? ??? ?
?? ??? ??? ??? ?lcd_write_com(0x80+0x40+7);
?? ??? ??? ??? ?lcd_write_com(0x0f);
?? ??? ??? ?}
?? ??? ??? ?if(setn == 16)
?? ??? ??? ?{
?? ??? ??? ??? ??? ?lcd_write_com(0x80+0x40+10);
?? ??? ??? ??? ??? ?lcd_write_com(0x0F);
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?if(key2 == 0)
?? ?{
?? ??? ?delay_ms(10);
?? ??? ?if(key2 == 0)
?? ??? ?{
?? ??? ??? ?beep = 0;
?? ??? ??? ?delay_ms(100);
?? ??? ??? ?beep = 1;
?? ??? ??? ?while(key2 == 0);
?? ??? ??? ? if(setn == 1)//設置年
?? ??? ??? ? {
?? ??? ??? ??? ??? ? DS1302_Table[0]++;
?? ??? ??? ??? ??? ? if(DS1302_Table[0] == 100)//最大到100?
?? ??? ??? ??? ??? ? DS1302_Table[0] = 0;
?? ??? ??? ??? ??? ? Write_DS1302Init(DS1302_Table[0],DS1302_Table[1],DS1302_Table[2],0,DS1302_Table[4],DS1302_Table[5],DS1302_Table[6]);//寫入DS1302
?? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ? displayTime();//顯示
?? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ? lcd_write_com(0x80+1);
?? ??? ??? ??? ??? ? lcd_write_com(0x0f);//光標閃爍
?? ??? ??? ? }
?? ??? ??? ? else if(setn == 2)//設置月
?? ??? ??? ? {
?? ??? ??? ??? ??? ?DS1302_Table[1]++;
?? ??? ??? ??? ??? ?if(DS1302_Table[1]==13)//最大12個月
?? ??? ??? ??? ??? ?DS1302_Table[1]=1;

?? ??? ??? ??? ??? ? Write_DS1302Init(DS1302_Table[0],DS1302_Table[1],DS1302_Table[2],0,DS1302_Table[4],DS1302_Table[5],DS1302_Table[6]);//寫入DS1302
?? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ? displayTime();//顯示
?? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ? lcd_write_com(0x80+4);
?? ??? ??? ??? ??? ? lcd_write_com(0x0f);//光標閃爍
?? ??? ??? ? }
?? ??? ??? ? else if(setn == 3)//設置日
?? ??? ??? ? {
?? ??? ??? ??? ??? ? DS1302_Table[2]++;

?? ??? ??? ??? ??? ?if(DS1302_Table[2]==32)
?? ??? ??? ??? ??? ??? ??? ?DS1302_Table[2]=1;

?? ??? ??? ??? ??? ? Write_DS1302Init(DS1302_Table[0],DS1302_Table[1],DS1302_Table[2],0,DS1302_Table[4],DS1302_Table[5],DS1302_Table[6]);//寫入DS1302
?? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ? displayTime();//顯示
?? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ? lcd_write_com(0x80+7);
?? ??? ??? ??? ??? ? lcd_write_com(0x0f);//光標閃爍
?? ??? ??? ? }
?? ??? ??? ? else if(setn == 4)//設置時
?? ??? ??? ? {
?? ??? ??? ??? ??? ? DS1302_Table[4]++;
?? ??? ??? ??? ??? ? if(DS1302_Table[4] == 24)//到0點
?? ??? ??? ??? ??? ? DS1302_Table[4] = 0;
?? ??? ??? ??? ??? ? Write_DS1302Init(DS1302_Table[0],DS1302_Table[1],DS1302_Table[2],0,DS1302_Table[4],DS1302_Table[5],DS1302_Table[6]);//寫入DS1302
?? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ? displayTime();//顯示
?? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ? lcd_write_com(0x80+0x40+1);
?? ??? ??? ??? ??? ? lcd_write_com(0x0f);//光標閃爍
?? ??? ??? ? }
?? ??? ??? ? else ?if(setn == 5)//設置分
?? ??? ??? ? {
?? ??? ??? ??? ??? ? DS1302_Table[5]++;
?? ??? ??? ??? ??? ? if(DS1302_Table[5] == 60)//60分鐘
?? ??? ??? ??? ??? ? DS1302_Table[5] = 0;
?? ??? ??? ??? ??? ? Write_DS1302Init(DS1302_Table[0],DS1302_Table[1],DS1302_Table[2],0,DS1302_Table[4],DS1302_Table[5],DS1302_Table[6]);//寫入DS1302
?? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ? displayTime();//顯示
?? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ? lcd_write_com(0x80+0x40+4);
?? ??? ??? ??? ??? ? lcd_write_com(0x0f);//光標閃爍
?? ??? ??? ? }
?? ??? ??? ? else ?if(setn == 6)//設置分
?? ??? ??? ? {
?? ??? ??? ??? ??? ? DS1302_Table[6]++;
?? ??? ??? ??? ??? ? if(DS1302_Table[6] == 60)//60秒
?? ??? ??? ??? ??? ? DS1302_Table[6] = 0;
?? ??? ??? ??? ??? ? Write_DS1302Init(DS1302_Table[0],DS1302_Table[1],DS1302_Table[2],0,DS1302_Table[4],DS1302_Table[5],DS1302_Table[6]);//寫入DS1302
?? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ? displayTime();//顯示
?? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ? lcd_write_com(0x80+0x40+7);
?? ??? ??? ??? ??? ? lcd_write_com(0x0f);//光標閃爍
?? ??? ??? ? }
?? ??? ??? ? else if(setn == 7)
?? ??? ??? ?{
?? ??? ??? ??? ?foodtime1.shi++;
?? ??? ??? ??? ?if(foodtime1.shi==24)
?? ??? ??? ??? ?foodtime1.shi=0;
?? ??? ??? ??? ?
?? ??? ??? ??? ?displayUserSetValue(&foodtime1);
?? ??? ??? ??? ?
?? ??? ??? ??? ?lcd_write_com(0x80+0x40+7);
?? ??? ??? ??? ?lcd_write_com(0x0f);
?? ??? ??? ?}
?? ??? ? else?? ?if(setn == 8)
?? ??? ??? ?{
?? ??? ??? ??? ?foodtime1.fen++;
?? ??? ??? ??? ?if(foodtime1.fen==60)
?? ??? ??? ??? ?foodtime1.fen=0;
?? ??? ??? ??? ?
?? ??? ??? ??? ?displayUserSetValue(&foodtime1);
?? ??? ??? ??? ?
?? ??? ??? ??? ??? ?lcd_write_com(0x80+0x40+10);
?? ??? ??? ??? ??? ?lcd_write_com(0x0F);
?? ??? ??? ?}
?? ??? ? else?? ?if(setn == 9)
?? ??? ??? ?{
?? ??? ??? ??? ?foodtime2.shi++;
?? ??? ??? ??? ?if(foodtime2.shi==24)
?? ??? ??? ??? ?foodtime2.shi=0;
?? ??? ??? ??? ?
?? ??? ??? ??? ?displayUserSetValue(&foodtime2);
?? ??? ??? ??? ?
?? ??? ??? ??? ?lcd_write_com(0x80+0x40+7);
?? ??? ??? ??? ?lcd_write_com(0x0f);
?? ??? ??? ?}
?? ??? ?else?? ?if(setn == 10)
?? ??? ??? ?{
?? ??? ??? ??? ? ?foodtime2.fen++;
?? ??? ??? ??? ?if(foodtime2.fen==60)
?? ??? ??? ??? ?foodtime2.fen=0;
?? ??? ??? ??? ?displayUserSetValue(&foodtime2);
?? ??? ??? ??? ??? ?lcd_write_com(0x80+0x40+10);
?? ??? ??? ??? ??? ?lcd_write_com(0x0F);
?? ??? ??? ?}
?? ??? ?else?? ?if(setn == 11)
?? ??? ??? ?{
?? ??? ??? ??? ?foodtime3.shi++;
?? ??? ??? ??? ?if(foodtime3.shi==24)
?? ??? ??? ??? ?foodtime3.shi=0;
?? ??? ??? ??? ?
?? ??? ??? ??? ?displayUserSetValue(&foodtime3);
?? ??? ??? ??? ?
?? ??? ??? ??? ?lcd_write_com(0x80+0x40+7);
?? ??? ??? ??? ?lcd_write_com(0x0f);
?? ??? ??? ?}
?? ??? ?else?? ?if(setn == 12)
?? ??? ??? ?{
?? ??? ??? ??? ? ? foodtime3.fen++;
?? ??? ??? ??? ?if(foodtime3.fen==60)
?? ??? ??? ??? ?foodtime3.fen=0;
?? ??? ??? ??? ?displayUserSetValue(&foodtime3);
?? ??? ??? ??? ??? ?lcd_write_com(0x80+0x40+10);
?? ??? ??? ??? ??? ?lcd_write_com(0x0F);
?? ??? ??? ?}
?? ??? ?else?? ?if(setn == 13)
?? ??? ??? ?{
?? ??? ??? ??? ?foodtime4.shi++;
?? ??? ??? ??? ?if(foodtime4.shi==24)
?? ??? ??? ??? ?foodtime4.shi=0;
?? ??? ??? ??? ?
?? ??? ??? ??? ?displayUserSetValue(&foodtime4);
?? ??? ??? ??? ?
?? ??? ??? ??? ?lcd_write_com(0x80+0x40+7);
?? ??? ??? ??? ?lcd_write_com(0x0f);
?? ??? ??? ?}
?? ??? ?else?? ?if(setn == 14)
?? ??? ??? ?{
?? ??? ??? ??? ? ?foodtime4.fen++;
?? ??? ??? ??? ?if(foodtime4.fen==60)
?? ??? ??? ??? ?foodtime4.fen=0;
?? ??? ??? ??? ?displayUserSetValue(&foodtime4);
?? ??? ??? ??? ??? ?lcd_write_com(0x80+0x40+10);
?? ??? ??? ??? ??? ?lcd_write_com(0x0F);
?? ??? ??? ?}
?? ??? ?else?? ?if(setn == 15)
?? ??? ??? ?{
?? ??? ??? ??? ?foodtime5.shi++;
?? ??? ??? ??? ?if(foodtime5.shi==24)
?? ??? ??? ??? ?foodtime5.shi=0;
?? ??? ??? ??? ?
?? ??? ??? ??? ?displayUserSetValue(&foodtime5);
?? ??? ??? ??? ?
?? ??? ??? ??? ?lcd_write_com(0x80+0x40+7);
?? ??? ??? ??? ?lcd_write_com(0x0f);
?? ??? ??? ?}
?? ??? ?else?? ?if(setn == 16)
?? ??? ??? ?{
?? ??? ??? ??? ? ?foodtime5.fen++;
?? ??? ??? ??? ?if(foodtime5.fen==60)
?? ??? ??? ??? ?foodtime5.fen=0;
?? ??? ??? ??? ?
?? ??? ??? ??? ?displayUserSetValue(&foodtime5);
?? ??? ??? ??? ?
?? ??? ??? ??? ??? ?lcd_write_com(0x80+0x40+10);
?? ??? ??? ??? ??? ?lcd_write_com(0x0F);
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?if(key3 == 0)
?? ?{
?? ??? ?delay_ms(10);
?? ??? ?if(key3 == 0 )
?? ??? ?{
?? ??? ??? ?beep = 0;
?? ??? ??? ?delay_ms(100);
?? ??? ??? ?beep = 1;
?? ??? ??? ?while(key3 == 0);
?? ??? ??? ?if(setn == 1)//設置年
?? ??? ??? ? {
?? ??? ??? ??? ??? ? if(DS1302_Table[0] == 0)
?? ??? ??? ??? ??? ? DS1302_Table[0] = 100;
?? ??? ??? ??? ??? ? DS1302_Table[0]--;
?? ??? ??? ??? ??? ? Write_DS1302Init(DS1302_Table[0],DS1302_Table[1],DS1302_Table[2],0,DS1302_Table[4],DS1302_Table[5],DS1302_Table[6]);
?? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ? displayTime();
?? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ? lcd_write_com(0x80+1);
?? ??? ??? ??? ??? ? lcd_write_com(0x0f);
?? ??? ??? ? }
?? ??? ??? ? else if(setn == 2)//設置月
?? ??? ??? ? {
?? ??? ??? ??? ??? ?DS1302_Table[1]--;
?? ??? ??? ??? ??? ?if(DS1302_Table[1]==0)
?? ??? ??? ??? ??? ??? ??? ?DS1302_Table[1]=12;

?? ??? ??? ??? ??? ? Write_DS1302Init(DS1302_Table[0],DS1302_Table[1],DS1302_Table[2],0,DS1302_Table[4],DS1302_Table[5],DS1302_Table[6]);
?? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ? displayTime();
?? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ? lcd_write_com(0x80+4);
?? ??? ??? ??? ??? ? lcd_write_com(0x0f);
?? ??? ??? ? }
?? ??? ??? ? else if(setn == 3)//設置日 ? ? ?
?? ??? ??? ? {
?? ??? ??? ??? ??? ? DS1302_Table[2]--;

?? ??? ??? ??? ??? ??? ?if(DS1302_Table[2]==0)
?? ??? ??? ??? ??? ??? ??? ?DS1302_Table[2]=31;
? ?
?? ??? ??? ??? ??? ? Write_DS1302Init(DS1302_Table[0],DS1302_Table[1],DS1302_Table[2],0,DS1302_Table[4],DS1302_Table[5],DS1302_Table[6]);
?? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ? displayTime();
?? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ? lcd_write_com(0x80+7);
?? ??? ??? ??? ??? ? lcd_write_com(0x0f);
?? ??? ??? ? }
?? ??? ??? ??? ?else?? ?if(setn == 4)//設置時
?? ??? ??? ??? ? {
?? ??? ??? ??? ??? ??? ? if(DS1302_Table[4] == 0)
?? ??? ??? ??? ??? ??? ? DS1302_Table[4] = 24;
?? ??? ??? ??? ??? ??? ? DS1302_Table[4]--;
?? ??? ??? ??? ??? ??? ? Write_DS1302Init(DS1302_Table[0],DS1302_Table[1],DS1302_Table[2],0,DS1302_Table[4],DS1302_Table[5],DS1302_Table[6]);
?? ??? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ??? ? displayTime();
?? ??? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ??? ? lcd_write_com(0x80+0x40+1);
?? ??? ??? ??? ??? ??? ? lcd_write_com(0x0f);
?? ??? ??? ??? ? }
?? ??? ??? ??? ? else ?if(setn == 5)//設置分
?? ??? ??? ??? ? {
?? ??? ??? ??? ??? ??? ? if(DS1302_Table[5] == 0)
?? ??? ??? ??? ??? ??? ? DS1302_Table[5] = 60;
?? ??? ??? ??? ??? ??? ? DS1302_Table[5]--;
?? ??? ??? ??? ??? ??? ? Write_DS1302Init(DS1302_Table[0],DS1302_Table[1],DS1302_Table[2],0,DS1302_Table[4],DS1302_Table[5],DS1302_Table[6]);
?? ??? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ??? ? displayTime();
?? ??? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ??? ? lcd_write_com(0x80+0x40+4);
?? ??? ??? ??? ??? ??? ? lcd_write_com(0x0f);
?? ??? ??? ??? ? }
?? ??? ??? ??? ? else ?if(setn == 6)//設置秒
?? ??? ??? ??? ? {
?? ??? ??? ??? ??? ??? ? if(DS1302_Table[6] == 0)
?? ??? ??? ??? ??? ??? ? DS1302_Table[6] = 60;
?? ??? ??? ??? ??? ??? ? DS1302_Table[6]--;
?? ??? ??? ??? ??? ??? ? Write_DS1302Init(DS1302_Table[0],DS1302_Table[1],DS1302_Table[2],0,DS1302_Table[4],DS1302_Table[5],DS1302_Table[6]);
?? ??? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ??? ? displayTime();
?? ??? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ??? ? lcd_write_com(0x80+0x40+7);
?? ??? ??? ??? ??? ??? ? lcd_write_com(0x0f);
?? ??? ??? ??? ? }
?? ??? ??? ??? ? else if(setn == 7)
?? ??? ??? ?{
?? ??? ??? ??? ?
?? ??? ??? ??? ?if(foodtime1.shi==0)
?? ??? ??? ??? ?foodtime1.shi=24;
?? ??? ??? ??? ?foodtime1.shi--;
?? ??? ??? ??? ?displayUserSetValue(&foodtime1);
?? ??? ??? ??? ?
?? ??? ??? ??? ?lcd_write_com(0x80+0x40+7);
?? ??? ??? ??? ?lcd_write_com(0x0f);
?? ??? ??? ?}
?? ??? ? else?? ?if(setn == 8)
?? ??? ??? ?{
?? ??? ??? ??? ?if(foodtime1.fen==0)
?? ??? ??? ??? ?foodtime1.fen=60;
?? ??? ??? ??? ?foodtime1.fen--;
?? ??? ??? ??? ?displayUserSetValue(&foodtime1);
?? ??? ??? ??? ?
?? ??? ??? ??? ??? ?lcd_write_com(0x80+0x40+10);
?? ??? ??? ??? ??? ?lcd_write_com(0x0F);
?? ??? ??? ?}
?? ??? ? else?? ?if(setn == 9)
?? ??? ??? ?{
?? ??? ??? ??? ?
?? ??? ??? ??? ?if(foodtime2.shi==0)
?? ??? ??? ??? ?foodtime2.shi=24;
?? ??? ??? ??? ?foodtime2.shi--;
?? ??? ??? ??? ?displayUserSetValue(&foodtime2);
?? ??? ??? ??? ?
?? ??? ??? ??? ?lcd_write_com(0x80+0x40+7);
?? ??? ??? ??? ?lcd_write_com(0x0f);
?? ??? ??? ?}
?? ??? ?else?? ?if(setn == 10)
?? ??? ??? ?{
?? ??? ??? ??? ?if(foodtime2.fen==0)
?? ??? ??? ??? ?foodtime2.fen=60;
?? ??? ??? ??? ? foodtime2.fen--;
?? ??? ??? ??? ?displayUserSetValue(&foodtime2);
?? ??? ??? ??? ??? ?lcd_write_com(0x80+0x40+10);
?? ??? ??? ??? ??? ?lcd_write_com(0x0F);
?? ??? ??? ?}
?? ??? ?else?? ?if(setn == 11)
?? ??? ??? ?{
?? ??? ??? ??? ?
?? ??? ??? ??? ?if(foodtime3.shi==0)
?? ??? ??? ??? ?foodtime3.shi=24;
?? ??? ??? ??? ?foodtime3.shi--;
?? ??? ??? ??? ?displayUserSetValue(&foodtime3);
?? ??? ??? ??? ?
?? ??? ??? ??? ?lcd_write_com(0x80+0x40+7);
?? ??? ??? ??? ?lcd_write_com(0x0f);
?? ??? ??? ?}
?? ??? ?else?? ?if(setn == 12)
?? ??? ??? ?{
?? ??? ??? ??? ?if(foodtime3.fen==0)
?? ??? ??? ??? ?foodtime3.fen=60;
?? ??? ??? ??? ?foodtime3.fen--;
?? ??? ??? ??? ?displayUserSetValue(&foodtime3);
?? ??? ??? ??? ??? ?lcd_write_com(0x80+0x40+10);
?? ??? ??? ??? ??? ?lcd_write_com(0x0F);
?? ??? ??? ?}
?? ??? ?else?? ?if(setn == 13)
?? ??? ??? ?{
?? ??? ??? ??? ?if(foodtime4.shi==0)
?? ??? ??? ??? ?foodtime4.shi=24;
?? ??? ??? ??? ?foodtime4.shi--;
?? ??? ??? ??? ?displayUserSetValue(&foodtime4);
?? ??? ??? ??? ?
?? ??? ??? ??? ?lcd_write_com(0x80+0x40+7);
?? ??? ??? ??? ?lcd_write_com(0x0f);
?? ??? ??? ?}
?? ??? ?else?? ?if(setn == 14)
?? ??? ??? ?{
?? ??? ??? ??? ?if(foodtime4.fen==0)
?? ??? ??? ??? ?foodtime4.fen=60;
?? ??? ??? ??? ?foodtime4.fen--;
?? ??? ??? ??? ?displayUserSetValue(&foodtime4);
?? ??? ??? ??? ??? ?lcd_write_com(0x80+0x40+10);
?? ??? ??? ??? ??? ?lcd_write_com(0x0F);
?? ??? ??? ?}
?? ??? ?else?? ?if(setn == 15)
?? ??? ??? ?{
?? ??? ??? ??? ?
?? ??? ??? ??? ?if(foodtime5.shi==0)
?? ??? ??? ??? ?foodtime5.shi=24;
?? ??? ??? ??? ?foodtime5.shi--;
?? ??? ??? ??? ?displayUserSetValue(&foodtime5);
?? ??? ??? ??? ?
?? ??? ??? ??? ?lcd_write_com(0x80+0x40+7);
?? ??? ??? ??? ?lcd_write_com(0x0f);
?? ??? ??? ?}
?? ??? ?else?? ?if(setn == 16)
?? ??? ??? ?{
?? ??? ??? ??? ?if(foodtime5.fen==0)
?? ??? ??? ??? ?foodtime5.fen=60;
?? ??? ??? ??? ?foodtime5.fen--;
?? ??? ??? ??? ?displayUserSetValue(&foodtime5);
?? ??? ??? ??? ?
?? ??? ??? ??? ??? ?lcd_write_com(0x80+0x40+10);
?? ??? ??? ??? ??? ?lcd_write_com(0x0F);
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?if(key4 == 0) ? //手動開
?? ?{
?? ??? ?delay_ms(10);
?? ??? ?if(key4 == 0 )
?? ??? ?{
?? ??? ??? ?beep = 0;
?? ??? ??? ?delay_ms(100);
?? ??? ??? ?beep = 1;
?? ??? ??? ?while(key4 == 0);
?? ??? ??? ?if(setn != 0)
?? ??? ??? ?{
?? ??? ??? ??? ?setn = 0;
?? ??? ??? ??? ?lcd_write_com(0x0c);//關閉光標
?? ??? ??? ??? ?lcd_clear();
?? ??? ??? ??? ?lcd_write_str(0, 0, " ?/ ?/ ? ? ? ? ?");
?? ??? ? ? ?lcd_write_str(0, 1, " ?: ?: ? ? ? ? ?");
?? ??? ??? ??? ?eepromWriteByte(); ? ?//退出設置之后,把數據保存一遍
?? ??? ??? ?}
?? ??? ??? ?else
?? ??? ??? ?{
?? ??? ??? ??? ?Ul2003_Open();
?? ??? ??? ??? ?open_flag=1;?? ??? ??? ??? ?
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?if(key5 == 0) ? ? ?//手動關
?? ?{
?? ??? ?delay_ms(10);
?? ??? ?if(key5 == 0 )
?? ??? ?{
?? ??? ??? ?beep = 0;
?? ??? ??? ?delay_ms(100);
?? ??? ??? ?beep = 1;
?? ??? ??? ?while(key5 == 0);
?? ??? ??? ?if(setn != 0)
?? ??? ??? ?{
?? ??? ??? ??? ?setn = 0;
?? ??? ??? ??? ?lcd_write_com(0x0c);//關閉光標
?? ??? ??? ??? ?lcd_clear();
?? ??? ??? ??? ?lcd_write_str(0, 0, " ?/ ?/ ? ? ? ? ?");
?? ??? ? ? ?lcd_write_str(0, 1, " ?: ?: ? ? ? ? ?");
?? ??? ??? ??? ?eepromWriteByte();?? ? ? //退出設置之后,把數據保存一遍
?? ??? ??? ?}
?? ??? ??? ?else
?? ??? ??? ?{
?? ??? ??? ??? ? ?Ul2003_Close();?? ?
?? ??? ??? ??? ??? ?open_flag=0;
?? ??? ??? ?}
?? ??? ?}
?? ?}
}

void main()
{
?? ? ?
?? ?
?? ? ?lcd_init();//1602液晶初始化
?? ? ?eepromInit();
?? ? ?lcd_write_str(0, 0, "00/00/00 ? ? ? ? ");
?? ??? ?lcd_write_str(0, 1, "00:00:00 ClOSE ? ");
?? ??? ?time_init();
?? ? ?while(1)
?? ? ?{
?? ? ? ? keyscan();//按鍵掃描

?? ??? ??? ?if(setn == 0)
?? ??? ??? ?{
?? ??? ??? ??? ? Run_DS1302(); ? //獲取時間
?? ??? ??? ??? ? if(open_flag==0)lcd_write_str(9, 1, "ClOSE");
?? ??? ??? ??? ? else ? ? ? ? ? ?lcd_write_str(9, 1, "OPEN ");
?? ??? ??? ??? ? ?/***************************************************/
?? ??? ??? ??? ? /************* ? ?喂食時間到了 ? ? ? ? ? ************/
?? ??? ??? ??? ? ?/***************************************************/
?? ??? ??? ??? ? if( (foodtime1.shi == hour && foodtime1.fen == min && sec == 0) ||?
?? ??? ??? ??? ??? ? ? (foodtime2.shi == hour && foodtime2.fen == min && sec == 0) ||?
?? ??? ??? ??? ? ? ? (foodtime3.shi == hour && foodtime3.fen == min && sec == 0) ||?
?? ??? ??? ??? ? ? ? (foodtime4.shi == hour && foodtime4.fen == min && sec == 0) ||?
?? ??? ??? ??? ? ? ? (foodtime5.shi == hour && foodtime5.fen == min && sec == 0)?
?? ??? ??? ??? ? )
?? ??? ??? ??? ? {
?? ??? ??? ??? ??? ??? ?if(feeding_time==0)
?? ??? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ??? ?open_flag=1; ? //開啟喂食標志?? ??? ??? ?
?? ??? ??? ??? ??? ??? ??? ?Ul2003_Open();
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ?feeding_time = 1;
?? ??? ??? ??? ? }
?? ??? ??? ? }?? ??? ??? ??
? ? ? ?delay_ms(1);?? ??? ??
? ??? ?}
}

五、實驗現象

演示視頻:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/94155.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/94155.shtml
英文地址,請注明出處:http://en.pswp.cn/web/94155.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

掌握設計模式--命令模式

命令模式&#xff08;Command Pattern&#xff09; 命令模式&#xff08;Command Pattern&#xff09;是一種行為型設計模式&#xff0c;它將請求&#xff08;命令&#xff09;封裝成對象&#xff0c;從而使您能夠參數化客戶端&#xff08;調用者&#xff09;使用不同的請求、…

STM32之beep、多文件、延遲、按鍵以及呼吸燈

一、Beep控制 原理圖分析&#xff1a; 蜂鳴器三極管控制引腳對應 MCU PB8。當前蜂鳴器對應的電路中&#xff0c;三極管是 NPN 三極管&#xff0c;當前【基極】存在小電流&#xff0c;當前三極管導通。要求對應 PB8 引腳對外輸出電壓 / 電流。當前 PB8 輸出高電平&#xff0c;當…

C++的struct里面可以放函數,討論一下C++和C關于struct的使用區別

我們來看一個C代碼下面的struct結構體: struct UserValue {float lx;float ly;float rx;float ry;float L2;// 【構造函數】UserValue() {setZero();}// 【成員函數】void setZero() {lx 0;ly 0;rx 0;ry 0;L2 0;} };在這篇文章中&#xff0c;我們將來詳細解釋一下為什么 U…

【Kubernetes知識點】資源配額與訪問控制

目錄 1.解釋ResourceQuota的作用。 2.解釋Service Account的用途。 3.詳細解釋Role和ClusterRole。 4.什么是K8s的NetworkPolicy&#xff1f; 5.詳細描述在K8s中如何控制跨Namespace的Pod訪問&#xff1f; 1.解釋ResourceQuota的作用。 ResourceQuota&#xff08;資源配額…

在SAP Query中添加雙擊事件

在SAP系統中&#xff0c;SAP Query是一個強大的工具&#xff0c;允許用戶自定義報告以滿足特定的數據查詢需求。它提供了靈活的報表設計功能&#xff0c;使非編程背景的用戶也能創建和修改查詢。在某些情況下&#xff0c;我們可能希望在查詢結果上添加交互性&#xff0c;比如通…

c++:MFC中sqlite3的使用(附實際案例)

MFC中sqlite3的使用sqlite3介紹sqlite3安裝常用API函數操作流程接口函數執行sql語句函數回調函數MFC中案例實踐控制臺實踐sqlite3介紹 SQLite 是一個軟件庫&#xff0c;實現了自給自足的、無服務器的、零配置的、事務性的 SQL 數據庫引擎。SQLite 是在世界上最廣泛部署的 SQL …

LeetCode第1019題 - 鏈表中的下一個更大節點

題目 解答 class Solution {Stack<Integer> stack new Stack<>();List<Integer> values new LinkedList<>();public int[] nextLargerNodes(ListNode head) {nextLargerNodes2(head);return values.stream().mapToInt(x -> x).toArray();}publi…

STM32 硬件I2C讀寫MPU6050

本文代碼基于 STM32 單片機&#xff0c;通過 I2C 總線驅動 MPU6050 六軸傳感器&#xff08;集成加速度計與陀螺儀&#xff09;&#xff0c;實現傳感器初始化、ID 讀取、原始數據采集&#xff0c;并借助 OLED 顯示屏實時展示加速度&#xff08;AccX、AccY、AccZ&#xff09;與角…

倍福下的EC-A10020-P2-24電機調試說明

今天調試EC-A10020-P2-24電機&#xff0c;采用力位混合控制指令進行控制&#xff0c;無前饋力矩&#xff0c;只調節Kp和Kd,跟蹤紅色軌跡&#xff08;正弦信號&#xff1a;幅值10&#xff0c;頻率0.5Hz&#xff09;&#xff0c;結果顯示Kp 180, Kd 40&#xff0c;實際上Kp進一步…

SQL注入1----(sql注入原理)

一.前言前面我們講解了一下信息收集&#xff0c;本章節我們來講解一下sql注入的基本原理&#xff0c;我們拿之前搭建的測試網站pikachu來測試&#xff0c;對應工具包也已經放在了工具里面&#xff0c;大家可以自行去下載。SQL注入攻擊漏洞的原因&#xff0c;是由于程序員在編寫…

C++智能指針詳解:用法與實踐指南

C智能指針詳解&#xff1a;用法與實踐指南 在C編程中&#xff0c;動態內存管理始終是開發者面臨的重要挑戰。手動分配和釋放內存不僅繁瑣&#xff0c;還容易因疏忽導致內存泄漏、懸垂指針等問題。為解決這些痛點&#xff0c;C標準庫引入了智能指針&#xff08;Smart Pointers&a…

fastdds qos:DurabilityQosPolicy

假如DataWriter先起來&#xff0c;并且已經寫了一些數據&#xff0c;之后有新的DataReader起來&#xff0c;那么新起來的DataReader能不能接收到它啟動之前&#xff0c;DataWriter發布的數據呢。DurabilityQosPolicy用來做這種控制。VOLATILE_DURABILITY_QOS&#xff1a;易失的…

【讀代碼】SQLBot:開源自然語言轉SQL智能助手原理與實踐

一、項目簡介 SQLBot 是 DataEase 團隊開源的自然語言轉 SQL 智能助手,致力于讓非技術用戶也能通過自然語言與數據庫對話,自動生成 SQL 查詢,實現自助數據分析、智能BI問答、報表生成等場景。SQLBot 結合了大語言模型(LLM)、數據庫元數據解析、SQL解析與執行等多項技術,…

開題報告被退回?用《基于大數據的慢性腎病數據可視化分析系統》的Hadoop技術,一次通過不是夢

&#x1f496;&#x1f496;作者&#xff1a;計算機編程小咖 &#x1f499;&#x1f499;個人簡介&#xff1a;曾長期從事計算機專業培訓教學&#xff0c;本人也熱愛上課教學&#xff0c;語言擅長Java、微信小程序、Python、Golang、安卓Android等&#xff0c;開發項目包括大數…

HEVC(H.265)與HVC1的關系及區別

HEVC&#xff08;H.265&#xff09;與HVC1的關系及區別可歸納如下&#xff1a;一、技術定義差異?HEVC&#xff08;H.265&#xff09;?國際標準化組織制定的通用視頻編碼標準&#xff0c;由ITU-T和ISO/IEC聯合開發?1支持8K分辨率&#xff0c;壓縮效率較H.264提升約50%?1?HV…

Java獲取被nginx代理的emqx客戶端真實ip

Java獲取被nginx代理的emqx客戶端真實ip 契機 ? 使用nginx作為負載均衡&#xff08;Load Balancing&#xff09;的時候&#xff0c;發現真實ip無法獲取。幾經折騰終于拿到真實ip&#xff0c;又發現被代理的端口又無法使用非代理模式連接&#xff0c;由于之前暴露的docker端口有…

Jenkins自動化部署服務到Kubernetes環境

在現代軟件開發中,持續集成和持續部署(CI/CD)已成為提高開發效率和軟件質量的關鍵實踐。本文將介紹如何使用Jenkins自動化部署服務到Kubernetes環境,并重點介紹Maven與私服的配置。 環境準備 在開始之前,請確保您已準備好以下環境: Jenkins服務器 Kubernetes集群 Docker鏡…

OpenAI重新開源!gpt-oss-20b適配昇騰并上線魔樂社區

2025年8月5日&#xff0c;OpenAI發布了兩款全新的開源權重語言模型&#xff0c;均為混合專家&#xff08;MoE&#xff09;架構&#xff0c;其規模設計可在消費級GPU和云端的多種硬件上高效運行。這些模型采用 Apache 2.0 許可協議&#xff0c;因此可用于蒸餾到其他推理模型中、…

SpringCloud入門(簡潔明了)

目錄 一.創建微服務項目 (一)環境準備 (二)項目結構圖 (三)流程 二. Nacos (一)注冊中心 1.服務注冊 2.服務發現 3.編寫微服務API 4.遠程調用基本實現 5.負載均衡 6.LoadBalanced注解式注解均衡 7.注冊中心宕機&#xff0c;遠程調用還能成功嗎 (二)配置中心 1.基…

集成算法學習筆記

一、集成算法簡介1. 核心思想類比“多個專家綜合判斷優于單個專家”&#xff0c;通過構建并結合多個個體學習器&#xff0c;提升模型的泛化能力&#xff08;降低過擬合風險、提高預測準確性&#xff09;&#xff0c;完成復雜的學習任務。2. 個體學習器與結合模塊個體學習器&…