标题:
51单片机程序怎么让void main()里同时进行?
[打印本页]
作者:
德布劳内
时间:
2022-5-26 01:16
标题:
51单片机程序怎么让void main()里同时进行?
代码如下,这是一个光立方的程序。第一层亮了有短暂的延迟第二层才亮,然后到第三次第四层,有没有什么办法让四层同时亮。
单片机源程序如下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit SH_CP1 = P1^0; //第一层引脚
sbit DS1 = P1^1;
sbit ST_CP1 = P1^2;
sbit SH_CP2 = P1^3;
sbit DS2 = P1^4;
sbit ST_CP2 = P1^5;
sbit SH_CP3 = P1^6; //第二层引脚
sbit DS3 = P1^7;
sbit ST_CP3 = P2^0;
sbit SH_CP4 = P2^1;
sbit DS4 = P2^2;
sbit ST_CP4 = P2^3;
sbit SH_CP5 = P2^4; //第三层引脚
sbit DS5 = P2^5;
sbit ST_CP5 = P2^6;
sbit SH_CP6 = P2^7;
sbit DS6 = P3^0;
sbit ST_CP6 = P3^1;
sbit SH_CP7 = P3^2; //第四层引脚
sbit DS7 = P3^3;
sbit ST_CP7 = P3^4;
sbit SH_CP8 = P3^5;
sbit DS8 = P3^6;
sbit ST_CP8 = P3^7;
uchar a1[] = {0x60,0x60,0x60,0x60,0x60,0x60,0x60,0xff,}; //十六进制转二
uchar a2[] = {0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xff,};
uchar b1[] = {0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xff,};
uchar b2[] = {0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0xff,};
void delay (uint x)
{
while(x--);
}
void in595(uchar temp)
{
uchar i;
for(i = 0;i < 8;i ++)
{
temp <<= 1;
DS1 = CY; //第一层
DS2 = CY;
SH_CP1 = 0;
SH_CP2 = 0;
SH_CP1 = 1;
SH_CP2 = 1;
DS3 = CY; //第二层
DS4 = CY;
SH_CP3 = 0;
SH_CP4 = 0;
SH_CP3 = 1;
SH_CP4 = 1;
DS5 = CY; //第三层
DS6 = CY;
SH_CP5 = 0;
SH_CP6 = 0;
SH_CP5 = 1;
SH_CP6 = 1;
DS7 = CY; //第四层
DS8 = CY;
SH_CP7 = 0;
SH_CP8 = 0;
SH_CP7 = 1;
SH_CP8 = 1;
}
}
void out595()
{
ST_CP1 = 0; //第一层
ST_CP1 = 1;
ST_CP2 = 0;
ST_CP2 = 1;
ST_CP3 = 0; //第二层
ST_CP3 = 1;
ST_CP4 = 0;
ST_CP4 = 1;
ST_CP5 = 0; //第三层
ST_CP5 = 1;
ST_CP6 = 0;
ST_CP6 = 1;
ST_CP7 = 0; //第四层
ST_CP7 = 1;
ST_CP8 = 0;
ST_CP8 = 1;
}
void main ()
{
uchar i;
while(1)
{
for(i = 0;i < 8;i ++)
{
in595(~a1[ i]); //第一层前8个灯
ST_CP1 = 0;
ST_CP1 = 1;
in595(~a2[ i]); //第一层后8个灯
ST_CP2 = 0;
ST_CP2 = 1;
in595(~b1[ i]); //第二层前8个灯
ST_CP3 = 0;
ST_CP3 = 1;
in595(~b2[ i]); //第二层后8个灯
ST_CP4 = 0;
ST_CP4 = 1;
in595(~b1[ i]); //第三层前8个灯
ST_CP5 = 0;
ST_CP5 = 1;
in595(~b2[ i]); //第三层后8个灯
ST_CP6 = 0;
ST_CP6 = 1;
in595(~a1[ i]); //第四层前8个灯
ST_CP7 = 0;
ST_CP7 = 1;
in595(~a2[ i]); //第四层后8个灯
ST_CP8 = 0;
ST_CP8 = 1;
}
}
}
作者:
lujiantu0926
时间:
2022-5-26 08:49
加个硬件电路电源控制
作者:
lujiantu0926
时间:
2022-5-26 08:50
增加使能控制
作者:
lkc8210
时间:
2022-5-26 11:09
既然DS和CP都是同一动作
为啥不直接用两根IO并联8个595各自的DS和CP脚?
作者:
德布劳内
时间:
2022-5-26 12:52
lkc8210 发表于 2022-5-26 11:09
既然DS和CP都是同一动作
为啥不直接用两根IO并联8个595各自的DS和CP脚?
后面还有添加别的效果
作者:
啤酒瓶子老大
时间:
2022-5-26 14:56
建议还是换一种思路吧。595是可以级联的。计算好发送数据的顺序就好。
不要质疑595的刷新速度,绝对比眼睛快。
多搜索看看广告牌的驱动电路图。很多用595的。
http://www.51hei.com/bbs/dpj-219890-1.html
参考一下。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1