找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3433|回复: 2
上一主题 下一主题
收起左侧

STM32F103ZET6芯片的ADC采集方波信号求占空比并显示在lcd上源程序

[复制链接]
跳转到指定楼层
楼主
**
  ******************************************************************************
  * @file    main.c
  * @author  fire
  * @version V1.0
  * @date    2013-xx-xx
  * @brief   液晶显示汉字实验(字库在外部FLASH)
  ******************************************************************************
  * @attention
  *

  *
  ******************************************************************************
  */

#include "stm32f10x.h"        
#include "bsp_ili9341_lcd.h"
#include "./flash/bsp_spi_flash.h"
#include "bsp_led.h"
#include "bsp_AdvanceTim.h"
#include "bsp_GeneralTim.h"
#include "bsp_usart.h"

static void LCD_Test(void);        
static void Delay ( __IO uint32_t nCount );

void Printf_Charater(void)   ;

extern uint16_t Count_flag;
//extern __align(8) float  show_DutyCycle ;
//extern __align(8) float  show_Frequency ;
extern float  show_DutyCycle ;
extern float  show_Frequency ;
u8 dispBuff[100];
int main(void)
{        
        
                //LCD 初始化
        ILI9341_Init ();         
  /* USART config */
        USART_Config();  
        
        ILI9341_GramScan ( 6 );
        
        //Printf_Charater();
        /* 通用定时器初始化,用于生成PWM信号 */
        GENERAL_TIM_Init();
        
        /* 高级定时器初始化 ,用户捕获PWM信号*/
        ADVANCE_TIM_Init();
        

  while(1)
  {
                if(Count_flag==1)
                {
                        LCD_SetFont(&Font8x16);
                        LCD_SetColors(RED,BLACK);
        
                        //ILI9341_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH);        /* 清屏,显示全黑 */
                        /********显示字符串示例*******/
                        LCD_SetTextColor(GREEN);
                  //sprintf( dispBuff,"占空比:%0.2f%%   频率:%0.2fHz\n",show_DutyCycle,show_Frequency);
                        sprintf( (char*)dispBuff,"占空比:%0.2f%%",show_DutyCycle);
                        LCD_ClearLine(LINE(5));        /* 清除单行文字 */
                        /*然后显示该字符串即可,其它变量也是这样处理*/
                        ILI9341_DispStringLine_EN_CH(LINE(5),(char*)dispBuff);
                        Count_flag=0;
                }
                //LCD_Test();     
  }
}
//        printf("\r\n ********** 液晶屏中文显示程序(字库在外部FLASH)*********** \r\n");
//        printf("\r\n 若汉字显示不正常,请阅读工程中的readme.txt文件说明,根据要求给FLASH重刷字模数据\r\n");

// //其中0、3、5、6 模式适合从左至右显示文字,
// //不推荐使用其它模式显示文字        其它模式显示文字会有镜像效果                        
// //其中 6 模式为大部分液晶例程的默认显示方向  
//        ILI9341_GramScan ( 6 );
//        
//        Printf_Charater();
//        
//        while ( 1 )
//        {
//                ;
//        }
//        
//        
//}



