娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年01月07日(星期二)

正在發生

2018年01月07日 | AT89C51快熱式熱水器程序

發布者:創意狂想 來源: eefocus關鍵字:AT89C51  快熱式熱水器 手機看文章 掃描二維碼
隨時隨地手機看文章

快熱式熱水器程序MCU AT89C51  XAL 12MHz

//#pragma  SRC 
#include  
#include  
#include  
void delay(unsigned int);       //延時函數

void display(void);             //顯示函數 
unsigned char keysCAN(void);    //按鍵掃描處理函數 
void heatCTRl(void);            //加熱控制函數 
void temptest(void);            //測溫函數 
sbit swkey=P1^0;                //開關鍵 
sbit upkey=P1^1;                //加熱檔位“+”鍵 
sbit downkey=P1^2;              //加熱檔位“-”鍵 
sbit buzz=P1^05;                //蜂鳴器輸出端 
sbit triac=P1^6;                //可控硅觸發信號輸出端 
sbit relay=P1^7;                //繼電器控制信號輸出端 
sbit LED1=P2^5;                 //加熱檔位指示燈1 
sbit led2=P2^6;                 //加熱檔位指示燈2 
sbit led3=P2^7;                 //加熱檔位指示燈3 
signed char data ctemp;         //當前測得水溫寄存器 
unsigned char data dispram[2]={0x10,0x10};  //顯示區緩存 
unsigned char data heatpower,px0count;      //加熱檔位寄存器、外中斷0計數器 
bit tempov,t0tst,testok;        //超溫標志、測溫開始標志、測溫完成標志 
/*---------------------------------------------- 
  主函數 void main(void) 
  無參數,無返回值 
  循環調用顯示、鍵掃描、溫度檢測、加熱控制函數 
----------------------------------------------*/ 
void main(void) 
{  
unsigned char i,j; 
ctemp=15;                       //初始化水溫寄存器 
heatpower=5;                    //初始化加熱檔位為5當 
tempov=0;                       //清除超溫標志 
swkey=0;                        //默認開關鍵被按下,進入待機狀態 
TMOD=0x11;                      //設定T0和T1工作方式為16位定時器 
TCON=0x05;                      //設置外中斷0和1為下降沿觸發 
IP=0x01;                        //設置外中斷0優先 
IE=0x80;                        //打開總中斷 
while (1) 
  { 
  i=1; 
  do{ 
    for (j=0;j<100;j++)         //循環100次約0.5s 
      { 
      if (keyscan()) i=6;       //如果有鍵按下,顯示當前檔位3s 
      display();                //調用顯示函數一次約4ms 
      heatctrl();               //調用加熱控制函數 
      }//end for (b=0;b<100;b++) 
    temptest();                 //每0.5s進行一次測溫 
    } while (--i);              //通過改變循環次數i的大小決定是否刷新顯示 
  j=abs(ctemp);                 //取溫度絕對值 
  dispram[1]=j%10;              //取個位數送顯示 
  j/=10;                        //取十位數 
  dispram[0]=j?j:0x11;          //送顯示(帶滅零) 
  }//end while (1) 
}  

/*-------------------------------------- 
  延時函數 void delay(unsigned int dt) 
  參數:dt,無返回值 
  延時時間=dt*500機器周期 
--------------------------------------*/ 
void delay(unsigned int dt) 

register unsigned char bt;      //定義寄存器變量 
for (; dt; dt--) 
  for (bt=250; --bt; );         //此句編譯時以“DJNZ”實現,250*2=500機器周期 


/*-------------------------------------- 
  顯示函數 void display(void) 
  無參數,無返回值 
  兩位共陽數碼管掃描顯示 
--------------------------------------*/ 
void display(void) 

unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,\ 
                            0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0xff}; 
unsigned char i,a; 
a=0xfe;                         //位選賦初值 
for (i=0; i<2; i++)             //循環掃描兩位數碼管 
  { 
  P2|=0x1f;                     //清除位選 
  P0=table[dispram[i]];         //送顯示段碼 
  P2&=a;                        //選通一位 
  delay(4);                     //延時2ms 
  a=_crol_(a,1);                //改變位選字 
  P0=0xff;                      //消影 
  } 


