Stm32仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)(Proteus8.6+74LS595+数码管)
单片机源程序如下:
- #include "led595.h"
- #include "delay.h"
- u8 Ledseg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0x7f};
- void LED595_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- //打开PD口时钟
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
-
- //引脚设置
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_4|GPIO_Pin_6;
- //端口速度
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- //端口模式,此为输出推挽模式
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
-
- //初始化对应的端口
- GPIO_Init(GPIOC, &GPIO_InitStructure);
- }
- //串行移位输出8位
- void Led595_Out(u8 data)
- {
- u8 i;
- for(i=8;i>=1;i--)
- {
- if(data&0x80)
- {
- DIO_ON;
- }
- else
- {
- DIO_OFF;
- }
- data<<=1;
- SCLK_OFF;
- delayms(5);
- SCLK_ON;
- }
- }
- //显示函数
- void Led595_Display (u8 *leddata)
- {
- u8 *led_table;
- u8 i;
- //显示第四位
- led_table = Ledseg + *leddata;
- i = *led_table;
- Led595_Out(i);
- Led595_Out(0x01);
- RCLK_OFF;
- delayms(5);
- RCLK_ON;
- //显示第三位
- led_table = Ledseg + *(leddata+1);
- i = *led_table;
- Led595_Out(i);
- Led595_Out(0x02);
- RCLK_OFF;
- delayms(5);
- RCLK_ON;
- //显示第二位
- led_table = Ledseg + *(leddata+2);
- i = *led_table;
- Led595_Out(i);
- Led595_Out(0x04);
- RCLK_OFF;
- delayms(5);
- RCLK_ON;
- //显示第一位
- led_table = Ledseg + *(leddata+3);
- i = *led_table;
- Led595_Out(i);
- Led595_Out(0x08);
- RCLK_OFF;
- delayms(5);
- RCLK_ON;
- }
复制代码
所有资料51hei提供下载:
STM32_74HC595_SEG.rar
(982.63 KB, 下载次数: 822)
附件:仿真及代码下载
|