第一步--熟悉硬件
流水灯的原理图是这样的
lcd的接口是这样的
我在这里突然发现了一个问题,就是led和lcd怎么有公用的端口!!但是我仔细一看发现,这led是由一个锁存器控制,lcd的控制芯片有一个cs片选信号,感觉这个是控制着两个模块的使能的,那么不同时向led和lcd写数据不就行了?
所以控制思路也就有了,在向lcd写数据的时候就使能lcd控制芯片,用完就失能它。这一步我发现给的例程已经做了。但led可没有做,所以只能自己实现了,控制思路和lcd一样,用的时候使能,用完就失能。
第二步--软件设计
首先就是套用官方给的例程,有现成的不用岂不是浪费。然后初始化一下pd2口。下面就是pd2的初始化函数。
void led_enable_gpio_cofig(void){ gpio_inittypedef gpio_strue; rcc_apb2periphclockcmd(rcc_apb2periph_gpiod, enable); gpio_strue.gpio_pin = gpio_pin_2; gpio_strue.gpio_speed = gpio_speed_50mhz; gpio_strue.gpio_mode = gpio_mode_out_pp; gpio_init(gpiod, &gpio_strue); //先关了灯 gpio_setbits(gpiod, gpio_pin_2); gpio_write(gpioc,0xff00); gpio_resetbits(gpiod, gpio_pin_2);}为了好记我把使能失能宏定义一下
#define led_enable() gpio_setbits(gpiod, gpio_pin_2)#define led_disenable() gpio_resetbits(gpiod, gpio_pin_2)延时函数就用例程带的。
建立一个流水灯数组
uint16_t led_buff[][8] = {0xfe00, 0xfd00, 0xfb00, 0xf700, 0xef00, 0xdf00, 0xbf00, 0x7f00, 0x7f00, 0xbf00, 0xdf00, 0xef00, 0xf700, 0xfb00, 0xfd00, 0xfe00, 0x7e00, 0xbd00, 0xdb00, 0xe700, 0xe700, 0xc300, 0x8100, 0x0000, 0xe700, 0xdb00, 0xbd00, 0x7e00, 0x7e00, 0x3c00, 0x1800, 0x0000};最后的过程就很简单了看一下mian函数吧
int main(void){ uint8_t i; systick_config(systemcoreclock/1000); //delay_ms(200); stm3210b_lcd_init(); led_enable_gpio_cofig(); lcd_clear(black); lcd_setbackcolor(black); lcd_settextcolor(white); lcd_displaystringline(line1 ,(unsigned char *) flowled test); lcd_setbackcolor(yellow); lcd_displaystringline(line2 ,(unsigned char *)flowled mode 1 test.); lcd_setbackcolor(black); lcd_displaystringline(line3 ,(unsigned char *)flowled mode 2 test.); lcd_setbackcolor(black); lcd_displaystringline(line4 ,(unsigned char *)flowled mode 3 test.); lcd_setbackcolor(black); lcd_displaystringline(line5 ,(unsigned char *)flowled mode 4 test.); led_enable(); for(i = 0; i < 8; i ++) { gpio_write(gpioc,led_buff[0][i]); delay_ms(200); } gpio_write(gpioc,0xff00); led_disenable(); lcd_setbackcolor(black); lcd_displaystringline(line2 ,(unsigned char *)flowled mode 1 test.); lcd_setbackcolor(yellow); lcd_displaystringline(line3 ,(unsigned char *)flowled mode 2 test.); led_enable(); for(i = 0; i < 8; i ++) { gpio_write(gpioc,led_buff[1][i]); delay_ms(200); } gpio_write(gpioc,0xff00); led_disenable(); lcd_setbackcolor(black); lcd_displaystringline(line3 ,(unsigned char *)flowled mode 2 test.); lcd_setbackcolor(yellow); lcd_displaystringline(line4 ,(unsigned char *)flowled mode 3 test.); led_enable(); for(i = 0; i < 8; i ++) { gpio_write(gpioc,led_buff[2][i]); delay_ms(200); } gpio_write(gpioc,0xff00); led_disenable(); lcd_setbackcolor(black); lcd_displaystringline(line4 ,(unsigned char *)flowled mode 3 test.); lcd_setbackcolor(yellow); lcd_displaystringline(line5 ,(unsigned char *)flowled mode 4 test.); led_enable(); for(i = 0; i < 8; i ++) { gpio_write(gpioc,led_buff[2][i]); delay_ms(200); } gpio_write(gpioc,0xff00); led_disenable(); lcd_setbackcolor(black); lcd_displaystringline(line5 ,(unsigned char *)flowled mode 4 test.); lcd_setbackcolor(green); lcd_displaystringline(line6 ,(unsigned char *)finshed!); lcd_setbackcolor(red); lcd_displaystringline(line7 ,(unsigned char *) ); while(1);}
比亚迪和上汽连续数月稳居新能源乘用车冠亚军,北汽新能源则雄风不再
关于移动通信技术在物联网中的应用的调研
0805封装 128种阻值 每种阻值500片 贴片电阻盒
影响电动汽车跑长途的两大因素是什么?
光电开关npn和pnp的区别
带显示屏指示的流水灯设计
浅谈监控指挥中心可视终端LED显示屏的应用
dfrobotHitec HS311标准舵机介绍
C51全局初始化及精确延时程序,51单片机精确延时程序
努比亚Z17miniS评测 1999元起的售价足以战胜同价位竞品
海格通信与特殊机构客户签订的订货合同,总金额约 2.71 亿元人民币
vr/ar厂商和区块链厂商之间不可说的关系
融入智慧生活的智能魔镜,它将给我们的生活带来哪些影响
电阻应变片的工作原理是什么
Facebook将无限期关停特朗普Facebook和Instagram账号
大健康行业被认为区块链技术最有潜力的应用领域
小米路由器AC2100评测 兼顾设计与性能
又一头部工业机器人厂商宣布涨价;上半年国内召回 255 万辆汽车!软硬件问题频出
三大运营商同步投入蜂巢式低功耗物联网市场
医疗机器人进军眼科领域 发挥比医生更稳定