本帖最后由 呼呼呼氣 于 2020-11-15 13:07 編輯
這是我基于STM32做出的超聲波測(cè)距,顯示屏是LCD12864
main.c
#include "stm32f10x.h"
#include "led.h"
#include "SysTick.h"
//#include "ultrasonic.h"
#include "usart.h"
#include <stdio.h>
#include "chaoshengbo.h"
#include "lcd.h"
#include "lcd_function.h"
//void key_menu_1(void);
volatile u32 count,Distance0,Distance1;
uint8_t aa[10];//打印AD值的一個(gè)字符串?dāng)?shù)組
char length;
int main(void)
{
write_com(0x01);
delay_us(100);
hcsr04_NVIC();
Hcsr04Init();
USART1_Init();
LCD12864Configuration();
// printf("串口初始化成功!\n");
//
// Hcsr04Init();
// printf("超聲波初始化成功!\n");//測(cè)試程序是否卡在下面兩句上面
//
Hcsr04GetLength();
// printf("距離為:%.3f\n",length);
while ( 1 )
{
length = Hcsr04GetLength(); //計(jì)算出實(shí)際電壓值
sprintf((char*)aa,"%.2d ",length); //sprintf的作用是將一個(gè)格式化的字符串輸出到一個(gè)目的字符串中,而printf是將一個(gè)格式化的字符串輸出到屏幕
chaoshenbo_LCDdisplay(); //顯示一些基本信息
display_str(3,4,aa); //顯示sprintf函數(shù)的aa字符串?dāng)?shù)組
Delay_Ms(100);
}
}
//void key_menu_1(void)
//{
// length = Hcsr04GetLength(); //計(jì)算出實(shí)際電壓值
// sprintf((char*)aa,"%.2d ",length); //sprintf的作用是將一個(gè)格式化的字符串輸出到一個(gè)目的字符串中,而printf是將一個(gè)格式化的字符串輸出到屏幕
// chaoshenbo_LCDdisplay(); //顯示一些基本信息
// display_str(3,4,aa); //顯示sprintf函數(shù)的aa字符串?dāng)?shù)組
// Delay_Ms(100);
//}
#include "chaoshengbo.h"
u16 msHcCount = 0;//ms計(jì)數(shù)
void Hcsr04Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //生成用于定時(shí)器設(shè)置的結(jié)構(gòu)體
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(HCSR04_CLK, ENABLE);
//IO初始化
GPIO_InitStructure.GPIO_Pin =HCSR04_TRIG; //發(fā)送電平引腳
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽輸出
GPIO_Init(HCSR04_PORT, &GPIO_InitStructure);
GPIO_ResetBits(HCSR04_PORT,HCSR04_TRIG);
GPIO_InitStructure.GPIO_Pin = HCSR04_ECHO; //返回電平引腳
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空輸入
GPIO_Init(HCSR04_PORT, &GPIO_InitStructure);
GPIO_ResetBits(HCSR04_PORT,HCSR04_ECHO);
//定時(shí)器初始化 使用基本定時(shí)器TIM6
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); //使能對(duì)應(yīng)RCC時(shí)鐘
//配置定時(shí)器基礎(chǔ)結(jié)構(gòu)體
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period = (1000-1); //設(shè)置在下一個(gè)更新事件裝入活動(dòng)的自動(dòng)重裝載寄存器周期的值 計(jì)數(shù)到1000為1ms
TIM_TimeBaseStructure.TIM_Prescaler =(72-1); //設(shè)置用來作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值 1M的計(jì)數(shù)頻率 1US計(jì)數(shù)
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//不分頻
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計(jì)數(shù)模式
TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位
TIM_ClearFlag(TIM6, TIM_FLAG_Update); //清除更新中斷,免得一打開中斷立即產(chǎn)生中斷
TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE); //打開定時(shí)器更新中斷
hcsr04_NVIC();
TIM_Cmd(TIM6,DISABLE);
}
//tips:static函數(shù)的作用域僅限于定義它的源文件內(nèi),所以不需要在頭文件里聲明
static void OpenTimerForHc() //打開定時(shí)器
{
TIM_SetCounter(TIM6,0);//清除計(jì)數(shù)
msHcCount = 0;
TIM_Cmd(TIM6, ENABLE); //使能TIMx外設(shè)
}
static void CloseTimerForHc() //關(guān)閉定時(shí)器
{
TIM_Cmd(TIM6, DISABLE); //使能TIMx外設(shè)
}
//NVIC配置
void hcsr04_NVIC(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn; //選擇串口1中斷
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //搶占式中斷優(yōu)先級(jí)設(shè)置為1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //響應(yīng)式中斷優(yōu)先級(jí)設(shè)置為1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中斷
NVIC_Init(&NVIC_InitStructure);
}
//定時(shí)器6中斷服務(wù)程序
void TIM6_IRQHandler(void) //TIM3中斷
{
if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET) //檢查TIM3更新中斷發(fā)生與否
{
TIM_ClearITPendingBit(TIM6, TIM_IT_Update ); //清除TIMx更新中斷標(biāo)志
msHcCount++;
}
}
//獲取定時(shí)器時(shí)間
u32 GetEchoTimer(void)
{
u32 t = 0;
t = msHcCount*1000;//得到MS
t += TIM_GetCounter(TIM6);//得到US
TIM6->CNT = 0; //將TIM2計(jì)數(shù)寄存器的計(jì)數(shù)值清零
Delay_Ms(50);
return t;
}
chaoshengbo.c
//一次獲取超聲波測(cè)距數(shù)據(jù) 兩次測(cè)距之間需要相隔一段時(shí)間,隔斷回響信號(hào)
//為了消除余震的影響,取五次數(shù)據(jù)的平均值進(jìn)行加權(quán)濾波。
float Hcsr04GetLength(void)
{
u32 t = 0;
int i = 0;
float lengthTemp = 0;
float sum = 0;
while(i!=5)
{
TRIG_Send = 1; //發(fā)送口高電平輸出
Delay_Us(20);
TRIG_Send = 0;
while(ECHO_Reci == 0); //等待接收口高電平輸出
OpenTimerForHc(); //打開定時(shí)器
i = i + 1;
while(ECHO_Reci == 1);
CloseTimerForHc(); //關(guān)閉定時(shí)器
t = GetEchoTimer(); //獲取時(shí)間,分辨率為1US
lengthTemp = ((float)t/58.0);//cm
sum = lengthTemp + sum ;
}
lengthTemp = sum/5.0;
return lengthTemp;
}
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
** 函數(shù)名稱: Delay_Ms_Ms
** 功能描述: 延時(shí)1MS (可通過仿真來判斷他的準(zhǔn)確度)
** 參數(shù)描述:time (ms) 注意time<65535
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
void Delay_Ms(uint16_t time) //延時(shí)函數(shù)
{
uint16_t i,j;
for(i=0;i<time;i++)
for(j=0;j<10260;j++);
}
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
** 函數(shù)名稱: Delay_Ms_Us
** 功能描述: 延時(shí)1us (可通過仿真來判斷他的準(zhǔn)確度)
** 參數(shù)描述:time (us) 注意time<65535
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
void Delay_Us(uint16_t time) //延時(shí)函數(shù)
{
uint16_t i,j;
for(i=0;i<time;i++)
for(j=0;j<9;j++);
}
lcd.c
#include "lcd.h"
//******************************************************************
//us函數(shù)
void delay_us(uint16_t us)
{
uint16_t i;
for(i=0;i<us;i++)
for(i=0;i<1000;i++)
{;}
}
//******************************************************************
//ms函數(shù)
void delay_ms(uint16_t ms)
{
uint16_t i,j,k;
for(k=0;k<ms;k++)
for(i=0;i<1000;i++)
for(j=0;j<50;j++)
{;}
}
//******************************************************************
//忙標(biāo)志位檢測(cè)函數(shù)
void Check_Busy(void)
{
RS=0;
RW=1;
EN=1;
GPIOA->ODR|=0xff;
while((GPIOA->ODR&0x80)==0x80);
EN=0;
}
//******************************************************************
//寫命令函數(shù)
void write_com(unsigned char com)
{
// Check_Busy();
delay_ms(1);
RS=0;delay_us(10);
RW=0;delay_us(10);
EN=1;delay_us(10);
GPIO_Write(GPIOA,com); delay_ms(1);
//DataPort->ODR|=(com<<8); delay_ms(100);
EN=0;delay_us(100);
}
//******************************************************************
//寫數(shù)據(jù)函數(shù)
void write_data(unsigned char ddata)
{
// Check_Busy();
delay_ms(1);
RS=1;delay_us(10);
RW=0;delay_us(10);
EN=1;delay_us(10);
GPIO_Write(GPIOA,ddata);delay_ms(1);
// DataPort->ODR|=(ddata<<8);delay_ms(100);
EN=0;delay_us(10);
}
//******************************************************************
//顯示位置換算函數(shù)
void LCD_set_xy(unsigned char x,unsigned int y)
{
unsigned char addr;
switch(x)
{
case 1: addr=0x80+y;break;
case 2: addr=0x90+y;break;
case 3: addr=0x88+y;break;
case 4: addr=0x98+y;break;
default : break;
}
write_com(addr);//寫命令
}
//******************************************************************
//顯示初始化函數(shù)
void LCD_init(void)
{
write_com(0x34);
delay_us(10);
write_com(0x30);
delay_us(10);
write_com(0x0c);
delay_us(10);
write_com(0x01);
delay_us(10);
}
////////////////////////////////////////////
void LCD12864Configuration(void)//IO初始化
{
GPIO_InitTypeDef GPIO;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOA, ENABLE);
GPIO.GPIO_Pin = RS_Pin | RW_Pin | EN_Pin;
GPIO.GPIO_Speed = GPIO_Speed_50MHz;
GPIO.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO);
//八位數(shù)據(jù)口, PA0 ~ PA7
GPIO.GPIO_Pin = 0xFF;
GPIO.GPIO_Speed = GPIO_Speed_50MHz;
GPIO.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO);
LCD_init();
}
lcd_function.c
#include "lcd_function.h"
#include "usart.h"
extern uint16_t aa[10];
//******************************************************************
//顯示漢字、字符函數(shù)
void display_str(unsigned char x,unsigned char y,unsigned char *str)
{
LCD_set_xy(x,y);
while(*str)
{
write_data(*str);
str++;
delay_ms(5);
}
}
//顯示函數(shù)
void LCD_Wmessage(uint8_t* message,uint8_t address)
{
write_com(address);//要顯示的位置
while(*message>0)//判斷內(nèi)容有沒有發(fā)完
{
write_data(*message); //內(nèi)核還是發(fā)字節(jié)函數(shù)
message++; //慢慢發(fā)完一串指針
}
}
/******************************************************************************/
// 函數(shù)名稱:Lcd12864_Brush_Screen_Dark
// 輸入?yún)?shù):無
// 輸出參數(shù):無
// 函數(shù)功能:全部寫0(128*64個(gè)點(diǎn))
//上半屏是32個(gè)行地址(00H-31H)x 8個(gè)列地址(00H-07H)
//上半屏是32個(gè)行地址(00H-31H)x 8個(gè)列地址(08H-0FH)
/******************************************************************************/
void Lcd12864_Brush_Screen_Dark(void){
uint8_t col,cnt;
uint16_t num=0;
for(col=0;col<32;col++){
write_com(0x34);//寫命令(擴(kuò)充指令集)
write_com(0x80+col);//列地址
write_com(0x80); //行地址,上半屏,即第一行地址0X80
write_com(0x30);//寫命令(基本指令集)
for(cnt=0;cnt<16;cnt++)
write_data(0x00);//讀取數(shù)據(jù)寫入LCD
num+=16;
}
for(col=0;col<32;col++){
write_com(0x34);//寫命令
write_com(0x80+col);//列地址
write_com(0x80+8); //行地址,下半屏,即第三行地址0X88
write_com(0x30);
for(cnt=0;cnt<16;cnt++)
write_data(0x00);//讀取數(shù)據(jù)寫入LCD
num+=16;
}
write_com(0x36); //擴(kuò)充功能設(shè)定
write_com(0x30);//基本功能設(shè)定
}
/******************************************************************************/
//128*64點(diǎn)陣圖形數(shù)據(jù)
/******************************************************************************/
const uint32_t imageTable[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0xFC,0x00,0xFF,0xFF,0x80,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x07,0xFF,0x8F,0xFF,0x7F,0xF0,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x0F,0xFF,0xFF,0x80,0x00,0x7F,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x1F,0xFF,0xFC,0x00,0x00,0x0F,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x3F,0xFF,0xE0,0x00,0x00,0x03,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x3F,0xFF,0x80,0x00,0x00,0x00,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
0x7F,0xFF,0x00,0x00,0x00,0x00,0x3F,0xFF,0x80,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
0x7F,0xFE,0x00,0x00,0x00,0x00,0x1F,0xFF,0x80,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
0x7F,0xF8,0x00,0x00,0x00,0x00,0x0F,0xFF,0x80,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
0x7F,0xF8,0x00,0x00,0x00,0x00,0x07,0xFF,0x83,0xF8,0x3F,0x0F,0xE0,0xFF,0x0F,0xC0,
0x7F,0xE0,0x00,0x00,0x00,0x00,0x03,0xFF,0x83,0xFC,0x7F,0x8F,0xF1,0xFF,0x1F,0xE0,
0x3F,0xE0,0x00,0x00,0x00,0x00,0x01,0xFF,0x83,0x8C,0x01,0x8E,0x73,0x03,0x18,0x60,
0x3F,0xC0,0x00,0x00,0x00,0x00,0x01,0xFE,0x03,0x0C,0x01,0x8C,0x33,0x03,0x18,0x60,
0x3F,0xC0,0x00,0x00,0x00,0x00,0x01,0xFE,0x03,0x0C,0x01,0x8C,0x33,0x03,0x18,0x60,
0x3F,0x80,0x0F,0x00,0x00,0x1C,0x00,0xFE,0x03,0x0C,0x3F,0x8C,0x33,0x03,0x0F,0xE0,
0x1F,0x80,0x3F,0x80,0x00,0x7E,0x00,0xFC,0x03,0x0C,0x7F,0x8C,0x33,0x03,0x1F,0xE0,
0x0F,0x80,0xFF,0xC0,0x00,0xFF,0x80,0xF8,0x03,0x0C,0xE1,0x8C,0x33,0x03,0x38,0x60,
0x07,0x01,0xFF,0xC0,0x00,0xFF,0xC0,0x70,0x03,0x0C,0xE1,0x8C,0x33,0x03,0x38,0xE0,
0x03,0x03,0xFF,0xE0,0x01,0xFF,0xE0,0x60,0x03,0xFC,0xFF,0x8C,0x31,0xFF,0x3D,0xE0,
0x03,0x03,0xFF,0xE0,0x00,0xFF,0xE0,0x60,0x03,0xFC,0x7F,0x8C,0x30,0xFF,0x1F,0xE0,
0x03,0x07,0xF1,0xC0,0x00,0xF7,0xF0,0x60,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x03,0x07,0xFF,0xC0,0x00,0xFF,0xF8,0x60,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x03,0x0F,0xFF,0xC0,0x00,0xFF,0xF8,0x60,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x03,0x0F,0xFF,0x80,0x00,0xFF,0xF8,0x60,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x03,0x0F,0xFF,0x81,0xC0,0x7F,0xF8,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x03,0x0F,0xFF,0x83,0xF8,0x7F,0xF8,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x03,0x8F,0xFF,0x07,0xF8,0x7F,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x87,0xFF,0x07,0xF8,0x3F,0xF8,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x87,0xFE,0x03,0xF0,0x1F,0xF1,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0xC3,0xFC,0x00,0x80,0x0F,0xE1,0x81,0x80,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
0x00,0xC0,0xE0,0x00,0x00,0x07,0xC1,0x81,0x80,0x0E,0x00,0x00,0x10,0x00,0x3F,0xF0,
0x00,0x60,0x00,0x00,0x00,0x00,0x03,0x03,0x30,0x06,0x0C,0x00,0x10,0x00,0x00,0x60,
0x00,0x70,0x00,0x00,0x00,0x00,0x07,0x06,0x18,0x02,0x07,0x00,0x10,0x00,0x00,0x40,
0x00,0x30,0x00,0x00,0x00,0x00,0x0E,0x0F,0xFC,0x00,0x03,0x01,0xFF,0x00,0x00,0x80,
0x00,0x1C,0x00,0x00,0x00,0x00,0x1C,0x00,0x80,0x00,0x03,0x09,0x11,0x00,0x01,0x00,
0x00,0x0E,0x00,0x00,0x00,0x00,0x38,0x01,0x00,0x1F,0x40,0x11,0x11,0x00,0x01,0x00,
0x00,0x07,0x80,0x00,0x00,0x01,0xF0,0x7F,0xFE,0x02,0x20,0x21,0xFF,0x00,0xFF,0xFE,
0x00,0x01,0xF0,0x00,0x00,0x07,0xC0,0x06,0x10,0x02,0x10,0x41,0x11,0x00,0x01,0x00,
0x00,0x00,0xFF,0xC0,0x00,0x7F,0x80,0x0C,0x08,0x02,0x08,0x81,0x11,0x00,0x01,0x00,
0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x80,0x1B,0xE4,0x02,0x45,0x01,0xFF,0x00,0x01,0x00,
0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x80,0x70,0x03,0x82,0x82,0x00,0x10,0x00,0x01,0x00,
0x00,0x00,0xFF,0xE0,0x01,0xFF,0x80,0xC0,0x00,0x03,0x85,0x00,0x10,0x10,0x09,0x00,
0x00,0x00,0xFF,0xE0,0x01,0xFF,0x80,0x07,0xF8,0x03,0x08,0x80,0x10,0x10,0x05,0x00,
0x00,0x00,0x7F,0xE0,0x01,0xFF,0x80,0x00,0x00,0x03,0x10,0x40,0x10,0x10,0x03,0x00,
0x00,0x00,0x6F,0xC0,0x01,0xFD,0x80,0x00,0x00,0x03,0x20,0x20,0x1F,0xF0,0x01,0x00,
0x00,0x00,0x6F,0xC0,0x01,0xFD,0x80,0x3F,0xFE,0x02,0x40,0x1C,0x00,0x00,0x00,0x00,
0x00,0x00,0x60,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x60,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0xD8,0x00,0x00,0x00,0x00,
0x00,0x00,0x70,0x00,0x00,0x03,0x00,0x00,0x00,0x0C,0x00,0xD8,0x00,0x00,0x00,0x00,
0x00,0x00,0x30,0x00,0x00,0x07,0x00,0x00,0x00,0x0C,0x00,0xD8,0x00,0x00,0x00,0x00,
0x00,0x00,0x3C,0x00,0x00,0x0E,0x1F,0x9F,0x8F,0xDC,0x78,0xD9,0x80,0xF8,0xF1,0xFF,
0x00,0x00,0x3F,0x00,0x00,0x5E,0x1F,0x9F,0x8F,0xDE,0xFC,0xDB,0x81,0xFD,0xFD,0xFF,
0x00,0x00,0x1F,0x80,0x00,0x7E,0x19,0x99,0x8C,0xCC,0xCC,0xDF,0x01,0x8D,0x8D,0x99,
0x00,0x00,0x1F,0xFF,0xDF,0xFC,0x19,0x99,0x8C,0xCC,0x0C,0xDE,0x01,0x81,0x8D,0x99,
0x00,0x00,0x1F,0xFF,0xFF,0xFC,0x19,0x99,0x8C,0xCC,0xFC,0xDF,0x01,0x81,0x8D,0x99,
0x00,0x00,0x0F,0xF4,0x07,0xFC,0x19,0x99,0x8C,0xCC,0xCC,0xDB,0x01,0x8D,0x8D,0x99,
0x00,0x00,0x0F,0xF0,0x03,0xF8,0x19,0x99,0x8C,0xCC,0xCC,0xD9,0x99,0x8D,0x8D,0x99,
0x00,0x00,0x03,0xF0,0x01,0xF0,0x1F,0x9F,0x8F,0xCE,0xFC,0xD9,0x98,0xFC,0xF9,0x99,
0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
/******************************************************************************/
// 函數(shù)名稱:Lcd12864_Show_Image
// 輸入?yún)?shù):無
// 輸出參數(shù):無
// 函數(shù)功能:顯示圖片
/******************************************************************************/
void Lcd12864_Show_Image(void){
// uint8_t x,y,i;
// uint16_t tmp=0;
// for(i=0;i<9;){ //分兩屏,上半屏和下半屏,因?yàn)槠鹗嫉刂凡煌枰珠_
// for(x=0;x<32;x++){ //32行
// write_com(0x34);
// write_com(0x80+x);//列地址
// write_com(0x80+i); //行地址,下半屏,即第三行地址0X88
// write_com(0x30);
// for(y=0;y<16;y++)
// {
// write_data(imageTable[tmp+y]);//讀取數(shù)據(jù)寫入LCD
// tmp+=16;
// }
// }
// i+=8;
// }
// write_com(0x36); //擴(kuò)充功能設(shè)定
// write_com(0x30);
uint8_t a,b,c;
uint16_t temp;
a=0;
for(b=0;b<32;b++) //給LCD的上或者下半屏的32行寫數(shù)據(jù)
{
write_com(0x34);//寫指令,擴(kuò)充指令集
write_com(0x80+a);//將屏幕的首地址0x80,確定行地址,從第一行開始
write_com(0x80+b);//確定列地址
write_com(0x34);//寫指令,基本指令集
for(c=0;c<16;c++)//將數(shù)組的里的8位數(shù)據(jù)寫入128/8=16每行包含的16個(gè)數(shù)據(jù)位里
{
write_data(imageTable[temp+c]);//
}
temp+=16;//temp+=16 等價(jià)于temp=temp+16
}
a=8;//a+=b 等價(jià)于a=a+b
}
void chaoshenbo_LCDdisplay(void)//顯示AD電壓
{
display_str(1,0," 超聲波采集界面");
display_str(3,0,"距離值:");
display_str(3,7,"CM");
}
//******************************************************************
////顯示數(shù)字函數(shù)
//void display_data(unsigned char x,unsigned char y, unsigned int dat)
//{
// LCD_set_xy(x,y);
// delay_ms(1);
// write_data(dat+0x30);
// delay_ms(1);
//// write_data(dat/1000+0x30);
//// delay_ms(1);
//// write_data(dat%1000/100+0x30);
//// delay_ms(1);
//// write_data(dat%100/10+0x30);
//// delay_ms(1);
//// write_data(dat%10+0x30);
//// delay_ms(1);
//// write_data(' ');
//// delay_ms(1);
//}
//void ADC_LCDdisplay(void)//顯示AD電壓
//{
//
//
// dianya = (ADC_ConverValue/4096*3.3)*1000;//計(jì)算出AD轉(zhuǎn)換后的電壓值乘以1000方便取位
//
//// disbuff[1]= dianya / 1000; //個(gè)位
//// disbuff[2] = (dianya % 1000) / 100; //小數(shù)一位
//// disbuff[3] = ((dianya % 1000) % 100) / 10; //小數(shù)二位
//// disbuff[4]= ((dianya % 1000) % 100) % 10; //小數(shù)三位
//}
|