UC1601 镜像模式 代码
时间: 2023-06-24 14:04:59 浏览: 119
UC1601是一种单色LCD控制器,支持镜像模式。下面是UC1601镜像模式的代码示例:
```c
#include <SPI.h>
//定义UC1601 LCD控制器的引脚
#define CS 10 //片选
#define RES 9 //复位
#define DC 8 //数据/命令
//定义UC1601 LCD控制器的命令
#define CMD_DISPLAY_OFF 0xAE //关闭显示
#define CMD_DISPLAY_ON 0xAF //打开显示
#define CMD_SET_DISP_START_LINE 0x40 //设置显示起始行
#define CMD_SET_PAGE 0xB0 //设置页地址
#define CMD_SET_COLUMN_UPPER 0x10 //设置列地址高4位
#define CMD_SET_COLUMN_LOWER 0x00 //设置列地址低4位
#define CMD_SET_ADC_NORMAL 0xA0 //ADC正常
#define CMD_SET_ADC_REVERSE 0xA1 //ADC反转
#define CMD_SET_DISP_NORMAL 0xA6 //正常显示
#define CMD_SET_DISP_REVERSE 0xA7 //反转显示
#define CMD_SET_ALLPTS_NORMAL 0xA4 //正常显示所有点
#define CMD_SET_ALLPTS_ON 0xA5 //所有点亮
#define CMD_SET_BIAS_9 0xA2 //设置偏置电压为1/9
#define CMD_SET_RMW_MODE 0xE0 //读-修改-写模式
#define CMD_SET_STATIC_OFF 0xA8 //关闭静态指示器
#define CMD_SET_STATIC_ON 0xAD //打开静态指示器
#define CMD_SET_RESET 0xE2 //软件复位
#define CMD_NOP 0xE3 //空操作
#define CMD_SET_COM_NORMAL 0xC0 //正常扫描模式
#define CMD_SET_COM_REVERSE 0xC8 //反转扫描模式
#define CMD_SET_POWER_CONTROL 0x28 //设置电源控制
#define CMD_SET_V0_RANGE 0x20 //设置V0范围
//定义UC1601 LCD控制器的函数
void UC1601_sendCommand(unsigned char command) {
digitalWrite(DC, LOW);
digitalWrite(CS, LOW);
SPI.transfer(command);
digitalWrite(CS, HIGH);
}
void UC1601_sendData(unsigned char data) {
digitalWrite(DC, HIGH);
digitalWrite(CS, LOW);
SPI.transfer(data);
digitalWrite(CS, HIGH);
}
void UC1601_init() {
pinMode(CS, OUTPUT);
pinMode(RES, OUTPUT);
pinMode(DC, OUTPUT);
digitalWrite(CS, HIGH);
digitalWrite(RES, LOW);
delay(100);
digitalWrite(RES, HIGH);
UC1601_sendCommand(CMD_SET_RESET); // 软件复位
UC1601_sendCommand(CMD_SET_STATIC_OFF); // 关闭静态指示器
UC1601_sendCommand(CMD_SET_POWER_CONTROL); // 设置电源控制
UC1601_sendCommand(CMD_SET_V0_RANGE); // 设置V0范围
UC1601_sendCommand(CMD_SET_BIAS_9); // 设置偏置电压为1/9
UC1601_sendCommand(CMD_SET_ADC_NORMAL); // ADC正常
UC1601_sendCommand(CMD_SET_COM_NORMAL); // 正常扫描模式
UC1601_sendCommand(CMD_SET_DISP_START_LINE); // 设置显示起始行
UC1601_sendCommand(CMD_SET_COLUMN_UPPER); // 设置列地址高4位
UC1601_sendCommand(CMD_SET_COLUMN_LOWER); // 设置列地址低4位
UC1601_sendCommand(CMD_SET_RMW_MODE); // 读-修改-写模式
UC1601_sendCommand(CMD_SET_DISP_NORMAL); // 正常显示
UC1601_sendCommand(CMD_DISPLAY_ON); // 打开显示
}
void UC1601_setMirrorMode() {
UC1601_sendCommand(CMD_SET_COM_REVERSE); // 反转扫描模式
UC1601_sendCommand(CMD_SET_ADC_REVERSE); // ADC反转
}
void UC1601_setNormalMode() {
UC1601_sendCommand(CMD_SET_COM_NORMAL); // 正常扫描模式
UC1601_sendCommand(CMD_SET_ADC_NORMAL); // ADC正常
}
void UC1601_clear() {
for (int i = 0; i < 8; i++) {
UC1601_sendCommand(CMD_SET_PAGE | i);
UC1601_sendCommand(CMD_SET_COLUMN_UPPER);
UC1601_sendCommand(CMD_SET_COLUMN_LOWER);
for (int j = 0; j < 80; j++) {
UC1601_sendData(0x00);
}
}
}
void setup() {
SPI.begin();
SPI.setClockDivider(SPI_CLOCK_DIV4);
UC1601_init();
}
void loop() {
UC1601_clear();
UC1601_setMirrorMode(); //设置镜像模式
//在镜像模式下输出一些内容
UC1601_sendCommand(CMD_SET_PAGE | 3);
UC1601_sendCommand(CMD_SET_COLUMN_UPPER);
UC1601_sendCommand(CMD_SET_COLUMN_LOWER);
UC1601_sendData(0xFF);
UC1601_sendData(0x00);
UC1601_sendData(0xFF);
UC1601_sendData(0x00);
UC1601_sendData(0xFF);
delay(1000);
UC1601_setNormalMode(); //恢复正常模式
}
```
注意,UC1601的镜像模式需要设置扫描模式和ADC模式均为反转,才能实现水平镜像的效果。在代码中,通过`UC1601_setMirrorMode()`函数设置镜像模式,通过`UC1601_setNormalMode()`函数恢复正常模式。另外,`UC1601_clear()`函数用于清空屏幕,`UC1601_sendCommand()`和`UC1601_sendData()`函数用于向UC1601发送命令和数据。