找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4539|回复: 2
收起左侧

用STM8做个频率计 数码管动态显示

[复制链接]
ID:151220 发表于 2017-1-6 09:45 | 显示全部楼层 |阅读模式
/* MAIN.C file
*
* Copyright (c) 2002-2005 STMicroelectronics
*/
#include "stm8s207R8.h"
#include "prohead.h"
unsigned long frequency;
unsigned int captureValue1,captureValue2;
unsigned char gewei,shiwei,baiwei,qianwei;
unsigned char dis[]={0xc0,0xf9,0xa4,0xb0,0x99,0x82,0xf8,0x80,0x90};
void TIM1_Init(void);
void CCO_Init(void);
void GPIO_Init(void);
void Display(void);
void Delay(unsigned int t);
void main()
{
unsigned int i;
CLK_CKDIVR = 0x00;
GPIO_Init();
CCO_Init();
TIM1_Init();
while(1)
{
  TIM1_CCER1 |= 0x01;
  while((TIM1_SR1 & 0x02) == 0);
  captureValue1 = (unsigned int)TIM1_CCR1H << 8;
  captureValue1 |= TIM1_CCR1L;
  while((TIM1_SR1 &0x02) ==0);
  captureValue2 = (unsigned int)TIM1_CCR1H << 8;
  captureValue2 |= TIM1_CCR1L;
  TIM1_CCER1 &= 0xfe;
  frequency = (8 * 16000000UL)/(captureValue2 - captureValue1);
  frequency =  frequency/100;
  for(i = 0;i<500;i++) Display();
}
}
void CCO_Init(void)
{
  CLK_CCOR |= 0x02;
  CLK_CCOR |= 0x01;
}

void TIM1_Init(void)
{
  TIM1_CCMR1 |= 0x01;
  TIM1_CCMR1 |= (0x03<<2);
   TIM1_CR1 |= 0x01;
}

void GPIO_Init(void)
{
  PG_ODR = 0xff;
  PG_DDR = 0xff;
  PG_CR1 = 0xff;
  PG_CR2 = 0xff;
  
  PB_ODR = 0xff;
  PB_DDR = 0xff;
  PB_CR1 = 0xff;
  PB_CR2 = 0xff;
  }
void Display(void)
{
qianwei = frequency/1000;
baiwei = (frequency%1000)/100;
shiwei = (frequency%100)/10;
gewei = frequency%10;
PG_ODR = dis[gewei];
PB_ODR = 0x080;
Delay(100);
PB_ODR = 0x00;
PG_ODR = dis[shiwei]&0x7f;
PB_ODR = 0x40;
Delay(100);
PG_ODR = dis[baiwei];
PB_ODR = 0x20;
Delay(100);
PG_ODR = dis[qianwei];
PB_ODR = 0x10;
Delay(100);
PB_ODR = 0x00;
}
void Delay(unsigned int t)
{
while(t--);
}
程序比较简单 就不一一注释啦

回复

使用道具 举报

ID:47634 发表于 2018-2-24 10:37 | 显示全部楼层
这么简单?不懂
回复

使用道具 举报

ID:47634 发表于 2018-3-24 07:41 | 显示全部楼层
这个真的很简单,要好好学学研究
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表