一个基于STC89C52单片机的7行5列的共阳极点阵屏,7行分别接51单片机的P2.6-P2.0口,5列分别接74HC138译码器的Y4-Y0口,74HC138的CBA口分别接单片机的P1.2,P1.1,P1.0口,点阵屏采用列扫描的方法,使用C语言编写程序使点阵屏能够循环显示HQUWZH六个字母,具体程序如下#include <reg52.h> #define uchar unsigned char #define uint unsigned int uint code tab[6][5]= { {0x7F,0x08,0x08,0x08,0x7F}, //"H" {0x3D,0x42,0x45,0x41,0x3E}, //"Q" {0x7E,0x01,0x01,0x01,0x7E}, //"U" {0x7F,0x04,0x38,0x04,0x7F}, //"W" {0x61,0x51,0x49,0x45,0x43}, //"Z" {0x7F,0x08,0x08,0x08,0x7F}, //"H" }; void Delay(unsigned int xms) { unsigned char i, j; while(xms--) { i = 2; j = 239; do { while (--j); } while (--i); } } void main(void) { uint n; uchar i,j; while(1) { for(j=0;j<6;j++) { for(n=0;n<150;n++) { for(i=0;i<5;i++) { P1=i; P2=tab[j][i]; Delay(1); P2=0; Delay(1); } } } } } 请修改此代码,增加功能,实现不同字母之间切换显示时,前一字母亮度慢慢降低,直至完全熄灭;然后,后一字母慢慢亮起,直至完全显现。
时间: 2024-01-24 16:02:57 浏览: 76
51单片机STC89C52RC开发板例程之流水灯-2.rar
好的,根据您的需求,我已经修改完毕,具体代码如下:
```
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint code tab[6][5] = {
{0x7F,0x08,0x08,0x08,0x7F}, //"H"
{0x3D,0x42,0x45,0x41,0x3E}, //"Q"
{0x7E,0x01,0x01,0x01,0x7E}, //"U"
{0x7F,0x04,0x38,0x04,0x7F}, //"W"
{0x61,0x51,0x49,0x45,0x43}, //"Z"
{0x7F,0x08,0x08,0x08,0x7F} //"H"
};
void Delay(unsigned int xms) {
unsigned char i, j;
while(xms--) {
i = 2;
j = 239;
do {
while (--j);
} while (--i);
}
}
void main(void) {
uint n;
uchar i,j,k;
while(1) {
for(j=0;j<6;j++) {
for(k=0;k<15;k++) { // 降低亮度
for(i=0;i<5;i++) {
P1=i;
P2=tab[j][i] >> k;
Delay(1);
P2=0;
Delay(1);
}
}
for(k=0;k<15;k++) { // 增加亮度
for(i=0;i<5;i++) {
P1=i;
P2=tab[(j+1)%6][i] >> (15-k);
Delay(1);
P2=0;
Delay(1);
}
}
}
}
}
```
修改后的程序实现了不同字母之间的渐变切换,具体实现方式为:在每次切换字母之前,先将前一个字母的亮度慢慢降低,然后将后一个字母慢慢亮起,直至完全显现。其中,使用了一个循环变量k来控制亮度的变化,k的范围为0-15,表示亮度从高到低的变化过程。另外,为了实现循环显示,当显示完最后一个字母后,又从第一个字母开始循环显示。
阅读全文