/*---------------------------------------------------------- 
  按鍵掃描處理函數 unsigned char keyscan(void) 
  無參數,返回值:無符號字符型,無鍵按下為0,有鍵按下為其它 
  影響全局變量:heatpower 
----------------------------------------------------------*/ 
unsigned char keyscan(void) 

unsigned char i,ch; 
if (upkey==0)                   //“+”鍵 
  { 
  buzz=0;                       //打開蜂鳴器(發出按鍵音) 
  for (i=0;i<5;i++) display();  //延時消抖 
  buzz=1;                       //關閉蜂鳴器 
  if (heatpower<9) heatpower++; //檔位加一 
  dispram[0]=0; 
  dispram[1]=heatpower;         //顯示當前檔位 
  while (upkey==0) display();   //等待鍵釋放 
  return (1);                   //返回有鍵按下 
  } 
  else if (downkey==0)          //“-”鍵 
  { 
  buzz=0;                       //打開蜂鳴器(發出按鍵音) 
  for (i=0;i<5;i++) display();  //延時消抖 
  buzz=1;                       //關閉蜂鳴器 
  if (heatpower>0) heatpower--; //檔位減一 
  dispram[0]=0; 
  dispram[1]=heatpower;         //顯示當前檔位 
  while (downkey==0) display(); //等待鍵釋放 
  return (2);                   //返回有鍵按下 
  } 
  else if (swkey==0)            //開關鍵 
  { 
  buzz=0;                       //打開蜂鳴器(發出按鍵音) 
  for (i=0;i<30;i++) display(); //延時消抖 
  buzz=1;                       //關閉蜂鳴器 
  swkey=1;                      //置位開關鍵 
  while (swkey==0) display();   //等待鍵釋放 
  ch=IE;                        //暫存中斷控制字IE 
  IE=0x00;                      //禁止中斷 
  P0=0xff; 
  P1=0xff; 
  P2=0xff;                      //清除端口輸出 
  dispram[0]=0x10; 
  dispram[1]=0x10;              //顯示“--” 
  display(); 
  while (1) 
    { 
    while (swkey) display();     //等待開關鍵按下 
    buzz=0;                      //打開蜂鳴器(發出按鍵音) 
    for (i=0;i<10;i++) display();//延時消抖 
    buzz=1;                      //關閉蜂鳴器 
    if (swkey==0) break;         //確認開關鍵被按下 
    } 
  while (swkey==0) display();    //等待鍵釋放 
  IE=ch;                         //還原中斷控制字IE 
  return (0);                    //返回無鍵按下 
  } 
  else return (0);               //無任何鍵按下時由此返回 


/*-------------------------------------- 
  加熱控制函數 void heatctrl(void) 
  無參數,無返回值 
  判斷是否加熱、加熱功率及檔位指示燈處理 
--------------------------------------*/ 
void heatctrl(void) 

if (!tempov)                     //當沒有超溫標志時 
  { 
  relay=0;                       //接通繼電器 
  buzz=1;                        //關閉蜂鳴器 
  switch (heatpower)             //判斷加熱檔位 
    { 
    case 0: {EX1=0;ET1=0;triac=1;led1=1;led2=1;led3=1;break;}//0檔不加熱,指示燈不亮 
    case 1: 
    case 2: 
    case 3: 
    case 4: {led1=0;led2=1;led3=1;EX1=1;break;} //1~4檔1號指示等亮 
    case 5: 
    case 6: 
    case 7: 
    case 8: {led1=0;led2=0;led3=1;EX1=1;break;} //5~8檔1號、2號指示燈亮 
    case 9: {EX1=0;ET1=0;led1=0;led2=0;led3=0;triac=0;break;} //9檔全功率,指示燈全亮 
    } 
  } 
  else                           //當有超溫標志時 
  { 
  relay=1;                       //斷開繼電器 
  EX1=0; ET1=0; triac=1;         //關閉可控硅 
  buzz=0;                        //蜂鳴報警 
  } 


