51单片机 拉幕式数码显示程序和图
答案:1 悬赏:70 手机版
解决时间 2021-04-03 11:58
- 提问者网友:像風在裏
- 2021-04-02 14:43
51单片机 拉幕式数码显示程序和图
最佳答案
- 五星知识达人网友:長槍戰八方
- 2021-04-02 15:53
我根据你的原理图自己画了一个原理图,用你的代码编译仿真,没问题呀。
下面是我对你的代码做了优化和注释,你可以拿去参考。
#include
#define uchar unsigned char
#define uint unsigned int
#define CI_MAX 3 //单个效果出现的次数的最大值
#define CNT_MAX 20 //移动速度,值越大速度越慢
#define SEG_PORT P0
#define COM_PORT P2
uchar code duan[] = { 0, 0, 0, 0, 0, 0, 0, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0, 0, 0, 0, 0, 0, 0, 0 }; //低电平熄灭,高电平点亮
uchar code wei[8] = { 0, 1, 2, 3, 4, 5, 6, 7 }; //位扫描
uchar code sheet[5][8] =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //________
{ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06 }, //1______1
{ 0x5b, 0x06, 0x00, 0x00, 0x00, 0x00, 0x06, 0x5b }, //21____12
{ 0x4f, 0x5b, 0x06, 0x00, 0x00, 0x06, 0x5b, 0x4f }, //321__123
{ 0x66, 0x4f, 0x5b, 0x06, 0x06, 0x5b, 0x4f, 0x66 } //43211234
};
void delay( uint ms )
{
uint t0, t1;
for ( t0 = ms; t0 > 0; t0-- )
for ( t1 = 15; t1 > 0; t1-- );
}
void main()
{
uint i, j, k, m;
uint cnt, ci; //移动速度、单个效果出现的次数
k = 10;
m = 7;
COM_PORT = 0x00;
SEG_PORT = 0xFF;//数码管
while ( 1 )
{
//效果1:数字1~8从右往左,一位一位移动出现,移动消失
for ( ci = CI_MAX; ci > 0; ci-- )
{
for ( i = 0; i < 16; i++ )
{
for ( cnt = CNT_MAX; cnt > 0; cnt-- )
{
for ( j = 0; j < 8; j++ )
{
SEG_PORT = 0x00;//消隐
COM_PORT = wei[j];
SEG_PORT = duan[j + i];
delay( 20 );
}
}
}
}
/
//效果3:数字1~4,两边向中间,一位一位移动出现,移动消失
for ( ci = CI_MAX; ci > 0; ci-- )
{
for ( i = 0; i < 4; i++ )
{
for ( cnt = CNT_MAX; cnt > 0; cnt-- )
{
for ( j = 0; j <= 7; j++ )
{
SEG_PORT = 0x00;//消隐
COM_PORT = wei[j];
SEG_PORT = sheet[i][j];
delay( 15 );
}
}
}
for ( i = 4; i > 0; i-- )
{
for ( cnt = CNT_MAX; cnt > 0; cnt-- )
{
for ( j = 0; j <= 7; j++ )
{
SEG_PORT = 0x00;//消隐
COM_PORT = wei[j];
SEG_PORT = sheet[i][j];
delay( 15 );
}
}
}
}
//*/
}
}
下面是我对你的代码做了优化和注释,你可以拿去参考。
#include
#define uchar unsigned char
#define uint unsigned int
#define CI_MAX 3 //单个效果出现的次数的最大值
#define CNT_MAX 20 //移动速度,值越大速度越慢
#define SEG_PORT P0
#define COM_PORT P2
uchar code duan[] = { 0, 0, 0, 0, 0, 0, 0, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0, 0, 0, 0, 0, 0, 0, 0 }; //低电平熄灭,高电平点亮
uchar code wei[8] = { 0, 1, 2, 3, 4, 5, 6, 7 }; //位扫描
uchar code sheet[5][8] =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //________
{ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06 }, //1______1
{ 0x5b, 0x06, 0x00, 0x00, 0x00, 0x00, 0x06, 0x5b }, //21____12
{ 0x4f, 0x5b, 0x06, 0x00, 0x00, 0x06, 0x5b, 0x4f }, //321__123
{ 0x66, 0x4f, 0x5b, 0x06, 0x06, 0x5b, 0x4f, 0x66 } //43211234
};
void delay( uint ms )
{
uint t0, t1;
for ( t0 = ms; t0 > 0; t0-- )
for ( t1 = 15; t1 > 0; t1-- );
}
void main()
{
uint i, j, k, m;
uint cnt, ci; //移动速度、单个效果出现的次数
k = 10;
m = 7;
COM_PORT = 0x00;
SEG_PORT = 0xFF;//数码管
while ( 1 )
{
//效果1:数字1~8从右往左,一位一位移动出现,移动消失
for ( ci = CI_MAX; ci > 0; ci-- )
{
for ( i = 0; i < 16; i++ )
{
for ( cnt = CNT_MAX; cnt > 0; cnt-- )
{
for ( j = 0; j < 8; j++ )
{
SEG_PORT = 0x00;//消隐
COM_PORT = wei[j];
SEG_PORT = duan[j + i];
delay( 20 );
}
}
}
}
/
//效果3:数字1~4,两边向中间,一位一位移动出现,移动消失
for ( ci = CI_MAX; ci > 0; ci-- )
{
for ( i = 0; i < 4; i++ )
{
for ( cnt = CNT_MAX; cnt > 0; cnt-- )
{
for ( j = 0; j <= 7; j++ )
{
SEG_PORT = 0x00;//消隐
COM_PORT = wei[j];
SEG_PORT = sheet[i][j];
delay( 15 );
}
}
}
for ( i = 4; i > 0; i-- )
{
for ( cnt = CNT_MAX; cnt > 0; cnt-- )
{
for ( j = 0; j <= 7; j++ )
{
SEG_PORT = 0x00;//消隐
COM_PORT = wei[j];
SEG_PORT = sheet[i][j];
delay( 15 );
}
}
}
}
//*/
}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