单片机控制的16*16点阵显示汉字,不知道为什么会出现字体镜像
//P1低四位连接74ls154驱动8550控制行选,列采用74HC595移位控制输出列数据连接到P2#include<reg51.h>#include<intrins....
//P1低四位连接74ls154驱动8550控制行选,列采用74HC595移位控制输出列数据连接到P2
#include <reg51.h>
#include<intrins.h>
#define NUM 5
#define ROW_SEL P1
sbit SI=P2^0;
sbit SCK=P2^1;
sbit RCK=P2^2;
sbit G=P1^4;
unsigned char code screen[5][32]={ //字模表,逐行顺向,阳码,16*16
//此处省略,太大了有限制
{0xCF,0xFF,0xCE,0x07,0xCE,0x07,0x02,0x67,0x02,0x67,0xCE,0x67,0xCE,0x67,0x86,0x67,
0x82,0x67,0x0A,0x67,0x4E,0x67,0xCE,0x67,0xCC,0xE5,0xC8,0xE1,0xCD,0xF1,0xFF,0xFF},/*"机",4*/
};
//窜入并出16位列线数据
void col_data(unsigned int s,unsigned int r)
{unsigned char i,data1;
data1=screen[s][2*r]; //取第一列数据
for(i=0;i<8;i++)
{
SCK=0;
if ((data1&0x80)==0x80)
SI=1;
else SI=0;
data1<<=1;
SCK=1;
}
data1=screen[s][2*r+1]; //取第二列数据
for (i=0;i<8;i++)
{
SCK=0;
if ((data1&0x80)==0x80)
SI=1;
else SI=0;
data1<<=1;
SCK=1;
}
}
void out_data()//16位列线数据并行输出到锁存器
{
RCK=0;
_nop_();
_nop_();
RCK=1;
}
void main()
{
unsigned int i,j,k;
unsigned char r_sel;
while(1)
{
for (i=0;i<NUM;i++) //循环换屏共5次
{
for (j=0;j<100;j++)//每屏刷新100次
{ for(k=0;k<16;k++)//每屏16行
{
col_data(i,k); //串入第i屏的第K行的列数据
G=1;
out_data();
ROW_SEL=k; //扫描选择第K行
G=0;
}
}
}
}
} 展开
#include <reg51.h>
#include<intrins.h>
#define NUM 5
#define ROW_SEL P1
sbit SI=P2^0;
sbit SCK=P2^1;
sbit RCK=P2^2;
sbit G=P1^4;
unsigned char code screen[5][32]={ //字模表,逐行顺向,阳码,16*16
//此处省略,太大了有限制
{0xCF,0xFF,0xCE,0x07,0xCE,0x07,0x02,0x67,0x02,0x67,0xCE,0x67,0xCE,0x67,0x86,0x67,
0x82,0x67,0x0A,0x67,0x4E,0x67,0xCE,0x67,0xCC,0xE5,0xC8,0xE1,0xCD,0xF1,0xFF,0xFF},/*"机",4*/
};
//窜入并出16位列线数据
void col_data(unsigned int s,unsigned int r)
{unsigned char i,data1;
data1=screen[s][2*r]; //取第一列数据
for(i=0;i<8;i++)
{
SCK=0;
if ((data1&0x80)==0x80)
SI=1;
else SI=0;
data1<<=1;
SCK=1;
}
data1=screen[s][2*r+1]; //取第二列数据
for (i=0;i<8;i++)
{
SCK=0;
if ((data1&0x80)==0x80)
SI=1;
else SI=0;
data1<<=1;
SCK=1;
}
}
void out_data()//16位列线数据并行输出到锁存器
{
RCK=0;
_nop_();
_nop_();
RCK=1;
}
void main()
{
unsigned int i,j,k;
unsigned char r_sel;
while(1)
{
for (i=0;i<NUM;i++) //循环换屏共5次
{
for (j=0;j<100;j++)//每屏刷新100次
{ for(k=0;k<16;k++)//每屏16行
{
col_data(i,k); //串入第i屏的第K行的列数据
G=1;
out_data();
ROW_SEL=k; //扫描选择第K行
G=0;
}
}
}
}
} 展开
2个回答
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32是一种由意法半导体(STMicroelectronics)公司设计和生产的单片机系列,广泛用于嵌入式系统、物联网(IoT)设备、汽车电子、工业自动化等领域。STM32具有以下优点:1. 低功耗:STM32单片机通常具有较低的功耗,...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询