C51控制OLED12864 倒计时程序

时间: 2024-05-14 20:19:13 浏览: 10
以下是使用C51控制OLED12864显示倒计时的示例程序。 ```c #include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int // OLED控制端口定义 sbit OLED_SCL = P2^0; // 时钟线 sbit OLED_SDA = P2^1; // 数据线 sbit OLED_CS = P2^2; // 片选线 sbit OLED_RST = P2^3; // 复位线 // OLED显示缓存 uchar code F6x8[][6] = { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 空格 {0x00, 0x00, 0x5f, 0x00, 0x00, 0x00}, // ! {0x00, 0x07, 0x00, 0x07, 0x00, 0x00}, // " // ... 其他字符的字模数据 }; uchar dis_buf[16]; // 显示缓冲区 uchar sec = 60; // 倒计时秒数 // 延时函数 void DelayMs(uint ms) { uint i, j; for (i = 0; i < ms; i++) { for (j = 0; j < 120; j++) _nop_(); } } // OLED控制函数 void OLED_WrDat(uchar dat) { uchar i; OLED_CS = 0; // 片选使能 for (i = 0; i < 8; i++) { OLED_SCL = 0; OLED_SDA = (dat & 0x80) >> 7; dat <<= 1; OLED_SCL = 1; } OLED_CS = 1; // 片选禁止 } void OLED_WrCmd(uchar cmd) { uchar i; OLED_CS = 0; // 片选使能 OLED_SCL = 0; OLED_SDA = 0; OLED_SCL = 1; OLED_SDA = 1; for (i = 0; i < 8; i++) { OLED_SCL = 0; OLED_SDA = (cmd & 0x80) >> 7; cmd <<= 1; OLED_SCL = 1; } OLED_CS = 1; // 片选禁止 } void OLED_Init() { OLED_RST = 1; // 复位 DelayMs(100); OLED_RST = 0; DelayMs(100); OLED_RST = 1; OLED_WrCmd(0xae); // 关闭显示 OLED_WrCmd(0x00); // 列地址低4位 OLED_WrCmd(0x10); // 列地址高4位 OLED_WrCmd(0x40); // 起始行 OLED_WrCmd(0x81); // 对比度设置 OLED_WrCmd(0xcf); // 对比度 OLED_WrCmd(0xa1); // 左右反置 OLED_WrCmd(0xc8); // 上下反置 OLED_WrCmd(0xa6); // 正常显示 OLED_WrCmd(0xa8); // 多路复用设置 OLED_WrCmd(0x3f); // 多路复用比率 OLED_WrCmd(0xd3); // 显示偏移 OLED_WrCmd(0x00); // 偏移量 OLED_WrCmd(0xd5); // 显示时钟分频 OLED_WrCmd(0x80); // 分频设置 OLED_WrCmd(0xd9); // 预充电周期 OLED_WrCmd(0xf1); // 周期设置 OLED_WrCmd(0xda); // 通道选择 OLED_WrCmd(0x12); // 通道设置 OLED_WrCmd(0xdb); // Vcomh电压倍率 OLED_WrCmd(0x40); // 倍率设置 OLED_WrCmd(0x8d); // 充电泵设置 OLED_WrCmd(0x14); // 开启充电泵 OLED_WrCmd(0xaf); // 开启显示 } void OLED_PutChar(uchar x, uchar y, uchar ch) { uchar i, j; for (i = 0; i < 6; i++) { dis_buf[y * 128 + x + i] = F6x8[ch][i]; } for (i = 0; i < 8; i++) { OLED_WrCmd(0xb0 + y + i); OLED_WrCmd(x & 0x0f); OLED_WrCmd(((x & 0xf0) >> 4) | 0x10); for (j = 0; j < 6; j++) { OLED_WrDat(dis_buf[y * 128 + x + j]); } } } void OLED_PutString(uchar x, uchar y, uchar *str) { while (*str) { OLED_PutChar(x, y, *str++); x += 6; } } void main() { OLED_Init(); while (1) { sprintf(dis_buf, "Countdown: %02d", sec); OLED_PutString(0, 0, dis_buf); DelayMs(1000); sec--; if (sec == 0) { break; } } OLED_PutString(0, 2, "Time's up!"); while (1) ; } ``` 该程序使用了OLED12864的标准控制方式,通过OLED_WrCmd()和OLED_WrDat()函数向OLED模块写入控制命令和数据。在倒计时过程中,程序使用sprintf()函数将倒计时秒数格式化为字符串,并通过OLED_PutString()函数将其显示在OLED屏幕上。 需要注意的是,该程序还需要使用到一个6x8字体的字模数组F6x8,可以在其他地方定义或引用。另外,程序中使用了一些基本的C语言语法,如sprintf()函数和while循环等,需要具备一定的C语言编程基础。

相关推荐

最新推荐

recommend-type

自动升降旗控制程序c51

在51系列单片机上完全使用c51编写,保证初学者看懂!!!!!!!!!!
recommend-type

使用C51实现PID算法

真正要用PID算法的时候,发现书上的代码在我们51上来实现还不是那么容易的事情。简单的说来,就是不能直接调用。仔细分析你可以发现,教材上的、网上现行的PID实现 的C语言代码几乎都是用浮点型的数据来做的,可以...
recommend-type

无线控制的PWM方式控制C51程序

无线控制的PWM方式控制C51程序 无线控制的PWM方式控制C51程序 无线控制的PWM方式控制C51程序
recommend-type

k8s1.16的jenkins部署java项目cicd(cd手动)-kubernetes安装包和详细文档笔记整理

k8s1.16的jenkins部署java项目cicd(cd手动)-kubernetes安装包和详细文档笔记整理
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

用Spring boot和vue写一个登录注册界面

好的,这是一个比较常见的技术问题,我可以为您提供一些参考资料和思路。首先,您可以使用Spring Boot作为后端框架来处理用户认证和注册的逻辑,比如使用Spring Security实现用户登录认证。同时,您还需要设计相应的数据模型和数据库表结构来存储用户信息。在前端方面,您可以使用Vue.js作为框架来构建登录注册页面,使用Axios来发起API请求并和后端进行交互。当然,在实现过程中,还需要考虑一些具体细节,比如数据校验、安全性和用户体验等方面。希望这些信息能够帮助到您。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依