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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

我要崩潰了,到底哪里出了問題?單片機編譯沒有錯誤沒有警告,但是k1,k2不知道哪個...

[復制鏈接]
跳轉到指定樓層
樓主
#include "reg52.h"
#include "i2c.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit lsa=P2^2;
sbit lsb=P2^3;
sbit lsc=P2^4;

sbit k1=P3^1;
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;
u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(i)
{
          while(i--);
}
unsigned char num=100;
void Keypros()
{
           if(k1==0)
          {
                   delay(1000);
                 if(k1==0)
                 {
                         At24c02Write(1,num);
                 }
                 while(!k1);
          }
          if(k2==0)
          {
                   delay(1000);
                 if(k2==0)
                 {
                         At24c02Read(1);
                 }
                 while(!k2);
          }
          if(k3==0)
          {
                   delay(1000);
                 if(k3==0)
                 {
                    num++;
                        if(num>255)
                         {
                                 num=0;
                         }
                 }
                 while(!k3);
          }
          if(k4==0)
          {
                   delay(1000);
                 if(k4==0)
                 {
                    num=0;
                 }
                 while(!k4);
          }
}
u8 disp[4];
void datapros()
{
          disp[0]=smgduan[num/1000];
         disp[1]=smgduan[num%1000/100];
         disp[2]=smgduan[num%1000%100/10];
         disp[3]=smgduan[num%1000%100%10];
}
void DigDisplay()
{
                 u8 i;
                   for(i=0;i<4;i++)
                   {
                         switch(i)
                         {
                           case(0):lsa=0;lsb=0;lsc=0;break;
                           case(1):lsa=1;lsb=0;lsc=0;break;
                           case(2):lsa=0;lsb=1;lsc=0;break;
                           case(3):lsa=1;lsb=1;lsc=0;break;
                          }
                           P0=disp[3-i];
                           delay(100);
                           P0=0x00;
                   }
}


void main()
{
     while(1)
   {
         Keypros();
         datapros();
         DigDisplay();
   }
}

//這是主函數頁,下面是i2c.c頁//
#include "i2c.h"
#include "reg52.h"

void delay10us()   //誤差 0us
{
    unsigned char a,b;
    for(b=1;b>0;b--)
        for(a=2;a>0;a--);
}

void I2cStart()
{
        SDA=1;
        delay10us();
        SCL=1;
        delay10us();
        SDA=0;
        delay10us();
        SCL=0;
        delay10us();
}
void I2cStop()
{
        SDA=0;
        delay10us();
        SCL=1;
        delay10us();
        SDA=1;
        delay10us();
}
unsigned char I2cSendByte(unsigned char dat)
{
     unsigned char i,j;
         for(i=0;i<8;i++)
         {
         
         SDA=dat>>7;
         dat=dat<<1;
         delay10us();
         SCL=1;
         delay10us();
         SCL=0;
         delay10us();
         }
         SDA=1;
         delay10us();
         SCL=1;
         while(SDA)
         {
                j++;
                if(j>200)
                 {
                         SCL=0;
                        delay10us();
                        return 0;
                 }
         }
          SCL=0;
          delay10us();
          return 1;
}
unsigned char I2cReadByte()
{
          unsigned char i,dat=0;
           SDA=1;                        //起始和發送一個字節之后SCL都是0
           delay10us();
          for(i=0;i<8;i++)
          {
             SCL=1;
                 delay10us();
                   dat=dat<<1;
                 dat|=SDA;
                 delay10us();
                 SCL=0;
                 delay10us();
          }
          return dat;
}
void At24c02Write(unsigned char addr,unsigned char dat)
{
          I2cStart();
          I2cSendByte(0xa0);
          I2cSendByte(addr);
          I2cSendByte(dat);
          I2cStop();
}
unsigned char At24c02Read(unsigned char addr)
{
          unsigned char num;
          I2cStart();
          I2cSendByte(0xa0);
          I2cSendByte(addr);
          I2cStart();
          I2cSendByte(0xa1);
          num=I2cReadByte();
          I2cStop();
          return num;
}

