rv1109 display
时间: 2023-08-25 16:13:41 浏览: 41
回答: 在rv1109项目中涉及到显示屏的兼容方式。在uboot阶段,我们选择具体的LCD屏幕,并根据该屏幕的初始化序列来初始化和显示logo。具体的LCD屏幕兼容方式可以查找相关资料和追溯代码以获取更多信息。在提供的引用中,可以看到选择的LCD型号为L071,而不是目前需要的1218-A101NL66-28K型号。这可能是由于选错了LCD型号或配置的问题导致的。建议查阅相关资料和代码以确认和调整正确的LCD型号和配置。<em>1</em><em>2</em><em>3</em>
#### 引用[.reference_title]
- *1* *2* *3* [RV1109--LCD黑屏问题](https://blog.csdn.net/weixin_42913061/article/details/122446730)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item]
[ .reference_list ]
相关问题
单片机与ADC连接采用IO方式,采用查询方式采集模拟电压(0~5V),送到数码管显示。0~5V的被测电压加到ADC0809芯片的IN3通道,进行A/D转换,输入电压的大小可通过手动调节RV1来实现。生成代码
以下是基于51单片机的ADC0809芯片实现0~5V采集并显示到数码管的代码:
```
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit CLK = P3^6;
sbit CS = P3^7;
sbit EOC = P3^5;
sbit DIG1 = P1^0;
sbit DIG2 = P1^1;
sbit DIG3 = P1^2;
sbit DIG4 = P1^3;
sbit ADC_OUT = P1^7;
uchar code seg_table[] = { // 数码管段码表
0x3f, 0x06, 0x5b, 0x4f, 0x66,
0x6d, 0x7d, 0x07, 0x7f, 0x6f
};
void delay(int i) { // 延时函数
while(i--);
}
void write_com(uchar com) { // 写入ADC0809控制字
uchar i;
CS = 0;
delay(10);
for(i = 0; i < 8; i++) {
CLK = 0;
delay(10);
if(com & 0x80) {
ADC_OUT = 1;
}
else {
ADC_OUT = 0;
}
com <<= 1;
CLK = 1;
delay(10);
}
CS = 1;
delay(10);
}
uint read_adc() { // 读取ADC0809转换结果
uint dat = 0;
uchar i;
EOC = 1;
delay(10);
EOC = 0;
delay(10);
for(i = 0; i < 8; i++) {
CLK = 0;
delay(10);
CLK = 1;
delay(10);
dat <<= 1;
if(ADC_OUT) {
dat |= 0x01;
}
}
return dat;
}
void display(uchar num) { // 数码管显示函数
DIG1 = DIG2 = DIG3 = DIG4 = 1;
P0 = seg_table[num];
switch(num) {
case 0: DIG1 = 0; break;
case 1: DIG2 = 0; break;
case 2: DIG3 = 0; break;
case 3: DIG4 = 0; break;
}
}
void main() {
uint val;
uchar i, h, l;
while(1) {
write_com(0x88); // 选择IN3通道
delay(10);
write_com(0xcf); // 启动A/D转换
delay(100);
val = read_adc(); // 读取转换结果
h = val / 100; // 取百位数
l = val % 100; // 取十位和个位数
display(h); // 显示百位数
delay(1000); // 延时1秒
for(i = 0; i < 20; i++) { // 闪烁显示十位和个位数
display(10); // 数码管显示空白
delay(50);
display(l / 10); // 显示十位数
delay(50);
display(l % 10); // 显示个位数
delay(50);
}
}
}
```
需要注意的是,ADC0809芯片的IN3通道需要选择为单端输入模式,并且参考电压需要设置为5V。在代码中,通过手动调节RV1来改变输入电压大小,从而实现对被测电压的采集和显示。
请用c51语言编译:用ADC0808控制PWM输出。说明:使用数字模拟转换芯片ADC0808,通过调节节可变电阻RV1来调节脉宽,运行程序时,通过虚拟显示波器观察占空比的变化。
抱歉,我无法为您提供C51语言的编译。但是,我可以为您提供一个基本的思路:
1. 首先需要连接好ADC0808和PWM输出引脚。
2. 初始化ADC0808和PWM模块。
3. 在主循环中,读取ADC0808转换结果,并将其映射到合适的PWM占空比范围内。
4. 更新PWM占空比。
5. 将占空比通过虚拟显示波器显示出来。
以下是一个C51语言的伪代码框架,供参考:
```
#include <reg52.h>
#include <intrins.h>
#define PWM_PIN P1 // PWM输出端口
#define ADC_PIN P2 // ADC输入端口
sbit ADC_CS = P3^0; // ADC片选引脚
sbit ADC_EOC = P3^1; // ADC转换结束标志引脚
void init_adc() {
// 初始化ADC0808
// 设置ADC_CS为输出模式
ADC_CS = 1;
// ...
}
void init_pwm() {
// 初始化PWM模块
// ...
}
void main() {
init_adc();
init_pwm();
while (1) {
// 开始ADC转换
ADC_CS = 0;
delay(1);
ADC_CS = 1;
// 等待ADC转换结束
while (!ADC_EOC);
// 读取ADC转换结果
int adc_value = ADC_PIN;
// 映射到PWM占空比范围内
int duty_cycle = map(adc_value, 0, 255, 0, 100);
// 更新PWM占空比
PWM_PIN = duty_cycle;
// 显示占空比
display(duty_cycle);
}
}
```
请注意,这只是一个伪代码框架,需要根据具体的硬件配置和实际情况进行适当修改。并且还需要进行编译和调试。