久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1382|回復: 0
打印 上一主題 下一主題
收起左側

求助!單片機24C02存儲按鍵數值,怎么不成功呢?

[復制鏈接]
回帖獎勵 1 黑幣 回復本帖可獲得 1 黑幣獎勵! 每人限 1 次
跳轉到指定樓層
樓主
ID:409166 發表于 2021-1-7 10:14 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位老大,我想做一個按鍵計數存儲在2402里面再通過串口發生,也可以通過1602顯示,搞了好多天,實在搞不了,請求大神們看看我的程序好嗎?
目前已完成的功能有:
1、按鍵計數可以通過1602顯示出來。
2、按鍵計數也可以通過串口發送。
請問怎么就是不能存儲到24C02里面呢?2402存儲的程序我是參照宋雪松老師的課程改寫的,是不是哪里不對呀?
有條件的朋友可以幫忙調試下,硬件接口如下:
#define LCD1602_DB  P0
sbit LCD1602_RS = P2^7;
sbit LCD1602_RW = P2^6;
sbit LCD1602_E  = P2^5;
sbit key1=P3^2;
sbit LED=P3^3;


sbit I2C_SCL = P3^7;
sbit I2C_SDA = P3^6;


再次多謝大家了!

*****************************************/
#include <reg52.h>
#include "uart.h"
#include "lcd1602.h"
#include "I2C.h"
#include <intrins.h>

#define I2CDelay()  {_nop_();_nop_();_nop_();_nop_();}
unsigned char date;
#define uchar unsigned char
#define uint unsigned int

sbit key1=P3^2;
sbit LED=P3^3;
unsigned char count;
unsigned char dat;
   unsigned int i;
         unsigned char buf[5];
    unsigned char str[10];

unsigned char uart_buf;        //接收數據寄存器
unsigned char distate[12];//計數緩沖區數組         .




/* 函數申明 -----------------------------------------------*/
void delay(uint z);
//void Initial_com(void);

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

/*
********************************************************************************
** 函數名稱 : delay(uint z)
** 函數功能 : 延時函數
********************************************************************************
*/
void delay(uint z)
{                                                                                                                                                                                          
    uint i,j;
    for(i=z;i>0;i--)
        for(j=110;j>0;j--);
}


/***************************************************
*                                                                外部中斷0初始化子函數
*                                        下降沿觸發,開啟INT0中斷,開總中斷
****************************************************/
void int0_init(void)
{
        IT0 = 1;                //下降沿觸發
        EX0 = 1;                //開啟INT0中斷
        EA = 1;                        //開啟總中斷
}

/* 將按鍵計數賦值給數組,便于液晶顯示---------------- */
void display()
{
          buf[1] = count/1000+0x30;
        buf[2] = count%1000/100+0x30;  //0x30就是把十進制換成十六進制
        buf[3] = count%1000%100/10+0x30;
        buf[4] = count%1000%100%10+'0';        // '0'=0x30
}

/* 讀取EEPROM中的一個字節,addr-字節地址 */
unsigned char E2ReadByte(unsigned char addr)
{
    unsigned char dat;

    I2CStart();
    I2CWrite(0x50<<1); //尋址器件,后續為寫操作
    I2CWrite(addr);    //寫入存儲地址
    I2CStart();        //發送重復啟動信號
    I2CWrite((0x50<<1)|0x01); //尋址器件,后續為讀操作
    dat = I2CReadNAK();       //讀取一個字節數據
    I2CStop();


    return dat;
}
/* 向EEPROM中寫入一個字節,addr-字節地址 */
void E2WriteByte(unsigned char addr, unsigned char dat)
{
    I2CStart();
    I2CWrite(0x50<<1); //尋址器件,后續為寫操作
    I2CWrite(addr);    //寫入存儲地址
    I2CWrite(dat);     //寫入一個字節數據
    I2CStop();

}

