求单片机C程序 100
用52单片机控制16个LED灯,4行4列接法,行是P0直接控制,列是3--8译码器控制,要求单灯循环左移,循环到16灯点亮时候16灯保持点亮,循环第二遍时候16灯15灯点...
用52单片机控制16个LED灯,4行4列接法,行是P0直接控制,列是3--8译码器控制,要求单灯循环左移,循环到16灯点亮时候 16灯保持点亮,循环第二遍时候 16灯 15灯点亮保持,循环第三遍的时候16 15 14 灯点亮保持··············全亮了以后就全灭,然后在按以上方法循环,间隔1秒,这个程序我不会写 想学习下 麻烦加上注解,
展开
2个回答
意法半导体(中国)投资有限公司
2023-08-25
展开全部
展开全部
我说下思路,你写好程序,我帮你看。如果有问题,再追问。
程序分成两部分,把这两部分分开来做。
1、分别控制16个灯的亮、灭。根据硬件电路不同,做法不同。
你要求的是4x4的接法,也就是说是动态扫描的。动态扫描通常的做法是,把要显示的数据放到缓冲区中,然后用定时中断,按照一定的时间间隔,不停的分别显示每一列。
2、控制灯循环实现要求的花样。这部分理论上与硬件无关,如果是动态扫描,这部分的操作只是改写显示缓冲区。
下面是程序框架:
uint16_t led_buffer; // 要显示的数据
timer_isr( void ) // 定时中断, 假设1ms中断一次。
{
static i;
i = ( i + 1 ) % 4;
switch i
case 0: P0 = led_buffer & 0x000F; SN74138 = 0; // 显示第0列
。。。
}
pattern( void )
{
led_buffer = 0;
for ( i = 0; i < 16; ++i )
{
led_buffer = ( 1 << i );// 更新显示数据
delay( 1s ); // 延时1秒
}
}
main( )
{
timer_init();
for(;;)
{
pattern();
}
}
程序分成两部分,把这两部分分开来做。
1、分别控制16个灯的亮、灭。根据硬件电路不同,做法不同。
你要求的是4x4的接法,也就是说是动态扫描的。动态扫描通常的做法是,把要显示的数据放到缓冲区中,然后用定时中断,按照一定的时间间隔,不停的分别显示每一列。
2、控制灯循环实现要求的花样。这部分理论上与硬件无关,如果是动态扫描,这部分的操作只是改写显示缓冲区。
下面是程序框架:
uint16_t led_buffer; // 要显示的数据
timer_isr( void ) // 定时中断, 假设1ms中断一次。
{
static i;
i = ( i + 1 ) % 4;
switch i
case 0: P0 = led_buffer & 0x000F; SN74138 = 0; // 显示第0列
。。。
}
pattern( void )
{
led_buffer = 0;
for ( i = 0; i < 16; ++i )
{
led_buffer = ( 1 << i );// 更新显示数据
delay( 1s ); // 延时1秒
}
}
main( )
{
timer_init();
for(;;)
{
pattern();
}
}
追问
还是不会啊 麻烦你帮我都写出来吧!我有实物 可以直接看效果,谢谢了
意法半导体(中国)投资有限公司
2021-01-14 广告
2021-01-14 广告
1、不是的,STC单片机全面兼容MCS-51单片机,可以用一般的编程器编程,但ISP功能更方便实用。 2、实验板的串口就是ISP下载用的吧。 4、汇编语言不一定要在keil里学,一般的教程都可以学。keil只是一个编译程序。因为keil编译...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询