论坛元老
 
- 积分
- 3275
- 金钱
- 3275
- 注册时间
- 2013-9-21
- 在线时间
- 281 小时
|

楼主 |
发表于 2014-4-8 06:41:56
|
显示全部楼层
回复【13楼】正点原子:
---------------------------------
原子哥我贴上完整代码求助方法都试过了只好打扰你了
以下救世主程序的代码其他的都是用你的IIC.c.h和24CXX.c.h修改IO的部分前面已经贴出来了其他的都一样拜托了
#include "stm32f10x.h"
#include "sys.h"
#include "delay.h"
#include "24cxx.h"
/*------------------------------------------------------------
端口定义
------------------------------------------------------------*/
#define LATCH1 (1<<8)//
#define LATCH2 (1<<9)//
#define LATCH1_SET(x) GPIOB->ODR=(GPIOB->ODR&~LATCH1)|(x ? LATCH1:0)
#define LATCH2_SET(x) GPIOB->ODR=(GPIOB->ODR&~LATCH2)|(x ? LATCH2:0)
#define DataPort(x) GPIOA->ODR=(GPIOA->ODR&0xffffff00)|(x&0xff);//定义8位数据操作端口
#define KEY0 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)//读取启动按键
#define KEY1 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)//读取按键1
#define KEY2 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)//读取按键2
unsigned char const dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//
unsigned char const dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//
unsigned char TempData[8]; //存储显示值的全局变量
void Display(unsigned char FirstBit,unsigned char Num);
void TIM3_Int_Init(u16 arr,u16 psc);
unsigned char num=0;
/*------------------------------------------------
主函数
------------------------------------------------*/
int main()
{
unsigned int ai=0;
unsigned int key_press_num;
unsigned int i=0;
unsigned int j=0;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB , ENABLE); //使能GPIOD
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_ResetBits(GPIOB,GPIO_Pin_10);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13;//控制KEY
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB11-12
AFIO->MAPR = (0x00FFFFFF & AFIO->MAPR)|0x04000000; //关闭JTAG
delay_init();
NVIC_Configuration();
TIM3_Int_Init(9,719);
AT24CXX_Read(0,&num,1);
while(1)
{
if(KEY0==0)
{
while(1)
{
i++;
if(i==2000000)
{
i=0;
if(num>0)//用于显示0~99
{
num--;
}
if(num==0)
{
num=ai;//必须在倒数值为0时才可给回归指令
break;
}
}
}
}
if(!KEY1)
{
delay_us(600);
if(!KEY1)
{
delay_us(300);
while(!KEY1)
{
key_press_num++;
delay_ms(1);
if(key_press_num==10000)
{
key_press_num=0;
while(!KEY1)
{
j++;
if(j==50000)
{
j=0;
if(num<99)
num++;
TempData[0]=dofly_DuanMa[num/10];
TempData[1]=dofly_DuanMa[num%10];
delay_us(200);
}
}
}
}
key_press_num=0;
if(num<99)
num++;
AT24CXX_Write(0,&num,1);
delay_ms(10);
ai=num;
}
}
if(!KEY2)
{
delay_us(600);
if(!KEY2)
{
delay_us(300);
while(!KEY2)
{
key_press_num++;
delay_ms(1);
if(key_press_num==10000)
{
key_press_num=0;
while(!KEY2)
{
j++;
if(j==50000)
{
j=0;
if(num>0)
num--;
TempData[0]=dofly_DuanMa[num/10];
TempData[1]=dofly_DuanMa[num%10];
delay_us(200);
}
}
}
}
key_press_num=0;
if(num>0)
num--;
AT24CXX_Write(0,&num,1);
delay_ms(10);
ai=num;
}
}
}
}
void Display(unsigned char FirstBit,unsigned char Num)
{
unsigned char i;
for(i=0;i<Num;i++)
{
DataPort(0); //清空数据,防止有交替重影
LATCH1_SET(1); //段锁存
LATCH1_SET(0);
DataPort(dofly_WeiMa[i+FirstBit]); //个位数码
LATCH2_SET(1); //锁存
LATCH2_SET(0);
DataPort(TempData); //段码
LATCH1_SET(1); //锁存
LATCH1_SET(0);
delay_us(20);//调整数码管十位数的明暗度(太高会造成显示不跳动)
}
}
void TIM3_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
TIM_TimeBaseStructure.TIM_Period = arr;
TIM_TimeBaseStructure.TIM_Prescaler =psc;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM3, ENABLE);
}
void TIM3_IRQHandler(void)
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update );
TempData[0]=dofly_DuanMa[num/10];
TempData[1]=dofly_DuanMa[num%10];
Display(2,2);
}
}
|
|