/*-------------------------------------- 
  測溫函數 void temptest(void) 
  無參數,無返回值, 
  影響全局變量:ctemp,tempov 
  測量并查表計算溫度,判斷是否超溫 
--------------------------------------*/ 
void temptest(void) 

signed char temp,tempmin,tempmax; 
unsigned int t0rig; 
unsigned int code temptab[]={0x6262,0x61eb,0x6171,0x60f7,0x6047,0x5ff7,0x5f6e,0x5eef,0x5e53,0x5dbe,0x5d4b,0x5ca5,0x5c17,\ 
                             0x5b6b,0x5ada,0x5a5c,0x599b,0x58ff,0x5869,0x57b0,0x570d,0x5663,0x55c6,0x550e,0x5444,0x5396,\ 
                             0x52dd,0x5240,0x5189,0x50b0,0x5005,0x4f20,0x4e69,0x4db1,0x4cef,0x4c42,0x4b64,0x4aaa,0x49e1,\ 
                             0x48fc,0x4847,0x476c,0x46b1,0x4604,0x4503,0x4449,0x4356,0x4299,0x41c0,0x40ce,0x3ff0,0x3f2b,\ 
                             0x3e33,0x3d86,0x3ca6,0x3bd2,0x3b26,0x3a39,0x3973,0x38a6,0x37ef,0x373f,0x3687,0x35c3,0x3507,\ 
                             0x3487,0x33bc,0x32ed,0x324f,0x319e,0x3106,0x3053,0x2fa6,0x2f2a,0x2e88,0x2e00,0x2d63,0x2cd6,\ 
                             0x2c65,0x2bae,0x2b28,0x2a97,0x2a07,0x298e,0x2914,0x287a,0x280d,0x278a,0x2703,0x2687,0x2626,\ 
                             0x25e5,0x256d,0x24ee,0x2489,0x2414,0x23bc,0x2356,0x22d9,0x2278,0x2203}; //溫度頻率表 
px0count=2;                      //測頻中斷函數參數 
t0tst=1;                         //置測頻程序開始標志 
EX0=1;                           //打開測頻外中斷 
testok=0;                        //清除測頻程序完成標志 
while (!testok) display();       //等待測試完成 
t0rig=(unsigned int)TH0<<8|TL0;  //字節合成字 
tempmin=0;                       //以下是二分查表法計算溫度值 
tempmax=100;                     //tempmin和tempmax為溫度表的范圍 
while (1) 
  { 
  temp=(tempmax+tempmin)/2;        //假定當前溫度為最大值與最小值之中點值 
  if (t0rig==temptab[temp]) break; //若實際值等于假定值結束查找 
    else if (t0rig>temptab[temp]) tempmax=temp;//若實際值大于假定值,減小查找范圍的最大值 
    else tempmin=temp;             //若實際值小于假定值,增大查找范圍的最小值 
  if (tempmax-tempmin<=1)          //若查找范圍已縮小到1度之間, 
    {                              //判斷實際值更接近哪個端點 
    if (temptab[tempmax]+temptab[tempmin]>2*t0rig) temp=tempmax;//接近最大值取最大值 
      else temp=tempmin;           //接近最小值取最小值 
    break;                         //結束查找 
    } 
  } 
ctemp=temp;                        //刷新當前溫度寄存器 
if (temp>65) tempov=1;             //如果溫度超過65度置位超溫標志 
  else if (temp<45) tempov=0;      //當溫度回落到45度以下時清除超溫標志 


/*------------------------------------------ 
  測溫頻率測試函數 void tempFrequency(void) 
  使用外部X0中斷,寄存器組1 
  測出溫度——頻率轉換電路的頻率 
------------------------------------------*/ 
void tempfrequency(void) interrupt 0 using 1 

