查看数据的接连数

解决ORA-12519错误
http://www.ezloo.com/2009/04/ora-12519_tnsno_appropriate_service_handler_found.html


有时候连得上数据库,有时候又连不上。
可能是数据库上当前的连接数目已经超过了它能够处理的最大值。

select count(*) from v$process --当前的连接数
select value from v$parameter where name = 'processes' --数据库允许的最大连接数

修改最大连接数:
alter system set processes = 300 scope = spfile;

重启数据库:
shutdown immediate;
startup;

--查看当前有哪些用户正在使用数据
SELECT osuser, a.username,cpu_time/executions/1000000||'s', sql_fulltext,machine
from v$session a, v$sqlarea b
where a.sql_address =b.address order by cpu_time/executions desc;
<think>好的,我现在要在Arduino Uno上使用5161BS码管显示字符串“abc123”并实现闪烁效果。首先,我需要了解5161BS码管的基本信息。这个码管是四位共阳还是共阴?通常5161BS是四位共阳的,可能需要确认一下。如果是共阳的,那么每个段的控制需要低电平来点亮,而共阴则相反。这一步很关键,因为涉及到电路连接和代码逻辑。 接下来,引脚配置。5161BS码管通常有12个引脚,四个位选(控制哪一位显示)和八个段选(a到g加上小点)。我需要确定每个引脚对应的段和位。例如,位选可能对应四个引脚,而段选对应八个,可能需要通过移位寄存器如74HC595来扩展IO口,因为Arduino Uno的字引脚可能不够用。Uno有14个字IO,但直接驱动四位八段可能需要12个引脚,如果不够的话,可能需要使用移位寄存器或者复用技术。 然后,动态扫描显示的问题。四位码管需要快速轮流显示每一位,利用视觉暂留效应。每个字符显示一段时间后切换到下一个,同时处理闪烁效果。闪烁可以通过定时器或millis()函控制显示和熄灭的时间间隔。 接下来是字符编码。需要将“abc123”中的每个字符转换为对应的段码。例如,字母a的段码是0x77(假设共阳,具体可能需要查表),字1是0x06等。注意字母和字的显示可能不同,需要确保编码正确。同时,考虑到显示顺序,可能需要循环显示每个字符,每个字符在四位码管上依次显示,或者分时显示不同的位。 硬件连接方面,假设使用共阳码管,位选引脚连接到Arduino的字引脚作为控制,段选通过移位寄存器或者直接连接。如果使用移位寄存器,需要连接数据、时钟和锁存引脚,并编写相应的代码来控制。 代码部分,需要初始化引脚模式,设置段选和位选的输出。在循环中,依次选择每一位,输出对应的段码,并保持一定时间。同时,处理闪烁效果,可以通过每隔一定时间切换显示和熄灭状态。例如,使用millis()记录时间,每500ms切换一次显示状态。 可能遇到的问题包括段码不正确导致显示乱码,动态扫描速度不够导致闪烁,或者电流不足导致亮度不够。可能需要添加限流电阻,并调整扫描频率。另外,Arduino的引脚驱动能力有限,如果直接驱动码管,可能需要使用晶体管或ULN2003来增强驱动能力,尤其是位选引脚需要较大的电流。 最后,测试和调试。先测试单个字符的显示,再逐步实现字符串的循环显示和闪烁效果。使用串口输出调试信息,确认每个步骤是否正确。</think>要在Arduino Uno开发板上驱动5161BS码管实现字符串"abc123"的接连闪烁,需结合硬件连接和代码控制,步骤如下: --- ### **一、硬件连接** 1. **码管类型确认** 5161BS为**四位共阳码管**,需将公共端(COM1-COM4)连接至VCC(5V),段选引脚通过限流电阻(220Ω)连接至Arduino字引脚[^1]。 2. **引脚分配** - **段选引脚**:a-g、dp对应Arduino字引脚2-9(示例) - **位选引脚**:COM1-COM4对应Arduino字引脚10-13(示例) - 若IO不足,可搭配74HC595移位寄存器扩展[^2]。 --- ### **二、字符编码与动态扫描** 1. **段码表(共阳)** 定义字符对应的十六进制段码: ```cpp // 示例段码(按a-g顺序,0为亮) byte segmentMap[] = { 0x77, // a 0x7C, // b 0x39, // c 0x5E, // 1 0x79, // 2 0x71 // 3 }; ``` 2. **动态扫描原理** 依次激活每一位码管并输出对应段码,利用视觉暂留效应实现连续显示。 --- ### **三、代码实现** ```cpp // 定义段选和位选引脚 int segPins[] = {2,3,4,5,6,7,8,9}; // a-g依次对应 int digitPins[] = {10,11,12,13}; // COM1-COM4 // 字符段码(共阳) byte segmentMap[] = {0x77,0x7C,0x39,0x5E,0x79,0x71}; // a,b,c,1,2,3 char displayStr[] = {'a','b','c','1','2','3'}; // 目标字符串 unsigned long previousMillis = 0; bool displayState = true; // 控制闪烁状态 const long interval = 500; // 闪烁间隔500ms void setup() { for(int i=0; i<8; i++) pinMode(segPins[i], OUTPUT); for(int i=0; i<4; i++) pinMode(digitPins[i], OUTPUT); } void loop() { unsigned long currentMillis = millis(); // 控制闪烁 if(currentMillis - previousMillis >= interval) { previousMillis = currentMillis; displayState = !displayState; } if(displayState) { // 动态扫描显示字符 for(int i=0; i<6; i++){ // 遍历6个字符 for(int j=0; j<4; j++){ // 每个字符显示在4位中的一位 digitalWrite(digitPins[j], HIGH); setSegments(segmentMap[i]); delay(5); // 每位置显示时间 digitalWrite(digitPins[j], LOW); } } } else { // 熄灭所有段 setSegments(0xFF); } } // 设置段选输出 void setSegments(byte segments) { for(int i=0; i<8; i++) { digitalWrite(segPins[i], (segments >> (7-i)) & 0x01); } } ``` --- ### **四、关键说明** 1. **段码校准** 需根据实际硬件调整段码值,确保字符正确显示[^1]。 2. **电流限制** 位选引脚电流较大,建议使用ULN2003驱动芯片保护Arduino。 3. **闪烁优化** 使用`millis()`非阻塞延时,避免影响动态扫描效果。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值