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

標題: SN7326按鍵51單片機的檢測 [打印本頁]

作者: 51黑z    時間: 2016-9-2 23:38
標題: SN7326按鍵51單片機的檢測
測試流程:

1把7326_test_1.c 生成的hex 燒進單片機

2打開串口
這里會收到循環發送的00 00 00 00

3按單片機測試按鍵key1 看配置寄存器是不是10 不是要重新往配置寄存器寫入0x10

4長按7326按鍵 串口接收窗口會收到鍵值

24c02.c
#define device_add_w 0xb0
#define device_add_r 0xb1
#include "24c02.H"
void delay()
{
;;
}
void i2c_init()
{
SDa = 1;
delay();
scl = 1;
delay();
}

void delayms(uint xms)
{
uchar x, y;
for(x = xms; x > 0; x--)
   for(y = 110; y > 0; y--);
}

void start() //啟動i2c
{
sda = 1;
scl = 1;
delay(); //延時必須大于4.7us,此約為五微秒
sda = 0; //在scl為高電平時,sda一個下降沿為啟動信號
delay();
}

void stop() //停止i2c
{
sda = 0;
scl = 1;
delay();
sda = 1; //在scl為高電平時,sdasda一個上升沿為停止信號
delay();
}

void ack() //應答信號0
{
uchar i = 0; //等待變量
scl = 1; //在scl為高電平期間等待應答
delay();
while((sda == 1) && i < 250) //若為應答0即退出,從機向主機發送應答信號
i++; //等待一段時間
scl = 0; //應答之后將scl拉低
delay();
}
void nack() //非應答
{
scl = 1; //在scl為高電平期間,由主機向從機發送一個1,非應答信號
delay();
sda = 1;
scl = 0; //應答之后將scl拉低
delay();
}

void send_byte(uchar date) //寫一個字節8位
{
uchar i, temp;
temp = date; //存入要寫入的數據,即要發送到sda上的數據
for(i = 0; i < 8; i++)
{ //發送8位
  temp <<= 1; //to CY 將數據的最高位移入到PSW中的CY位中
  scl = 0; //只有在scl為低電平時,才允許sda上的數據變化
  delay();
  sda = CY; //將CY里的數據發送到sda數據線上
  delay(); //可以延時
  scl = 1;    //在scl為高電平時,不允許sda上的數據變化,使數據穩定
  delay();
  scl = 0; //允許sda數據線的數據變化,等待下一個數據的傳輸
  delay();
}
  //wait ack:發送完一個字節數據后要主機要等待從機的應答,第九位
scl = 0; //允許sda變化
delay();
sda = 1; //wait:ack,sda拉高等待應答,當sda=0時,表示從機的應答
delay();
}

uchar read_byte() //讀一個字節數據
{
char i, j, k;
scl = 0; //讀之前先允許sda變化
delay(); //等待數據
for(i = 0; i < 8; i++)
{
  scl = 1;    //不允許sda變化
  delay(); //使sda數據穩定后開始讀數據
  j = sda; //讀出sda上的數據
  k = (k << 1)| j; //將數據通過|運算存入k中
  scl = 0; //允許sda變化等待下一位數據的到來
  delay();
}
  //delay(); //可不用延時
return k; //返回讀出的數據
}
//write:at24c02  在at24c02中的指定地址寫入數據
void write_at24c02(uchar address, uchar date)
{
start(); //啟動i2c
send_byte(device_add_w); //寫入期間地址和寫操作
ack(); //從機應答0
send_byte(address); //寫入寫數據的單元地址
ack(); //ack0
send_byte(date); //在指定地址中寫入數據
ack(); //從機應答0
stop();     //停止i2c
}
//read: at24c02   在at24c02的指定地址中讀出寫入的數據
uchar read_at24c02(address)
{
uchar dat; //用來存儲讀出的數據
start(); //啟動i2c
send_byte(device_add_w); //寫入at24c02器件地址和寫操作
ack(); //從機應答0
send_byte(address); //寫入要讀取AT24C02的數據的單元地址
ack(); //從機應答0
start();   //再次啟動i2c
send_byte(device_add_r); //寫入AT24C02器件地址和讀操作
ack(); //從機應答‘0’
dat = read_byte(); //讀出指定地址中的數據
nack(); //主機發出非應答‘1’
stop();   //停止i2c
return dat;   //返回讀出的數據
}