//下面的頭文件頁//
#ifndef _I2C_H
#define _I2C_H

#include <reg52.h>

sbit SCL=P2^1;
sbit SDA=P2^0;

void I2cStart();
void I2cStop();
unsigned char I2cSendByte(unsigned char dat);
unsigned char I2cReadByte();
void At24c02Write(unsigned char addr,unsigned char dat);
unsigned char At24c02Read(unsigned char addr);



#endif



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

使用道具 舉報

沙發
ID:425921 發表于 2018-11-30 21:42 | 只看該作者
實現現象:下載程序后數碼管后4位顯示0,按K1保存顯示的數據,按K2讀取上次保存的數據,按K3顯示數據加一,按K4顯示數據清零。  問題就在于  不知道K1有問題還是K2有問題, 不知道是沒寫進去,還是讀不出來???
回復

使用道具 舉報

板凳
ID:434807 發表于 2018-12-2 14:06 | 只看該作者
測試程序的時候可以屏蔽掉不用的地方,單獨看你想要測試的地方,這樣你就可以知道程序有沒有執行了
回復

使用道具 舉報

地板
ID:425921 發表于 2018-12-3 01:05 來自手機 | 只看該作者
謝小康4 發表于 2018-12-2 14:06
測試程序的時候可以屏蔽掉不用的地方,單獨看你想要測試的地方,這樣你就可以知道程序有沒有執行了

怎么屏蔽掉?
回復

使用道具 舉報

5#
ID:434807 發表于 2018-12-3 08:32 | 只看該作者

把次要的部分屏蔽掉就可以了,比如在看K1作用時,可以把K2屏蔽掉,反之亦然。

回復

使用道具 舉報

6#
ID:438094 發表于 2018-12-3 08:40 | 只看該作者
死循環
回復

使用道具 舉報

7#
ID:438094 發表于 2018-12-3 08:43 | 只看該作者
死循環啊  while
回復

使用道具 舉報

8#
ID:308437 發表于 2018-12-3 09:50 | 只看該作者
屏蔽的意思是,你一點點確定你程序是沒問題的。首先,你先保證,你的那個顯示沒問題,然后是按鍵(個人感覺你的按鍵函數也是有問題的),程序里面盡量不要用while()循環,初學 寫的程序容易死掉。
回復

使用道具 舉報

9#
ID:425921 發表于 2018-12-5 23:49 來自手機 | 只看該作者
謝小康4 發表于 2018-12-3 08:32
把次要的部分屏蔽掉就可以了,比如在看K1作用時,可以把K2屏蔽掉,反之亦然。

哦哦!謝謝!謝謝!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线中文字幕视频 | 亚洲人成人一区二区在线观看 | 久久伊人精品 | 365夜爽爽欧美性午夜免费视频 | 亚洲精品字幕 | 精品国产乱码久久久久久影片 | 欧美久久久久久久 | 亚洲欧洲精品成人久久奇米网 | 久久性av | 午夜在线影院 | 国产精品成人一区二区三区 | 精品国产一区二区三区观看不卡 | 中文字幕精品一区二区三区精品 | 91看片在线观看 | 亚洲成人三区 | 亚洲一区中文字幕 | 超碰av免费 | 在线视频一区二区 | 米奇成人网 | 欧美多人在线 | 日韩中文在线观看 | 国产激情片在线观看 | 天天干狠狠 | 午夜私人影院在线观看 | 欧美在线免费 | 一区二区在线不卡 | 久久久久久久久99 | 嫩草视频网站 | 国产精品毛片无码 | 欧美人人| 欧美视频免费 | 狠狠艹 | 国产精品美女久久久久久免费 | 欧美精品久久久久久久久久 | 欧美精品久久久 | 99视频在线免费观看 | 久久高清精品 | 日韩在线不卡 | 国产最新精品视频 | 狠狠草视频| 天天看天天爽 |