///*用于测试各种液晶的函数*/
void LCD_Test(void)
{
        /*演示显示变量*/
        static uint8_t testCNT = 0;        
        char dispBuff[100];
        
        testCNT++;        
        
        LCD_SetFont(&Font8x16);
        LCD_SetColors(RED,BLACK);

  ILI9341_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH);        /* 清屏,显示全黑 */
        /********显示字符串示例*******/
  ILI9341_DispStringLine_EN_CH(LINE(0),"秉火3.2寸LCD参数:");
  ILI9341_DispStringLine_EN_CH(LINE(1),"分辨率:240x320 px");
  ILI9341_DispStringLine_EN_CH(LINE(2),"ILI9341液晶驱动");
  ILI9341_DispStringLine_EN_CH(LINE(3),"XPT2046触摸屏驱动");

        /********显示变量示例*******/
        LCD_SetTextColor(GREEN);

        /*使用c标准库把变量转化成字符串*/
        sprintf(dispBuff,"显示变量: %d ",testCNT);
  LCD_ClearLine(LINE(5));        /* 清除单行文字 */
        
        /*然后显示该字符串即可,其它变量也是这样处理*/
        ILI9341_DispStringLine_EN_CH(LINE(5),dispBuff);

        /*******显示图形示例******/
  /* 画直线 */

  LCD_ClearLine(LINE(7));/* 清除单行文字 */
        LCD_SetTextColor(BLUE);

  ILI9341_DispStringLine_EN_CH(LINE(7),"画直线:");

        LCD_SetTextColor(RED);
  ILI9341_DrawLine(50,170,210,230);  
  ILI9341_DrawLine(50,200,210,240);

        LCD_SetTextColor(GREEN);
  ILI9341_DrawLine(100,170,200,230);  
  ILI9341_DrawLine(200,200,220,240);
        
        LCD_SetTextColor(BLUE);
  ILI9341_DrawLine(110,170,110,230);  
  ILI9341_DrawLine(130,200,220,240);

  Delay(0xFFFFFF);

  ILI9341_Clear(0,16*8,LCD_X_LENGTH,LCD_Y_LENGTH-16*8);        /* 清屏,显示全黑 */


  /*画矩形*/

  LCD_ClearLine(LINE(7));        /* 清除单行文字 */
        LCD_SetTextColor(BLUE);

  ILI9341_DispStringLine_EN_CH(LINE(7),"画矩形:");

        LCD_SetTextColor(RED);
  ILI9341_DrawRectangle(50,200,100,30,1);
        
        LCD_SetTextColor(GREEN);
  ILI9341_DrawRectangle(160,200,20,40,0);
        
        LCD_SetTextColor(BLUE);
  ILI9341_DrawRectangle(170,200,50,20,1);

  Delay(0xFFFFFF);
        
        ILI9341_Clear(0,16*8,LCD_X_LENGTH,LCD_Y_LENGTH-16*8);        /* 清屏,显示全黑 */

  /* 画圆 */
  LCD_ClearLine(LINE(7));        /* 清除单行文字 */
        LCD_SetTextColor(BLUE);
        
  ILI9341_DispStringLine_EN_CH(LINE(7),"画圆");
        
        LCD_SetTextColor(RED);
  ILI9341_DrawCircle(100,200,20,0);
        
        LCD_SetTextColor(GREEN);
  ILI9341_DrawCircle(100,200,10,1);
        
        LCD_SetTextColor(BLUE);
        ILI9341_DrawCircle(140,200,20,0);

  Delay(0xFFFFFF);

  ILI9341_Clear(0,16*8,LCD_X_LENGTH,LCD_Y_LENGTH-16*8);        /* 清屏,显示全黑 */

}


/**
  * @brief  简单延时函数
  * @param  nCount :延时计数值
  * @retval 无
  */        
static void Delay ( __IO uint32_t nCount )
{
  for ( ; nCount != 0; nCount -- );
        
}



/*"当"字符的字模16x16 */           
unsigned char charater_matrix[] =   
{ /*"当",0*/
0x01,0x00,0x21,0x08,0x11,0x08,0x09,0x10,0x09,0x20,0x01,0x00,0x7F,0xF8,0x00,        0x08,
0x00,0x08,0x00,0x08,0x3F,0xF8,0x00,0x08,0x00,0x08,0x00,0x08,0x7F,0xF8,0x00,0x08,

};   

/**
  * @brief  使用串口在上位机打印字模
        *                                        演示字模显示原理
  * @retval 无
  */
void Printf_Charater(void)   
{   
        int i,j;   
        unsigned char kk;

        /*i用作行计数*/
  for ( i=0;i<16;i++)   
        {   
                /*j用作一字节内数据的移位计数*/
                /*一行像素的第一个字节*/
    for(j=0; j<8; j++)   
    {      
                        /*一个数据位一个数据位地处理*/
      kk = charater_matrix[2*i] << j ;  //左移J位         
                        if( kk & 0x80)     
                        {   
                                printf("*"); //如果最高位为1,输出*号,表示笔迹
                        }   
                        else  
                        {   
                                printf(" "); //如果最高位为0,输出空格,表示空白  
                        }   
    }   
                /*一行像素的第二个字节*/
    for(j=0; j<8; j++)   
                {              
      kk = charater_matrix[2*i+1] << j ;  //左移J位   

                        if( kk & 0x80)         
                        {   
                                printf("*"); //如果最高位为1,输出*号,表示笔迹   
                        }   
                        else  
                        {   
                                printf(" "); //如果最高位为0,输出空格,表示空白
                        }   
                }         
    printf("\n");    //输出完一行像素,换行
        }   
        printf("\n\n");                 //一个字输出完毕
}   



/* ------------------------------------------end of file---------------------------------------- */


基于STM32F103ZET6芯片的ADC采集方波信号求占空比并显示在lcd上

全部资料51hei下载地址:
求脉冲信号占空比并显示.7z (227.17 KB, 下载次数: 37)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2019-6-2 06:03 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

板凳
ID:290305 发表于 2019-7-17 18:26 | 只看该作者
,资料不能用
回复

使用道具 举报

地板
ID:583948 发表于 2019-7-18 17:39
不能用

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

本版积分规则

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

Powered by 单片机教程网

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