24c02.h
#include
typedef unsigned char uchar;
typedef unsigned int uint;
sbit sda= P1^0;
sbit scl = P1^1;
void delay(void);
void i2c_init(void);  //I2C初始化
void delayms(uint xms);
void start(void);    //啟動I2C
void stop(void);     //停止I2C
void ack(void);      //應答
void nack(void);     //不應答
void send_byte(uchar d);  //寫一個字節
uchar read_byte(void);    //讀一個字節,返回數據
void write_at24c02(uchar addr,uchar dd);//寫入指定地址的一個字節 (要寫入的寄存器地址,寫入十六進制數據)
uchar read_at24c02(uchar addr);     //讀出指定地址的一個字節 (要讀取的寄存器地址)


創建整理:ly
時間:2016.8.24
功能:用51單片機對7326智能掃描按鍵的測試
文檔組成:24c02.h 24c02.c構成了I2C驅動
  7326_test_1.c 為串口測試程序

7326_test_1.c
#include
#include "24C02.H"
unsigned char uart_data;
//測試的兩個按鍵
sbit key1=P3^4;
sbit key2=P3^5;

//發送函數
void SendASC(uchar ASC)  
{
TI=0;
SBUF=ASC;
while(!TI);
}  
//串口0 中斷函數 這個中斷函數可以不用響應 這個是再向單片機發送數據
void serial_IT() interrupt 4
{
if (RI == 1)//如果是接收中斷
{
RI = 0; //清除接收中斷標志
uart_data = SBUF;  //接收數據
SendASC(uart_data);//將接收的數據發送
}
}  
//主程序
void main()
{
//串口設置
unsigned n,nn,nnn;
SCON = 0x50; //8位串行口模式1,允許接收,REN=1
TMOD = TMOD | 0x20; //TMOD = 0x20; //定時器1,工作在模式2
TH1 = 0xe6;//波特率為1200bps,晶振頻率為12MHz
TL1 = 0xe6;//波特率為1200bps,晶振頻率為11.059MHz,則加載e8
ES=1;   //打開串行口中斷
TR1 = 1;   //啟動定時器
EA=1;   //打開總中斷
i2c_init(); // I2C的初始化
start(); //   I2C開始
while(1){
if(key1==0)
{ delay();//消抖
if(key1==0)
  {
  write_at24c02(0x08,0x10);  //用于向配置寄存器寫值 這個可以參考7326技術文檔
delayms(10);//需等待十毫秒
n=read_at24c02(0x08);   //讀取7326設備配置寄存器的值
   nn= n;
SendASC(nn);
  }
}
//這個是結合自己的51 寫的。
//write_at24c02(0,2);
//delayms(10);
write_at24c02(0x08,0x10);
n=read_at24c02(0x10); //讀緩存器的地址 由7326的文檔結合電路原理圖片可知  
   nnn= n;
SendASC(nnn);

}   
}





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 成年人网站免费 | 天堂素人约啪 | 欧美三级电影在线播放 | 激情av在线 | 久久久影院 | 91在线电影| 成人福利网 | 久久精品一级 | 久久专区 | 免费 视频 1级 | 亚洲欧美日韩精品久久亚洲区 | 欧美专区日韩 | 亚洲精品乱码8久久久久久日本 | 91久久久www播放日本观看 | 国产精品99精品久久免费 | 日韩精品一区二区三区视频播放 | 亚洲毛片 | 亚洲成年人免费网站 | 日日碰狠狠躁久久躁96avv | 色婷婷一区二区三区四区 | 奇米影视77 | 日韩亚洲欧美一区 | 一区二区不卡 | 91视频免费 | 欧美最猛黑人 | 2021狠狠天天天 | 欧美久久久久久 | 亚洲欧洲一区 | 日韩精品1区2区 | 性色视频在线观看 | 亚欧午夜 | 久久高清国产 | 欧美精品一区二区三区在线 | 国产精品免费视频一区 | 亚洲综合国产 | 男人的天堂久久 | 中文在线一区二区 | 天天躁日日躁狠狠躁白人 | 免费久久99精品国产婷婷六月 | 国产精品国产自产拍高清 | 欧美大片一区二区 |