if (--px0count) return;         //找齊起點或計數 
if (t0tst)                      //如果是起點 
  { 
  t0tst=0;                      //清除測頻開始標志 
  px0count=100;                 //取100個方波為一次測頻 
  TH0=0; 
  TL0=0;                        //清除計時器T0 
  TR0=1;                        //開始計時 
  } 
  else                          //如果是終點 
  { 
  TR0=0;                        //停止計時 
  EX0=0;                        //停止測頻外中斷 
  testok=1;                     //置位測頻完成標志 
  } 


/*-------------------------------------- 
  加熱控制過〇檢測函數 void pass0(void) 
  使用外部X1中斷,寄存器組2 
  檢測過〇點,給定時器T1賦初值 
--------------------------------------*/ 
void pass0(void) interrupt 2 using 2 

unsigned char code powertab[]={0xd8,0xf0,0xe2,0x63,0xe5,0x25,0xe8,0x3e,0xeb,0x16,0xed,0xda,0xf0,0xb2,0xf3,0xcb,0xf7,0x8d,0xf7,0x8d};//10個功率檔位的可控硅導通角延時參數表 
TH1=powertab[2*heatpower]-1; 
TL1=powertab[2*heatpower+1];    //市電過零后,根據當前設置的檔位給定時器T1賦延時參數 
ET1=1;                          //允許定時器T1中斷 
TR1=1;                          //打開定時器T1 


/*------------------------------------------ 
  可控硅觸發信號控制函數 void triaCCtrl(void) 
  使用定時器T1中斷,寄存器組3 
  向可控硅送出觸發信號 
------------------------------------------*/ 
void triacctrl(void) interrupt 3 using 3 

register unsigned char i; 
triac=0;                        //輸出可控硅導通信號 
ET1=0;                          //關閉定時器T1中斷 
TR1=0;                          //終止定時器運行 
for (i=0;i<2;i++);              //延時,保證導通信號有足夠的寬度 
triac=1;                        //完成可控硅導通信號 


關鍵字:AT89C51  快熱式熱水器 引用地址:AT89C51快熱式熱水器程序

上一篇:AT89C52單片機控制BH1415F調頻臺C程序
下一篇:AT89C2051簡易正弦波\三角波\方波發生器

推薦閱讀

Nuance通訊公司宣布為其DragonDrive(聲龍駕駛)汽車平臺推出全新人工智能(AI)功能。如今,DragonDrive(聲龍駕駛)可將對話式人工智能與視線識別等非語言模式緊密集成在一起,讓駕駛員只需看一眼便可以獲得關于車外地方的信息,并與之進行互動;增強了與其他助手(包括智能家居、虛擬私人助手和機器人)的互操作性;以及JustTalk,這一功能能夠在不用按下按鈕或使...
智能手機=smart phone但是它究竟有smart?如果用蘋果Siri在Spotify上播放音樂,或者用語音識別來編輯一段消息,你會發現:“也沒那么聰明嘛。”我們的手機非常擅長做某些事——搜索、拍照、瀏覽社交媒體賬戶,播放音樂,但還有更多事它們無法做到:●當我們去一個新地方旅行時,它推薦不了素食餐廳并為我們訂位●它可沒法篩選約會網站上推送的諸多約會速配...
多功能電力表是一種具有可編程測量、顯示、數字通訊和電能脈沖變送輸出等功能的多功能電力儀表,能夠完成電量測量、電能計算、數據顯示、采集及傳輸,可廣泛應用變電站自動化、配電自動化、智能建筑、企業內部電能測量、管理、考核。多功能電力表功能特點1)分時計量四象限無功電能,正、反向有功無功各費率電能和zui大需量及其發生時間,計量有功無功總電...
1月7日,江浙滬迎來了又一輪寒潮,卻沒有影響前來參加“艾利特2020年度經銷商大會”來賓們的熱情。小巧精致的蘇式園林一隅暖意融融,賓客齊聚一堂回顧過去一年的得失,共話2021年發展目標。“感謝大家遠道而來,2020是特殊而難忘的一年。我們克服了許多困難取得了引以為傲的成績。在這里我代表艾利特全體員工感謝一直以來支持我們的新老合作伙伴。”會議伊...

