#include "delay.h"
#include "lcd1602.h"
sbit SCK = P2^0//sbit定义单片机的特殊功能寄存器变量
sbit SDA = P2^1
bit ack = 0//bit定义变量
void iic_start()
{
SDA = 1
SCK = 1
delay_us(1)
SDA = 0
delay_us(1)
SCK = 0//钳住总线,等待下次使用
}
void icc_stop()
{
SDA = 0
SCK = 1
delay_us(1)
SDA = 1
delay_us(1)
SCK = 0//钳住总线,等待下次使用
}
void iic_send_byte(unsigned char byte)
{
unsigned char i
for(i = 0i<8i++)
{
SDA = byte &0x80//非0为1
SCK = 1
delay_us(1)
SCK = 0
byte <<=1//左移一位
}
SDA = 1
SCK = 1
delay_us(1)
if(0 == SDA)//有应答
ack = 0
else //无应答
ack =1
SCK = 0//钳住总线,等待下次使用
}
unsigned char iic_rcv_byte()
{
unsigned char i,temp
SDA = 1
for(i = 0i <8i ++)
{
SCK = 0
delay_us(1)
SCK = 1
delay_us(1)
temp <<= 1
if(SDA)
temp = temp+ 1
}
SCK = 0
return temp
}
void iic_ack()
{
SDA = 0
SCK = 1
delay_us(1)
SCK = 0
}
void iic_noack()
{
SDA = 1
SCK = 1
delay_us(1)
SCK = 0
}
void AT_send_str(unsigned char deviceaddr,unsigned char romaddr,unsigned char *s,unsigned char num)
{
unsigned char i
iic_start()
iic_send_byte(deviceaddr)
if(ack == 1)
return
iic_send_byte(romaddr)
if(ack == 1)
return
for(i = 0i <numi ++)
{
iic_send_byte(*s)
if(ack == 1)
return
s++
}
icc_stop()
}
void AT_rcv_str(unsigned char deviceaddr,unsigned char romaddr,unsigned char *s,unsigned char num )
{
unsigned char i
//SDA = 1
iic_start()
iic_send_byte(deviceaddr)
if(ack == 1)
return
iic_send_byte(romaddr)
if(ack == 1)
return
iic_start()
iic_send_byte(deviceaddr + 1)
if(ack == 1)
return
for(i = 0i <num - 1i++)
{
*s = iic_rcv_byte()
iic_ack()//
s++
}
*s = iic_rcv_byte()
iic_noack()
icc_stop()
}
void main()
{
unsigned char i
unsigned char testbuf[20] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,16,17,18,19}
unsigned char rcvbuf[20]
lcd_init()
AT_send_str(0xae,0,testbuf,10)
delay_ms(200)
AT_rcv_str(0xae,0,rcvbuf,10)
for(i = 0i <10i++)
{
display_lcd_char(i,0,rcvbuf[i]+0x30)
}
while(1)
}
目前市面上有一些针对单片机的微信小程序,通过这些小程序,用户可以利用微信进行单片机相关的学习、编程和实践。例如,一些小程序提供了丰富的单片机编程题、设计案例和教学视频,用户可以通过这些内容强化自己的单片机编程和应用能力。同时,一些小程序还提供了在线互动问答、实时教学辅导等服务,方便用户实时获得帮助与指导。总之,这些单片机题的微信小程序为用户提供了更为便捷、高效的学习体验,有助于提升用户的单片机编程技能与实践能力。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)