欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
把字符數組存到AT24c02并在串口調試助手顯示的單片機程序怎么改?
[打印本頁]
作者:
M鍵盤
時間:
2019-11-10 08:46
標題:
把字符數組存到AT24c02并在串口調試助手顯示的單片機程序怎么改?
#include<reg52.h> //52系列單片機頭文件
#include<stdio.h>
#define uchar unsigned char //定義無符號數據類型
#define uint unsigned int
sbit sda=P2^0;//串行數據輸入/輸出端
sbit scl=P2^0;//串行時鐘輸入端
uint i;
char b[8],su[8]={'s','u','j','u','n','j','u','n'};
void delay(){;;} //定義延時空操作
void init1(){
PCON|=0x80;
SCON=0x50;//串口控制寄存器,等價于SM0=0,SM1=1,SM2=0,串口方式一通信
TMOD=0X20; //設置定時器1為模式2,做為波特率發生器,8位初值自動重裝的8位定時器,定時到TH1的值自動裝到TL1
TH1=0xff;//設置波特率為9600
TL1=0xff;
TI = 1;//向CPU發送串口中斷申請,直接使用printf必須加入此句才能實現發送
TR1=1; //啟動波特率發生器
}
void delay1ms(uint z)//延時1ms函數
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void start()//啟動信號:SCL在高電平期間,SDA一個下降沿啟動信號
{
sda=1;
delay();//空操作延時
scl=1;
delay();
sda=0;
delay();
}
void stop()//停止信號:SCL在高電平期間,SDA一個上升沿停止信號
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
void respons()//應答信號:SLC在高電平期間,SDA被從設備拉為低電平表示電平答應
{
uchar i;
scl=1;
delay();
while((sda==1)&&(i<250))//若沒有收到器件應答,主器件將默認已收到數據
i++;
scl=0;
delay();
}
void init() //總線初始化,將總線都拉高以釋放總線
{
sda=1;
delay();
scl=1;
delay();
}
void write_byte(uchar date)//寫一個字節,串行發送1字節時,需要把其中的8位一位一位地發送出去
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++);{
temp=temp<<1;//將temp左移一位,最高位將移入PSW寄存器的CY位中
scl=0;
delay();
sda=CY;//將CY賦給SDA進而在SCL的控制下發送出去
delay();
scl=1;
delay();
}
scl=0;
delay();
sda=1;
delay();
}
uchar read_byte()//讀一字節
{
uchar i,k;//定義臨時變量
scl=0;
delay();
sda=1;
delay();
for(i=0;i<8;i++)//依次把8個獨立的位放入1字節中來完成接收
{
scl=1;
delay();
k=(k<<1)|sda;//將k左移一位與SDA進行“或”運算
scl=0;
delay();
}
return k;
}
void write_add(uchar address,uchar date)
{
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
write_byte(date);
respons();
stop();
}
uchar read_add(uchar address)
{
uchar date;
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
start();
write_byte(0xa1);
respons();
start();
date=read_byte();
stop();
return date;
}
void main() //主函數
{
init();
init1();
P1=0xFF;
while(1){
for(i=0;i<8;i++)
{
b[i]=su[i];
write_add(23,b[i]);
delay1ms(100);
P1=read_add(23);
b[i]=read_add(23);
}
delay1ms(1000);
for(i=1;i<8;i++);
printf("%c\n",b[i]);
}
}
復制代碼
作者:
man1234567
時間:
2019-11-13 10:36
AT24c02能保存數據(數字),對于字符必須行編碼后保存,讀出時還原成字符。
常用的編碼為ASCII或區位碼。
作者:
M鍵盤
時間:
2019-11-15 19:49
man1234567 發表于 2019-11-13 10:36
AT24c02能保存數據(數字),對于字符必須行編碼后保存,讀出時還原成字符。
常用的編碼為ASCII或區位碼。
怎么把字符轉換成數字
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1