⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 基于EK—STM32开发板的LCD驱动编程实现
💻 C
字号:
/******************************************************************
   本程序只供学习使用,未经作者许可,不得用于其它任何用途

        欢迎访问我的USB专区:http://group.ednchina.com/93/
        欢迎访问我的blog:   http://www.ednchina.com/blog/computer00
                             http://computer00.21ic.org

main.c  file

作者:Computer-lov
建立日期: 2008.07.12
修改日期: 2008.07.29
版本:V1.2
版权所有,盗版必究。
Copyright(C) Computer-lov 2008-2018
All rights reserved            
*******************************************************************/

#include "GPIO.H"
#include "RCC.H"
#include "USART.H"
#include "LCD.h"

#define FLASH_ACR (*((unsigned int *)(0x40022000 + 0x00)))

void Delay(void) //延时函数
{
 unsigned int i;
 for(i=0;i<2150;i++);
}

void DelayXms(unsigned int x);

/*****************   延时x毫秒函数 ***********/
void DelayXms(unsigned int x)               
{
 unsigned int i,j;
 for(i=0;i<x;i++)
 for(j=0;j<5150;j++);
}
/********************************************/

//以下时钟配置为最高性能
void SystemClockInit(void)
{
 //设置flash等待周期为2,否则设置为72M系统时钟时就会跑飞
 FLASH_ACR=0x32;  
 
 pbRCC_CR->HSEON=1;          //使能外部高速时钟
 while(!(pbRCC_CR->HSERDY)); //等待外部高速时钟稳定
 pbRCC_CFGR->MCO=0;          //MCO无时钟输出 
 pbRCC_CFGR->USBPRE=1;       //USB时钟1.5分频
 pbRCC_CFGR->PLLMUL=9-2;     //PLL倍频设置为9倍(外部时钟8M,PLL输出72M)
 pbRCC_CFGR->PLLXTPRE=0;     //HSE不分频
 pbRCC_CFGR->PLLSRC=1;       //HSE选作做为PLL时钟源输入
 pbRCC_CFGR->ADCPRE=0;       //ADC时钟2分频
 pbRCC_CFGR->PPRE2=1+2;      //APB2设置为1分频
 pbRCC_CFGR->PPRE1=2+2;      //APB1设置为2分频
 pbRCC_CFGR->HPRE=0;         //AHB无分频
 pbRCC_CR->PLLON=1;          //启动PLL
 while(!(pbRCC_CR->PLLRDY)); //等待PLL稳定
 pbRCC_CFGR->SW=2;           //选择PLL输出为时钟源
 //pbRCC_AHBENR->SRAMEN=1;
 //pbRCC_AHBENR->FLITFEN=1;
 
 //IO口第二功能时钟使能
 pbRCC_APB2ENR->AFIOEN=1;
 
 //各通用IO口时钟使能
 pbRCC_APB2ENR->IOPAEN=1;
 pbRCC_APB2ENR->IOPBEN=1;
 pbRCC_APB2ENR->IOPCEN=1;
 pbRCC_APB2ENR->IOPDEN=1;
 pbRCC_APB2ENR->IOPEEN=1;
 
 //ADC时钟使能
 pbRCC_APB2ENR->ADC1EN=1;
 pbRCC_APB2ENR->ADC2EN=1;
 
 //定时器1时钟使能
 pbRCC_APB2ENR->TIM1EN=1;
 
 //SPI1时钟使能
 pbRCC_APB2ENR->SPI1EN=1;
 
 //串口1时钟使能
 pbRCC_APB2ENR->USART1EN=1;
 
 //定时器2、3、4时钟使能
 pbRCC_APB1ENR->TIM2EN=1;
 pbRCC_APB1ENR->TIM3EN=1;
 pbRCC_APB1ENR->TIM4EN=1;
 
 //窗口看门狗时钟不使能
 pbRCC_APB1ENR->WWDGEN=0;

 //SPI2时钟使能
 pbRCC_APB1ENR->SPI2EN=1;

 //串口2、3时钟使能
 pbRCC_APB1ENR->USART2EN=1;
 pbRCC_APB1ENR->USART3EN=1;
 
 //I2C1、2时钟使能
 pbRCC_APB1ENR->I2C1EN=1;
 pbRCC_APB1ENR->I2C2EN=1;
 
 //USB时钟使能
 pbRCC_APB1ENR->USBEN=1;

 //CAN时钟使能
 pbRCC_APB1ENR->CANEN=1;
 
 //备份接口时钟使能
 pbRCC_APB1ENR->BKPEN=1;
 
 //电源接口时钟使能
 pbRCC_APB1ENR->PWREN=1;
 
 //外部低速时钟启动
 pbRCC_BDCR->LSEON=1;
 pbRCC_BDCR->LSEBYP=0;
 pbRCC_BDCR->RTCSEL=1; //选择外部时钟为RTC时钟
}

void main(void)
{
 unsigned char Sec,Min; //保存时钟
 unsigned int ms;

 Sec=0;
 Min=0;
 ms=1000;
 
 SystemClockInit();  //系统时钟模块初始化
 Usart1Init();

 Usart1PutString("System start...\r\n");
 
 LcdInit();
 
 while(1)
 {
  //扫描LCD,这里为了演示,使用软件延时调用。
  //实际使用时,可以开一个2ms的定时器,在定时器
  //中断中调用该函数刷新。
  LcdScan();
  DelayXms(2); //延时2ms
  ms+=2; //每次增加2ms
  if(ms>=1000) //秒到达
  {
   ms=0;
   Sec++;
   if(Sec>=60) //分到达
   {
    Sec=0;
    Min++;
    if(Min>=60) //小时到达
    {
     Min=0;
    }
   }
   LcdSetChar((Min/10)+'0',0,0); //分的高位,注意输入参数为字符0,不是数字
   LcdSetChar((Min%10)+'0',1,1); //分的低位(需要显示小数点,最后一个参数为1)
   LcdSetChar((Sec/10)+'0',2,0); //秒的高位
   LcdSetChar((Sec%10)+'0',3,0); //秒的低位
  }
 }
 //后面的代码不用
 /*
 //4个LED连接在PORTC4~7上,将这4个IO设置为50MHz输出口
 //GPIOC4
 GPIOC_MODE4=3; //50MHz 输出模式
 GPIOC_CNF4=0;  //通用推挽模式
 //GPIOC5
 GPIOC_MODE5=3; //50MHz 输出模式
 GPIOC_CNF5=0;  //通用推挽模式
 //GPIO6
 GPIOC_MODE6=3; //50MHz 输出模式
 GPIOC_CNF6=0;  //通用推挽模式
 //GPIO7
 GPIOC_MODE7=3; //50MHz 输出模式
 GPIOC_CNF7=0;  //通用推挽模式
 //4个LED,当IO口为高电平时LED亮
 while(1)
 {
  GPIOC_CLR=(1<<4); //灭 LED5
  GPIOC_SET=(1<<7); //亮 LED2
  Delay();
  GPIOC_CLR=(1<<7); //灭 LED2
  GPIOC_SET=(1<<6); //亮 LED3
  Delay();
  GPIOC_CLR=(1<<6); //灭 LED3
  GPIOC_SET=(1<<5); //亮 LED4
  Delay();
  GPIOC_CLR=(1<<5); //灭 LED4  
  GPIOC_SET=(1<<4); //亮 LED5
  Delay();
 }*/
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -