找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2254|回復(fù): 18
打印 上一主題 下一主題
收起左側(cè)

C語(yǔ)音怎么實(shí)現(xiàn)這個(gè)功能 掉電換段2路輸出

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主

unsigned char EEPROMread(unsigned char EEAddr)
{  //讀EEPROM
unsigned char EEPROMdata;
EEADR = EEAddr;                 // 要讀的EEPROM的地址,地址要在0-FF間
RD = 1;                               //開啟讀功能
EEPROMdata = EEDAT;       //EEPROM 的讀數(shù)據(jù) ReEEPROMread = EEDATA;
return EEPROMdata;        //返回EEPROM數(shù)據(jù)
}

void EEPROMwrite(unsigned char ddr,unsigned char Data)
{ //寫EEPROM
GIE = 0;                       //寫數(shù)據(jù)必須關(guān)閉中斷
while(GIE);                  //等待 GIE 為 0
EEADR = ddr;          //EEPROM 的地址,地址要在0-FF間
EEDAT = Data;             //EEPROM 的寫數(shù)據(jù) EEDATA = Data;
EEIF = 0;
EECON1 |= 0x34;        //置位 WREN1,WREN2,WREN3 三個(gè)變量.
WR = 1;                      //置位 WR 啟動(dòng)編程
while(WR);                 //等待 EE 寫入完成
GIE = 1;
}
void DelayUs( unsigned char Time)   
//US 短延時(shí)函數(shù)
{   unsigned char a;
        for(a=0;a<Time;a++)
        {
                NOP();
        }
}  

