学前班
最后登录1970-1-1
在线时间 小时
注册时间2015-8-6
|
本帖最后由 i小贤 于 2015-8-10 16:54 编辑
程序如上
现在有个问题就是显示不了十位。假如我要显示15,那么它就显示55;我要显示36,那么他就显示66.反正就是两位数码管都是显示个位的数。。用的是野火的ISO-MINI V2的板子实验!
请问这是怎么回事???麻烦各位帮我看下,万分感谢!
/*****************************************************************************
*êyÂë1üÏÔê¾3ìDò
*2015.07.29
*zxw
*****************************************************************************/
#include "smg_xianshi.h"
#define SCK(a) if (a) \
GPIO_SetBits(GPIOA,GPIO_Pin_5);\
else \
GPIO_ResetBits(GPIOA,GPIO_Pin_5)
#define SCK2(a) if (a) \
GPIO_SetBits(GPIOA,GPIO_Pin_9);\
else \
GPIO_ResetBits(GPIOA,GPIO_Pin_9)
#define DS(a) if (a) \
GPIO_SetBits(GPIOA,GPIO_Pin_7);\
else \
GPIO_ResetBits(GPIOA,GPIO_Pin_7)
#define DS2(a) if (a) \
GPIO_SetBits(GPIOA,GPIO_Pin_10);\
else \
GPIO_ResetBits(GPIOA,GPIO_Pin_10)
#define RCK(a) if (a) \
GPIO_SetBits(GPIOA,GPIO_Pin_6);\
else \
GPIO_ResetBits(GPIOA,GPIO_Pin_6)
#define RCK2(a) if (a) \
GPIO_SetBits(GPIOA,GPIO_Pin_11);\
else \
GPIO_ResetBits(GPIOA,GPIO_Pin_11)
#define AA(a) if (a) \
GPIO_SetBits(GPIOA,GPIO_Pin_0);\
else \
GPIO_ResetBits(GPIOA,GPIO_Pin_0)
#define BB(a) if (a) \
GPIO_SetBits(GPIOA,GPIO_Pin_1);\
else \
GPIO_ResetBits(GPIOA,GPIO_Pin_1)
#define CC(a) if (a) \
GPIO_SetBits(GPIOA,GPIO_Pin_3);\
else \
GPIO_ResetBits(GPIOA,GPIO_Pin_3)
unsigned char seg[]={
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
} ;
unsigned char Disp_buffer[]={0,1,2,3};
unsigned char Disp_buffer2[]={0,1,2,3};
/*******************************************************************************
* Function Name : void WR_595(unsigned char segdata)
* Description : 595′®DDêäèë
* Input : ??
* Output : None
* Return : None
*******************************************************************************/
void GPIO_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
/*!< Configure SPI_FLASH_SPI pins: SCK */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/*!< Configure SPI_FLASH_SPI pins: MISO */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/*!< Configure SPI_FLASH_SPI pins: MOSI */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/*!< Configure SPI_FLASH_SPI_CS_PIN pin: SPI_FLASH Card CS pin */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1 |GPIO_Pin_3 |GPIO_Pin_4 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;//3õê¼»ˉ595êäèëËø′æÆ÷òy½Å£¨PA4£©oíêyÂë1üλ¿ØÖÆòy½Å
GPIO_Init(GPIOA, &GPIO_InitStructure);
// GPIO_SetBits(GPIOA,GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11);//éÏà-
//GPIO_SetBits(GPIOA,GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);//éÏà-
}
void WR_595(unsigned char segdata) //写一个数码管字节到595
{
unsigned char i,temp;
temp=segdata;
for(i=0;i<8;i++) //循环写入
{
SCK(0);
if(temp&0x80) //取字节的高位
DS(1);
else
DS(0);
temp=temp<<1;
SCK(1); //时钟拉高,写入
}
}
void WR2_595(unsigned char segdata) //写一个数码管字节到595
{
unsigned char i,temp;
temp=segdata;
for(i=0;i<8;i++)
{
SCK2(0);
if(temp&0x80)
DS2(1);
else
DS2(0);
temp=temp<<1;
SCK2(1);
}
}
/*****************************************************************
*wmh_138();wml_138();数码管位选择
* 74HC138
* wm:数码管位数
*****************************************************************/
void wmh_138(unsigned char wm)
{
if(wm==0)
{
AA(0);
BB(0);
CC(0);
}
if(wm==1)
{
AA(1);
BB(0);
CC(0);
}
}
void wml_138(unsigned char wm)
{
if(wm==2)
{
AA(0);
BB(1);
CC(0);
}
if(wm==3)
{
AA(1);
BB(1);
CC(0);
}
}
/*******************************************************************************
* Function Name : void OUT_595(void)
* Description : 595数据移入锁存器
*******************************************************************************/
void OUT_595(void) //595数据移入锁存器
{ unsigned i;
RCK(0); //拉低
for(i=0;i<10;i++);
RCK(1);
RCK(0);
}
void OUT2_595(void) //595数据移入锁存器
{ unsigned i;
RCK2(0); //拉低
for(i=0;i<10;i++);
RCK2(1);
RCK2(0);
}
void LED_Brush(int LED_DATA) //把要显示的数据拆分放到数组里
{
Disp_buffer[0]=LED_DATA/10; //取十位
Disp_buffer[1]=LED_DATA%10; //取个位
}
void LED_Brush2(int LED_DATA2) //把要显示的数据拆分放到数组里
{
Disp_buffer2[0]=LED_DATA2/10; //取十位
Disp_buffer2[1]=LED_DATA2%10; //取个位
}
void delay1(int j) //简单的延时
{
char jj=255;
while(j--)
{
for(;jj>0;jj--);
}
}
void shu_ma_guan_ll(int ll) //数码管显示一个数
{
char i;
LED_Brush(ll); //把要显示的数拆分放到数组
for(i=0;i<2;i++) //循环写入两个字节
{
wmh_138(i); //数码管位选择
WR_595(seg[Disp_buffer]); //串行写入一个字节到595
OUT_595(); //数据输入到锁存器
delay1(500);
}
}
void shu_ma_guan_yl(int yl) //数码管显示一个数
{
char i;
LED_Brush2(yl); //把要显示的数拆分放到数组
for(i=0;i<2;i++) //循环写入两个字节
{
wml_138(i+2); //数码管位选择
WR2_595(seg[Disp_buffer2]); //串行写入一个字节到595
OUT2_595(); //数据输入到锁存器
delay1(500);
}
}
程序如上
现在有个问题就是显示不了十位。假如我要显示15,那么它就显示55;我要显示36,那么他就显示66.反正就是两位数码管都是显示个位的数。。用的是野火的ISO-MINI V2的板子实验!
请问这是怎么回事???麻烦各位帮我看下,万分感谢!
|
|