📄 m32_16.c
字号:
/*
mu通过减小m值,加速;md通过增大m值,减速
nu通过增大n值,加速,nd通过减小n值,减速
*/
#include <at89x52.h>
sbit mu=P1^4;
sbit md=P1^5;
sbit nu=P1^6;
sbit nd=P1^7;
unsigned char m=10,n=8;
//阴码,逐列式
char code table[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //4行空内容,刚好2个字,即字从右边第一列开始显示
//0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //如果没有,从左边第一列,一下就显字,感觉很突然
0x10,0x40,0x10,0x23,0xFF,0x1A,0x10,0x04,0xD0,0x1B,0x30,0x40,0x00,0x38,0xFC,0x01,0x54,0x39,0x57,0x43,0x55,0x4D,0x54,0x41,
0x54,0x71,0xFC,0x05,0x00,0x18,0x00,0x00,//"媳"
0x10,0x80,0x10,0x41,0xD0,0x22,0x3F,0x14,0x10,0x0C,0x90,0x13,0x70,0x60,0x08,0x20,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,
0x08,0x21,0xF8,0x7F,0x00,0x00,0x00,0x00,//"妇"
0x80,0x00,0x40,0x00,0xF0,0x7F,0x2C,0x00,0x43,0x10,0x20,0x0C,0x98,0x03,0x0F,0x21,0x0A,0x40,0xE8,0x3F,0x08,0x00,0x88,0x00,
0x28,0x03,0x1C,0x1C,0x08,0x08,0x00,0x00,//"你",
0x10,0x80,0x10,0x43,0xF0,0x22,0x1F,0x14,0x10,0x0C,0xF0,0x73,0x80,0x20,0x82,0x00,0x82,0x40,0x82,0x80,0xF2,0x7F,0x8A,0x00,
0x86,0x00,0x82,0x00,0x80,0x00,0x00,0x00,//"好",
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //显示空屏,如果只有一个字或将字全部移出必须设置一个空屏幕
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
void delay(int c)
{
int i,j;
for(i=0;i<c;i++)
for(j=0;j<10;j++)
;
}
void main()
{
unsigned char i,j; //i:每个字的显示循环;j每个字的显示码除以2? unsigned int b=0; //显示偏移控制,char类型最多只能显示14个汉字+一个空白位字符
unsigned char a; //控制移动间隔时间
IT0=1; //设置中断触发方式,下降沿
IE=0X81;
while(1)
{
j=0;
if(a>m) //m移动间隔时间;char型取值0--255 内容显示a次,才开始往后挪
{
a=0;
b+=n; //跳动步伐,最好为2的整数倍,因为每个字节是16位点阵=2个8位
//b+=16; //每次跳动半个汉字
//b+=32; //每次跳动一个汉字
if(b>=200) //显示到最后一个字,回头显示,判断值=字数*32
{ //此值,只能比code 区“判断值”小,否则系统会造成垃圾信息
b=0;
}
}
P3_0=1;
for(i=0;i<16;i++) //如果想用for(i=0;i<32;i++),毕竟一屏是32+32个字节显示完就ok了,其实这么写就麻烦了
{ //因为一个值是赋给p0,加1的值赋给P2,那么还需要再判断奇偶性,麻烦!
P1=0xff; //???????????????????如何使用,避免和后面的冲突????????
P1=(i|(P1&0xf0));
P0=table[j+b];
P2=table[j+b+1];
delay(5);
P0=0x00;
P2=0x00;
j+=2; //每次加2,因为是2个字节一个汉字 2*16=32,刚好显示全一个字
}
P3_0=0;
for(i=0;i<16;i++)
{
P1=0xff;
P1=(i|(P1&0xf0));
P0=table[j+b];
P2=table[j+b+1];
delay(5);
P0=0x00;
P2=0x00;
j+=2;
}
a++;
}
}
void a_key() interrupt 0 using 2 //外部中断0 ,第一组寄存器,r0
{
/* switch (P1)
{
case 0xfe: //第一个键按下
}*/
if (mu==0)
{if(m>1)m-=2;}
else if (md==0)
{if(m<16) m+=2;}
else if (nu==0)
{ if(n<=32)
m+=4;
}
else if (nd==0)
{ if(n>=4)
m-=4;
}
else ;//异常原因引起的中断,不处理,但此处有个问题,如果同时按下两个键呢,呵呵,总有个先后,你说呢
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -