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

/*******************I2C模拟通信及AT24C02底层驱动程序****************/

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

//AT24C02

//delayus:延时约5us

void delayus()

{

;;

}

//i2c:initI2C总线初始化

void i2c_init()

{

SCL = 1;

delayus();

SDA = 1;

delayus();

}

//lcd:start 起始信号

void start()

{

SCL = 1;

SDA = 1;

delayus();

SDA = 0;

delayus();

}

//i2c:stop停止信号

void stop()

{

SCL = 1;

SDA = 0;

delayus();

SDA = 1;

delayus();

}

//i2c:ack从机应答信号

void ack()

{

uchar i = 0;

//在SCL = 1时,读取SDA的数据判忙

SCL = 1;

delayus();

while((SDA == 1)&& i < 250)

i++;

//判忙之后,等待发送数据/命令

SCL = 0;

delayus();

}

//nack:主机非应答信号

void nack()

{

//主机发送非应答信号1

SCL = 1;

delayus();

SDA = 1;

delayus();

//等待发送数据/命令

SCL = 0;

delayus();

}

//write:byte写一个字节数据

void write_byte(uchar date)

{//从最高位发送

uchar i, temp;

temp = date;

for(i = 0; i < 8; i++)

{

temp <<= 1;

SCL = 0;

delayus();

SDA = CY;

delayus();

SCL = 1;

delayus();

SCL = 0;

delayus();

}

//等待从机应答

SCL = 0;

delayus();

SDA = 1;//置1,等待从机应答0

delayus();

}

//read:byte 读一个字节数据

uchar read_byte()

{

uchar i, j, k;

SCL = 0;

delayus();

for(i = 0; i < 8; i++)

{

SCL = 1;

delayus();

j = SDA;

k = (k << 1) | j;

delayus();

SCL = 0;

delayus();

}

delayus();

return (k);

}

//write:AT24C02 写AT24C02

void write_c02(uchar address, uchar date)

{

start();

write_byte(write_add);

ack();

write_byte(address);

ack();

write_byte(date);

ack();

stop();

delay(12);

}

//read:AT24C02读AT24C02

uchar read_c02(uchar add)

{

uchar date = 0;

start();

write_byte(write_add);

ack();

write_byte(add);

ack();

start();

write_byte(read_add);

ack();

date = read_byte();

nack();

return (date);

}

//display:数码管显示程序

void display(uchar num)

{

uchar bai, shi, ge;

bai = num / 100 % 10;

shi = num / 10 % 10;

ge = num % 10;本文引用地址:http://www.eepw.com.cn/article/201612/324620.htm

dula = 1;

P0 = table[bai];

dula = 0;

P0 = 0xff;

wela = 1;

P0 = 0xfe;

wela = 0;

P0 = 0x00;

delay(1);

dula = 1;

P0 = table[shi];

dula = 0;

P0 = 0xff;

wela = 1;

P0 = 0xfd;

wela = 0;

P0 = 0x00;

delay(1);

dula = 1;

P0 = table[ge];

dula = 0;

P0 = 0xff;

wela = 1;

P0 = 0xfb;

wela = 0;

P0 = 0x00;

delay(1);

}

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

/*************************UART串口通信******************************/

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

//uart:initUART初始化

void uart_init()

{

TMOD = 0x20;

TH1 = 0xFD; //9600bps/s

TL1 = 0xFD;

TR1 = 1;

SM0 = 0;

SM1 = 1;

REN = 1;

EA = 1;

ES = 1;

}

//main:主程序

void main(void)

{

i2c_init();

lcd_init();

uart_init();

//LCD1602

write_cmd(0x80);

send_string(string_1);

write_cmd(0x80 + 0x40);

send_string(string_2);

//AT24C02

write_c02(0x0a, 0xaa);

num = read_c02(0x0a);

while(1)

{

display(num);

if(flag == 1)

{

ES = 0;

SBUF = num;

while(!TI);

TI = 0;

flag = 0;

ES = 1;

}

}

}

//UART:INT 串口中断程序

void uart_int() interrupt 4

{

RI = 0;

num = SBUF;

flag= 1;

}

