STM32入门例程,驱动8位数码管显示“12345678”源程序
STM32,通过595串行,驱动8位数码管显示“12345678”源程序在Mini-STM32学习板上上调试通过
(Mini-STM32学习板介绍:http://www.u-easytech.com/chinese/product.asp?id=96)
STM32技术探讨QQ:583508038
源程序ourdev_289742.rar(文件大小:589K) (原文件名:八位数码管12345678.rar)
http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_289743.JPG
效果照片 (原文件名:595mn.JPG)
http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_289744.JPG
mini板 (原文件名:mn-stm32.JPG) /*--------------------------------------
//GPIO define
//Design by :Tan/yicheng
//pctanyicheng@163.com
//www.u-easytech.com
//u-easytech@163.com
//重庆优易特电子
// COPYRIGHT:重庆优易特电子
//http://www.u-easytech.com/chinese/
//FUNCTION:用595完成八位数码管显示
-------------------------------------------------------------------------- */
#include <stm32f10x_lib.h> /* STM32F10x Library Definitions */
#include "UET_GPIO.h"
//unsigned charseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x8c,0xc1,0xce,0x91,0x89,0xc7,0xff};
unsigned charseg[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71,0x73,0x78,0x5c,0x54,
0x40,0x81,0x88,0x3e,0x70,0x00
} ;
//0,1,2,3,4,5,6,7,8,9,
//A,b,C,d,E,F,P,t,o,n,
//-,~,_,U,r,SP,
//unsigned charDAT[]={0x7f,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位选择
unsigned char BitSelect_Code[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //因为ULN2803驱动反相,所以位码要用共阳极的位码
//COM1 COM2 COM3 COM4 COM5 COM6 COM7 COM8
// B0 B1B2 B3 B4 B5 B6 B7
unsignedcharDisp_buffer[]={0,1,2,3,4,5,6,7}; //段缓冲区
unsignedchar Bit_NO=0 ; // 选择第Bit_NO位数码管
unsignedchar Buffer_NO=0; // 缓冲区的第Buffer_NO
u32 LED_DATA=01234567;
#define SER(x) GPIOA->ODR=(GPIOA->ODR&~GPIO_Pin_7) | (x ? GPIO_Pin_7 : 0)
#define SCK(x) GPIOA->ODR=(GPIOA->ODR&~GPIO_Pin_5) | (x ? GPIO_Pin_5 : 0)
#define RCK(x) GPIOA->ODR=(GPIOA->ODR&~GPIO_Pin_6) | (x ? GPIO_Pin_6 : 0)
/*******************************************************************************
* Function Name:void WR_595(unsigned char segdata)
* Description : 595串行输入
* Input : 段码
* Output : None
* Return : None
*******************************************************************************/
void WR_595(unsigned char segdata) //输入一字节数码管数据进595
{
unsigned char i,temp;
temp=segdata;
for(i=0;i<8;i++) //循环移入8位数据,
{
SCK(0);
if(temp&0x80) // 取数码的最高位
SER(1);
else
SER(0);
temp=temp<<1;
SCK(1); //上升沿把一位数据移入595
}
}
/*******************************************************************************
* Function Name: void OUT_595(void)
* Description : 595锁存输出
* Input : 段码
* Output : None
* Return : None
*******************************************************************************/
void OUT_595(void) //上升沿将数据送到输出锁存器
{unsigned i;
RCK(0);
for(i=0;i<10;i++) ;
RCK(1);
RCK(0);
}
/*******************************************************************************
* Function Name: void LED_Brush(u32 LED_DATA)
* Description : 数码管缓冲数据刷新
* Input : u32 LED_DATA
* Output : None
* Return : None
*******************************************************************************/
void LED_Brush(u32 LED_DATA)
{
Disp_buffer=LED_DATA/1000%10;
Disp_buffer=LED_DATA/100%10;
Disp_buffer=LED_DATA/10%10;
Disp_buffer=LED_DATA%10;
Disp_buffer=LED_DATA/10000000;
Disp_buffer=LED_DATA/1000000%10;
Disp_buffer=LED_DATA/100000%10;
Disp_buffer=LED_DATA/10000%10;
}
/*******************************************************************************
* Function Name: void Display(void)
* Description : 显示
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void Display(void)
{
LED_Brush(12345678);//调用显示函数
WR_595(BitSelect_Code); // 位码
WR_595(seg]); //段码
OUT_595();
Bit_NO++;
Buffer_NO++;
if( Buffer_NO>7) Buffer_NO=0;
if(Bit_NO>7)Bit_NO=0;
} 以下蓝色文字由版主:bluelucky 于:2008-08-11,13:47:28 加入。<font color=black>请发贴人注意:本贴放在这分区不合适,即将移走
原来分区:ARM技术论坛
即将移去的分区:Cortex-M3技术讨论区
移动执行时间:自本贴发表0小时后
任何的疑问或咨询,请可随时联系站长。谢谢你的支持!</font> 谢谢 支持一下 顶dd 应该有5根线呀,数据,时钟,锁存,电源,地
4根线也可以吗? 对不起,看错了。是5根线。 mark mark{:lol:}{:lol:}{:lol:}{:lol:}{:lol:}{:lol:}{:lol:} 顶起!!!!!!! 顶呱呱!!!!! 学习了~~ 正在学习595驱动数据管呢,谢谢楼主……
页:
[1]