/* E2讀取函數,buf-數據接收指針,addr-E2中的起始地址,len-讀取長度 */
void E2Read(unsigned char *buf, unsigned char addr, unsigned char len)
{
    do {                       //用尋址操作查詢當前是否可進行讀寫操作
        I2CStart();
        if (I2CWrite(0x50<<1)) //應答則跳出循環,非應答則進行下一次查詢
        {
            break;
        }
        I2CStop();
    } while(1);
    I2CWrite(addr);            //寫入起始地址
    I2CStart();                //發送重復啟動信號
    I2CWrite((0x50<<1)|0x01);  //尋址器件,后續為讀操作
    while (len > 1)            //連續讀取len-1個字節
    {
        *buf++ = I2CReadACK(); //最后字節之前為讀取操作+應答
        len--;
    }
    *buf = I2CReadNAK();       //最后一個字節為讀取操作+非應答
    I2CStop();
}
/* E2寫入函數,buf-源數據指針,addr-E2中的起始地址,len-寫入長度 */
void E2Write(unsigned char *buf, unsigned char addr, unsigned char len)
{
    while (len--)
    {
        do {                       //用尋址操作查詢當前是否可進行讀寫操作
            I2CStart();
            if (I2CWrite(0x50<<1)) //應答則跳出循環,非應答則進行下一次查詢
            {
                break;
            }
            I2CStop();
        } while(1);
        I2CWrite(addr++);  //寫入起始地址
        I2CWrite(*buf++);  //寫入一個字節數據
        I2CStop();         //結束寫操作,以等待寫入完成
    }
}



//*************************
//**********主函數*********
//*************************
main()
{         
           
         UART_INIT(); // 串口初始化
         int0_init() ; // 外部中斷初始化
         InitLcd1602();
        
         while(1)
         {         
                  E2Read(buf, 0x22, sizeof(buf));   //從E2中讀取一段數據
            display();                                                  // 將按鍵計數賦值給數組,便于液晶顯示
        LcdShowStr(0, 0, "ji shu :");     //顯示在液晶上
            LcdShowStr(1,1,&buf[1]);                   //buf數量里面對應count,是外部中斷得到的按計數
                E2Write(buf, 0x22, sizeof(buf));  //再寫回到E2中

        // while(1);
         }
}

   /***************************************************
*                                                                中斷響應子函數
*                                        響應外部中斷0,按鍵低電平一次就加一,中斷標志位自動清零
****************************************************/
void int0_process() interrupt 0
{


                            dat+=1;          //進入一次中斷 就加一次
                           count = dat;
                                while(key1 == 0);
                                delay(200);
                                IE0 = 0;     //        外部中斷標志位

                        //        uart_send_byte(count)        ;        // 發送按鍵次數到串口
                        //        delay(200);
}        


/***************************************************
*                                                                中斷服務子函數
*                                   清除RI,同時判斷接到的數據
****************************************************/
void uart(void) interrupt 4
{
//        unsigned char uart_buf;        //接收數據寄存器
        if(RI)                                                            //是否收到數據
         {
                RI=0;                                                           //清中斷請求
                uart_buf = SBUF;
                if(uart_buf == 0xaa)        //判斷
           {
            uart_send_byte(count)        ;        // 發送按鍵次數到串口
                delay(200);
           }
                if(uart_buf == 0x11)        //判斷
                 {
                  //uart_send_byte(count)        ;        // 發送按鍵次數到串口  
                  LED =0;                                                 //         (在這里和串口中斷都可以發送數據的,區別:是否連續)
                  delay(200);
                 }
           if(uart_buf == 0x22)        //判斷
            {
                 //uart_send_byte(count)        ;        // 發送按鍵次數到串口
                 LED =1;
                 delay(200);
                 }
        
           
         }
}
               



24C02存儲求助.rar

131.22 KB, 下載次數: 2

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费中文字幕 | 国产精品免费一区二区三区四区 | 久久久久久久久淑女av国产精品 | 五月综合激情在线 | www.久久.com| www成人免费 | 91在线免费视频 | 亚洲九九 | 免费一级片 | 天堂一区在线观看 | 超碰成人免费 | 日韩无 | 日韩一区欧美一区 | 99国产精品久久久久老师 | 中文字幕精品一区 | h片免费在线观看 | 国产一级视频在线播放 | 国产高清在线精品一区二区三区 | 久久九九色 | 精品国产31久久久久久 | 视频一区在线观看 | 国产精品亚洲成在人线 | 91在线视频免费观看 | 欧美激情在线精品一区二区三区 | 综合色在线 | 久草视频观看 | 日本成人二区 | 欧美精品在线一区二区三区 | 三区四区在线观看 | 国产 日韩 欧美 在线 | 成人欧美一区二区三区1314 | 精品视频999 | 精品久久久精品 | 日韩不卡一区二区 | 一区二区精品 | a级黄色片视频 | 国产精品激情 | 久久久精品 | 国产日韩欧美激情 | 91精品国产综合久久久久久丝袜 | 久久99国产精品 |