单片机lcd1602程序 c语言,单片机I2C通信及LCD1602显示C程序相关推荐

  1. 单片机设计时钟程序c语言,单片机电子时钟程序设计

    共用体除非必要,否则我们不推荐使用,枚举的用法比较简单,在本书 19 章的项目实践中有很好的示例,这节课我们先来练习一下结构体的使用.下边这个程序的功能是一个带日期的电子钟,相当于一个简易万年历了,并 ...

  2. 想设计一个母亲节小程序c语言,明天母亲节,用这款小程序,给妈妈送一张贺卡吧!...

    原标题:明天母亲节,用这款小程序,给妈妈送一张贺卡吧! 小程序体验师:陈丹阳 妈妈,再打我一次吧. 明天就是一年一度的母亲节了,还没想好给妈妈送什么吗? 现在,「知晓程序」就给你推荐一款贺卡小程序「小 ...

  3. .net应用程序中添加chm帮助文档打开显示此程序无法显示网页问题

    在做.net大作业时添加了chm帮助文档结果在打开时显示"此程序无法显示网页问题",但是把帮助文档拷到别的路径下却显示正常, 经过从网上查找,终于找到了答案: (1).chm文件的 ...

  4. ds18b20程序c语言,单片机中使用DS18B20温度传感器C语言程序(参考6)

    /******************************************/ // //       DS18B20温度计C程序 //       2007.06.08 /******** ...

  5. 51单片机电机测速程序c语言,单片机电机测速程序

    这个51单片机+电机霍尔测速程序是从一个制作成功的智能小车里面提取出来的 原理图及其源代码压缩包的下载地址:http://www.51hei.com/bbs/dpj-19526-1.html 下面是主 ...

  6. 数字时钟单片机程序c语言,单片机数字时钟C语言程序

    单片机程序 /********************************************************/ #include // 包含51单片机寄存器定义的头文件 unsign ...

  7. 散转程序c语言,单片机 散转表程序的使用

    原标题:单片机 散转表程序的使用 使用散转表可以尽可能的减少程序的编写,方便. 减少判断次数. 程序名:散转程序试验 ;说明: 开使后 1亮,按下任何按键,寄存器r0从零加起,根据r0内容,程序散转到 ...

  8. 散转程序c语言,单片机 散转程序设计 软件实验

    单片机 散转程序设计 软件实验 实验九散转程序设计 一.实验目的 1.进一步熟悉MCS-51指令系统和汇编语言程序设计. 2.学会用三种不同的方法设计散转程序,并掌握它们的区别. 二.实验内容 方法一 ...

  9. 单片机看门狗c语言,单片机看门狗程序

    /*此程序实现单片机"看门狗"WDT的功能*/ #include"p18f458.h" unsignedlongi; /*系统初始化子程序*/ voidinit ...

  10. 单片机看门狗c语言,单片机看门狗程序 -解决方案-华强电子网

    *此程序实现单片机"看门狗"WDT的功能*/ #include"p18f458.h" unsignedlongi; /*系统初始化子程序*/ voidiniti ...

最新文章

  1. linux下如何察看哪个进程在写硬盘
  2. sourcetree 卡顿_Android卡顿性能监测方案对比
  3. Integer源码解析
  4. robot连接mysql_Robotframework使用自写库连接mysql数据库
  5. Apache Shiro Java 反序列化漏洞解决修复记录
  6. 分享一个WIN10可用的桌面图标栅栏管理插件Fences的破解版
  7. 【剑桥英语I优加】剑桥pet相当于什么级别
  8. 使用 Python 和 Pygame 构建小行星游戏
  9. PB调用C#开发的控制台应用——实现WORD文档按页转存JPG图片
  10. 20190927CF训练
  11. 微信小程序--七彩爱心加载动画
  12. C++ 次方/次幂函数
  13. vue 大量图片展示_Ant Design of Vue 展示多张图片
  14. 产品读书《人人都是产品经理 1.0》
  15. 教师计算机西沃培训心得,学习使用希沃电子白板的心得体会
  16. [SV]SystemVerilog压缩数组(Packed Array)和非压缩数组( Unpacked Array)
  17. 工作三年的Java程序员应该达到什么水平?
  18. LeetCode Java刷题笔记—876. 链表的中间结点
  19. 扫雷,潜伏者(python)
  20. 操作Domino数据库的设计元素

热门文章

  1. java 微信小程序 在线学习系统app
  2. STM32F7通过QSPI驱动W25Q256芯片
  3. matlab幅度归一化,matlab归一化方法
  4. keil添加华大芯片支持jflash下载
  5. JavaSE、JavaEE、JavaME
  6. linux命令行格式简介
  7. 手机远程访问HTML5,如何使用手机连接远程桌面?
  8. c语言ut测试白盒测试方法,白盒测试
  9. 西门子博途v14 SP1 S7-1200之间的以太网双边通讯(两个S7-1200 在一个项目中)
  10. 线性规划问题及单纯形法-目标函数值极小大M法