本程序需要解决如下问题:
1:记录按键次数;
2:按键次数写入AT24C02;
3:将按键次数从AT24C02中 读出并用1602LCD显示。
如果将问题放在一起考虑,会很乱,程序也不容易编写,但是如果将AT24C02的读写程序写成一个模块,将1602的显示程序写出另外一个模块,及时不熟练,呵呵,可以COPY,注意一下接口就行了,是不是很简单!
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载):
单片机源程序如下:
- //实例86:将按键次数写入AT24C02,再读出并用1602LCD显示
- #include<reg51.h> //包含单片机寄存器的头文件
- #include<intrins.h> //包含_nop_()函数定义的头文件
- #include "LCD1602.h"
- #include "AT24C02.h"
- sbit S=P1^4; //将S位定义为P1.4引脚
- unsigned char code digit[ ]={"0123456789"}; //定义字符数组显示数字
- /***************************************************
- 函数功能:LCD1602显示次数
- (具体的显示要求,放在主程序之中)
- ***************************************************/
- void Display(unsigned char x)
- {
- unsigned char i,j;
- i=x/10; //取整运算,求得十位数字
- j=x%10; //取余运算,求得各位数字
- WriteAddress(0x44); //写显示地址,将十位数字显示在第2行第5列
- WriteData(digit[i]); //将十位数字的字符常量写入LCD
- WriteData(digit[j]); //将个位数字的字符常量写入LCD
-
- }
- /*********************************************************************
- 函数功能:主函数
- ***********************************************************************/
- void main(void)
- {
- unsigned char sum; //储存计数值
- unsigned char x; //储存从AT24C02读出的值
- LcdInitiate(); //调用LCD初始化函数
- sum=0; //将计数值初始化为0
- while(1) //无限循环
- {
- if(S==0) //如果该键被按下
- {
- delaynms(80); //软件消抖,延时80ms
- if(S==0) //确实该键被按下
- sum++; //计件值加1
- if(sum==99) //如果计满99
- sum=0; //清0,重新开始计数
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
将按键次数写入AT24C02,再读出并用1602LCD显示(利用模块化编程的很好例子).zip
(27.93 KB, 下载次数: 421)
|