void DelayMs(unsigned char Time)
{  //MS 延時(shí)函數(shù)
        unsigned char a;
    unsigned char b;
        for(a=0;a<Time;a++)
        {  for(b=0;b<250;b++)
                    {NOP();
              NOP();
              NOP();
              NOP();
            }
        }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:883242 發(fā)表于 2024-4-9 00:38 | 只看該作者
硬件上缺乏掉電檢測(cè)電路。
回復(fù)

使用道具 舉報(bào)

板凳
ID:161164 發(fā)表于 2024-4-9 09:39 | 只看該作者
上電讀取EEProm里的模式值
根據(jù)模式值控制L1,L2
然后EEProm寫入mode = ++mode % 3;
計(jì)時(shí)5秒
5秒后 EEProm寫入mode = 0;
回復(fù)

使用道具 舉報(bào)

地板
ID:483092 發(fā)表于 2024-12-5 16:30 | 只看該作者
lkc8210 發(fā)表于 2024-4-9 09:39
上電讀取EEProm里的模式值
根據(jù)模式值控制L1,L2
然后EEProm寫入mode = ++mode % 3;

有完整的嗎?用STC8G1K08A芯片怎么實(shí)現(xiàn)?
回復(fù)

使用道具 舉報(bào)

5#
ID:161164 發(fā)表于 2024-12-5 17:23 | 只看該作者
電子鎖1 發(fā)表于 2024-12-5 16:30
有完整的嗎?用STC8G1K08A芯片怎么實(shí)現(xiàn)?
  1. #include <STC8G.H>

  2. #include "intrins.h"


  3. #define EEPRom_Addr 0x0000
  4. void IapIdle()
  5. {
  6.     IAP_CONTR = 0;                              //關(guān)閉IAP功能
  7.     IAP_CMD = 0;                                //清除命令寄存器
  8.     IAP_TRIG = 0;                               //清除觸發(fā)寄存器
  9.     IAP_ADDRH = 0x80;                           //將地址設(shè)置到非IAP區(qū)域
  10.     IAP_ADDRL = 0;
  11. }

  12. char IapRead(int addr)
  13. {
  14.     char dat;

  15.     IAP_CONTR = 0x80;                           //使能IAP
  16.     IAP_TPS = 12;                               //設(shè)置等待參數(shù)12MHz
  17.     IAP_CMD = 1;                                //設(shè)置IAP讀命令
  18.     IAP_ADDRL = addr;                           //設(shè)置IAP低地址
  19.     IAP_ADDRH = addr >> 8;                      //設(shè)置IAP高地址
  20.     IAP_TRIG = 0x5a;                            //寫觸發(fā)命令(0x5a)
  21.     IAP_TRIG = 0xa5;                            //寫觸發(fā)命令(0xa5)
  22.     _nop_();
  23.     dat = IAP_DATA;                             //讀IAP數(shù)據(jù)
  24.     IapIdle();                                  //關(guān)閉IAP功能

  25.     return dat;
  26. }

  27. void IapProgram(int addr, char dat)
  28. {
  29.     IAP_CONTR = 0x80;                           //使能IAP
  30.     IAP_TPS = 12;                               //設(shè)置等待參數(shù)12MHz
  31.     IAP_CMD = 2;                                //設(shè)置IAP寫命令
  32.     IAP_ADDRL = addr;                           //設(shè)置IAP低地址
  33.     IAP_ADDRH = addr >> 8;                      //設(shè)置IAP高地址
  34.     IAP_DATA = dat;                             //寫IAP數(shù)據(jù)
  35.     IAP_TRIG = 0x5a;                            //寫觸發(fā)命令(0x5a)
  36.     IAP_TRIG = 0xa5;                            //寫觸發(fā)命令(0xa5)
  37.     _nop_();
  38.     IapIdle();                                  //關(guān)閉IAP功能
  39. }

  40. void IapErase(int addr)
  41. {
  42.     IAP_CONTR = 0x80;                           //使能IAP
  43.     IAP_TPS = 12;                               //設(shè)置等待參數(shù)12MHz
  44.     IAP_CMD = 3;                                //設(shè)置IAP擦除命令
  45.     IAP_ADDRL = addr;                           //設(shè)置IAP低地址
  46.     IAP_ADDRH = addr >> 8;                      //設(shè)置IAP高地址
  47.     IAP_TRIG = 0x5a;                            //寫觸發(fā)命令(0x5a)
  48.     IAP_TRIG = 0xa5;                            //寫觸發(fā)命令(0xa5)
  49.     _nop_();                                    //
  50.     IapIdle();                                  //關(guān)閉IAP功能
  51. }

  52. sbit LED1 = P5^4;
  53. sbit LED2 = P5^5;
  54. #define ON 0
  55. #define OFF 1
  56. void Delay100ms(void)        //@12.000MHz
  57. {
  58.         unsigned char data i, j, k;

  59.         _nop_();
  60.         i = 7;
  61.         j = 23;
  62.         k = 105;
  63.         do
  64.         {
  65.                 do
  66.                 {
  67.                         while (--k);
  68.                 } while (--j);
  69.         } while (--i);
  70. }

  71. void main()
  72. {
  73.         char Mode = 0;
  74.         char Delay = 50;
  75.     P3M0 = 0x00;
  76.     P3M1 = 0x00;
  77.     P5M0 = 0x00;
  78.     P5M1 = 0x00;

  79.     Mode = IapRead(EEPRom_Addr);
  80.         switch(Mode)
  81.         {
  82.                 case 0xFF:IapProgram(EEPRom_Addr, 0xFE);LED1=ON;LED2=OFF;break;
  83.                 case 0xFE:IapProgram(EEPRom_Addr, 0xFC);LED1=OFF;LED2=ON;break;
  84.                 case 0xFC:IapErase(EEPRom_Addr);LED1=ON;LED2=ON;break;
  85.         }   
  86.     while (1){
  87.                 if(Delay)
  88.                 {
  89.                         Delay100ms();
  90.                         if(--Delay==0)
  91.                         {
  92.                                 if(Mode!=0xFC)IapErase(EEPRom_Addr);
  93.                         }
  94.                 }
  95.         }
  96. }

復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

6#
ID:1109793 發(fā)表于 2024-12-5 18:19 | 只看該作者
意思是5秒內(nèi)斷電再上電就下一段,超過5秒斷電就第一段唄,板凳說的很對(duì),不需要掉電檢測(cè)
回復(fù)

使用道具 舉報(bào)

7#
ID:293079 發(fā)表于 2024-12-14 14:49 | 只看該作者

你好,我也按這個(gè)程序搭了電路,上電燈都沒有亮,是什么回事呢?謝謝。
回復(fù)

使用道具 舉報(bào)

8#
ID:293079 發(fā)表于 2024-12-14 16:10 | 只看該作者
youyouku 發(fā)表于 2024-12-14 14:49
你好,我也按這個(gè)程序搭了電路,上電燈都沒有亮,是什么回事呢?謝謝。

不好意思,是我搭錯(cuò)電路了,IO口沒有搭正確,那假如改為亮5S后,下次上電還是斷電前的狀態(tài)呢?
回復(fù)

使用道具 舉報(bào)

9#
ID:483092 發(fā)表于 2024-12-29 15:11 | 只看該作者
youyouku 發(fā)表于 2024-12-14 16:10
不好意思,是我搭錯(cuò)電路了,IO口沒有搭正確,那假如改為亮5S后,下次上電還是斷電前的狀態(tài)呢?

你好,請(qǐng)問你的可以了嗎?
回復(fù)

使用道具 舉報(bào)

10#
ID:161164 發(fā)表于 2024-12-29 23:48 | 只看該作者
youyouku 發(fā)表于 2024-12-14 16:10
不好意思,是我搭錯(cuò)電路了,IO口沒有搭正確,那假如改為亮5S后,下次上電還是斷電前的狀態(tài)呢?
  1. while (1)
  2. {
  3.         if(Delay)
  4.         {
  5.                 Delay100ms();
  6.                 if(--Delay==0)
  7.                 {
  8.                         IapErase(EEPRom_Addr);
  9.                         IapProgram(EEPRom_Addr, Mode);
  10.                 }
  11.         }
  12. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

11#
ID:343102 發(fā)表于 2024-12-30 09:50 | 只看該作者
學(xué)習(xí)了。這個(gè)也可用于冰箱短期停電保護(hù)。
回復(fù)

使用道具 舉報(bào)

12#
ID:343102 發(fā)表于 2024-12-30 13:29 | 只看該作者
lkc8210 發(fā)表于 2024-4-9 09:39
上電讀取EEProm里的模式值
根據(jù)模式值控制L1,L2
然后EEProm寫入mode = ++mode % 3;

謝謝分享。
回復(fù)

使用道具 舉報(bào)

13#
ID:483092 發(fā)表于 2025-1-4 10:16 | 只看該作者
Hephaestus 發(fā)表于 2024-4-9 00:38
硬件上缺乏掉電檢測(cè)電路。

這不需要掉電檢測(cè)電路,主控自帶。
回復(fù)

使用道具 舉報(bào)

14#
ID:483092 發(fā)表于 2025-1-4 10:29 | 只看該作者

非常感謝你。一直都沒空處理。今天板子到了,開始焊接。謝謝。
回復(fù)

使用道具 舉報(bào)

15#
ID:483092 發(fā)表于 2025-1-4 10:38 | 只看該作者

你好,這里面沒有燒入代碼的接口設(shè)置,我是用到P3.0和P3.1。
回復(fù)

使用道具 舉報(bào)

16#
ID:161164 發(fā)表于 2025-1-4 23:57 | 只看該作者
電子鎖1 發(fā)表于 2025-1-4 10:38
你好,這里面沒有燒入代碼的接口設(shè)置,我是用到P3.0和P3.1。

燒錄不用設(shè)置,但要冷啟動(dòng)
回復(fù)

使用道具 舉報(bào)

17#
ID:483092 發(fā)表于 2025-1-6 08:44 | 只看該作者
lkc8210 發(fā)表于 2025-1-4 23:57
燒錄不用設(shè)置,但要冷啟動(dòng)

你好,我是按照你寫的代碼,編譯也成功了,用STC-ISP燒錄的時(shí)候出現(xiàn)一直在檢測(cè)芯片。線也接對(duì)了,我用的是CH340G燒錄工具。
回復(fù)

使用道具 舉報(bào)

18#
ID:483092 發(fā)表于 2025-1-7 10:16 | 只看該作者
lkc8210 發(fā)表于 2025-1-4 23:57
燒錄不用設(shè)置,但要冷啟動(dòng)

你好,可以燒錄了,要在GND接個(gè)開關(guān),如你說的冷啟動(dòng),測(cè)試燈能亮,只是不能同時(shí)亮。只能單個(gè)燈亮。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表