史海拾趣

問答坊 | AI 解惑

重新上傳-2006屆優秀畢業論文選

有多篇論文可供參考,PDF格式文件,原文件比較大,9M多,我在10月份上傳時論壇限制附件的大小,分卷壓縮了5卷,下載很不方便。 現在網站調整了附件的大小,可以重新上傳一個完整的文件了,需要朋友一次性就能下載了。 11月28日重新上傳。 ------ ...…

查看全部問答∨

交聯電纜工藝性能簡介

一、概念 交聯電纜通常是指電纜的絕緣層采用交聯材料。最常用的材料為交聯聚乙烯(XLPE)。交聯工藝過程是將線性分子結構的聚乙烯(PE)材料通過特定的加工方式,使其形成體型網狀分線結構的交聯聚乙烯。使得長期允許工作混充由700C提高到900C(或 ...…

查看全部問答∨

海加網絡積極推進物聯網產業化,應邀參加上海物聯網中心產學研合作座談會

文章來源:作者:higughard 發布時間:2010-05-18 2010年4月22日,海加網絡作為企業代表應邀參加在上海嘉定新城發展有限公司召開的上海物聯網中心產學研合作座談會。市經信委、市科委、發改委及各科技企業、高校、科研院所參加了此次會議,會議旨 ...…

查看全部問答∨

直流電機的問題,,,求助

用AT89C2051來使四個繼電器來分別控制四個直流電機的同時正反轉,而且還要用到二極管來演示電機的工作情況,具體應該怎辦??…

查看全部問答∨

2410init.s中的疑問和分析

我發現在2410init.s中的“拷貝nand中內容到SDRAM”的這個代碼是有問題的。理由如下:      我們知道nand中存在壞塊的,但是第一個block肯定是好塊,這個可以確認。 如果我我燒錄的bin文件是低于steppingstone 4KB大小,那么 ...…

查看全部問答∨

USB Host端 怎樣讀取多重配置描述符

各位大蝦, 我現在在做usb host端程序,處理的設備有兩種配置,1。U盤,2,hid+audio, 現在默認配置是u盤功能,現在我想要在設備插入時,枚舉過程中,選擇配置2,hid+audio, 該怎樣的命令流程,希望大蝦們能指點一下,謝謝! PS:現在固定的枚舉 ...…

查看全部問答∨

WinCE的對話框畫一張位圖作為背景,在畫背景的那會會導致子控件的位置變成白色的問題??

void CTestPmpButtonDlg::OnPaint() {         CPaintDC dc(this); // device context for painting                 RedrawPmpDialog(dc.m_hDC);         ...…

查看全部問答∨

請教關于VirtualWiFi虛擬網絡編程

不知道有沒有朋友在研究VirutalWiFi的,我有關于緩沖區部分的問題想請教。 // Send Buffer Data Structures, one for each SSID         QUEUE_HEADER                Send ...…

查看全部問答∨

關于DSP小波變換的問題!

有那位高手有Matlab中小波去噪在TI tms320f2808中C的代碼! wden(data,\'heursure\',\'s\',\'one\',2,\'sym8\')…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

隨便看看

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 潮州市| 德江县| 定襄县| 正蓝旗| 华蓥市| 麦盖提县| 辉县市| 开远市| 钟祥市| 桂阳县| 石屏县| 武隆县| 饶平县| 星子县| 阳东县| 荆门市| 绥化市| 东宁县| 清水河县| 孝义市| 平顺县| 深水埗区| 乌鲁木齐县| 清苑县| 门头沟区| 门源| 高雄市| 三门峡市| 松阳县| 定南县| 应城市| 和林格尔县| 赤城县| 噶尔县| 威海市| 涞水县| 武冈市| 方山县| 临澧县| 宜兰县| 蕉岭县|