久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
MSP430F4XX系列LCD顯示通用驅動程序
[打印本頁]
作者:
51hei單片
時間:
2016-3-14 18:38
標題:
MSP430F4XX系列LCD顯示通用驅動程序
本程序是《MSP430系列單片機系統工程設計與實踐》書里面的源碼,完整例程下載(包含工程文件 (例4.1.4))):
http://m.zg4o1577.cn/bbs/dpj-46245-1.html
‘
關于本程序的詳細解說大家可以下載電子書點擊上圖即可
/*
MSP430F4XX系列LCD顯示通用驅動程序
說明:該驅動程序庫包含了常用的LCD顯示功能,如顯示數字、字母等
可以作為各種程序的底層驅動使用。
要使用該庫函數,需要將本文件(LCD_Display.c)添加進工程,并在
需要調用顯示函數的文件開頭處包含"LCD_Display.h"
(C)西安電子科技大學 測控技術與儀器教研中心 編寫:謝楷 2008/02/02
*/
//
//
// MSP430F4XX
// +---------------+ Digital Number
// | | 左8+ 7654321右
// | | +----------------------+
// |A0+ S0-S15|--->| SoftBaugh LCD_048 |
// |A0- COM0-COM3|--->| 7.1Digit,4-Mux LCD |
// |P2.0 | +----------------------+
// |P2.1 |
// |VRef R03-R33|<---LCD Voltage Ladder Rs
// | |
// | XIN/XOUT|<---32.768KHz Watch Crystal
// | |
// +---------------+
#include "msp430x42x.h"
/*宏定義,數碼管a-g各段對應的比特,更換硬件只用改動以下8行*/
#define d 0x01 // AAAA
#define g 0x02 // F B
#define b 0x04 // F B
#define a 0x08 // GGGG
#define DOTSEG 0x10 // E C
#define e 0x20 // E C
#define f 0x40 // DDDD
#define c 0x80
#define NEGSEG 0x02
/*用宏定義自動生成段碼表,很好的寫法,值得學習*/
/*更換硬件無需重寫段碼表*/
const char LCD_Tab[] = {
a + b + c + d + e + f, // Displays "0"
b + c, // Displays "1"
a + b + d + e + g, // Displays "2"
a + b + c + d + g, // Displays "3"
b + c + f + g, // Displays "4"
a + c + d + f +g, // Displays "5"
a + c + d + e + f + g, // Displays "6"
a + b + c, // Displays "7"
a + b + c + d + e + f + g, // Displays "8"
a + b + c + d + f + g, // Displays "9"
a + b + c + e + f + g, // Displays "A"
c + d + e + f + g, // Displays "B"
a + d + e + f, // Displays "C"
b + c + d + e + g, // Displays "D"
a + d + e + f + g, // Displays "E"
a + e + f + g, // Displays "F"
a + c + d + e + f, // Displays "G"
b + c + e + f + g, // Displays "H"
e + f, // Displays "I"
b + c + d + e, // Displays "J"
b + d + e + f + g, // Displays "K"
d + e + f, // Displays "L"
a + c + e + g, // Displays "M"
a + b + c + e + f, // Displays "N"
c + e + g, // Displays "n"
c + d + e + g, // Displays "o"
a + b + c + d + e + f, // Displays "O"
a + b + e + f + g, // Displays "P"
a + b + c + f + g, // Displays "Q"
e + g, // Displays "r"
a + c + d + f +g, // Displays "S"
d + e + f + g, // Displays "t"
a + e + f , // Displays "T"
b + c + d + e + f, // Displays "U"
c + d + e, // Displays "v"
b + d + f + g, // Displays "W"
b + c + d + f + g, // Displays "Y"
a + b + d + e + g, // Displays "Z"
g, // Displays "-"
b, // Displays "'"
0 // Displays " "
};
#undef a
#undef b
#undef c
#undef d
#undef e
#undef f
#undef g
#define AA 10
#define BB AA+1
#define CC BB+1
#define DD CC+1
#define EE DD+1
#define FF EE+1
#define GG FF+1
#define HH GG+1
#define II HH+1
#define JJ II+1
#define KK JJ+1
#define LL KK+1
#define mm LL+1
#define NN mm+1
#define nn NN+1
#define oo nn+1
#define OO oo+1
#define PP OO+1
#define QQ PP+1
#define rr QQ+1
#define SS rr+1
#define tt SS+1
#define TT tt+1
#define UU TT+1
#define VV UU+1
#define WW VV+1
#define YY WW+1
#define ZZ YY+1
#define BR ZZ+1 /* - */
#define DT BR+1 /* ' */
#define SP DT+1 /* 空白 */
/****************************************************************************
* 名 稱:LCD_Init()
* 功 能:初始化LCD顯示屏。
* 入口參數:無
* 出口參數:無
* 說 明: 在主程序LCD操作之前,需要調用該函數設置LCD參數。
****************************************************************************/
void LCD_Init()
{ char i;
char *pLCD = (char *)&LCDM1; // 取LCDM1寄存器(最低位)的地址
for (i = 0; i < 8; i++) // Clear LCD memory
*pLCD++ = 0; // 清屏
LCDCTL = LCDSG0_1 + LCD4MUX + LCDON; // LCD模式:4mux LCD, segs0-15
BTCTL |= BT_fLCD_DIV64; // 設置 LCD 刷新率
/*刷新率越慢功耗越低,但速度太慢LCD會閃爍*/
}
/****************************************************************************
* 名 稱:LCD_DisplayLongDecimal()
* 功 能:在LCD上顯示一個帶有小數點的長數據。
* 入口參數:Number:顯示數值 (-999999~9999999)
DOT :小數點位數(0~3)
* 出口參數:無
* 范 例: LCD_DisplayDecimal( 123456,2); 顯示結果: 1234.56 (2位小數)
LCD_DisplayDecimal(-123456,1); 顯示結果:-12345.6 (1位小數)
* 說 明: 該函數能夠顯示滿屏7位數字,但執行時間較長,耗電大。
****************************************************************************/
void LCD_DisplayLongDecimal( long int Number, char DOT)
{
char Neg;
char i;unsigned char temp;
char *pLCD = (char *)&LCDM1;
char PolarLocate;
char DispBuff[8];
if(Number<0) {Number=-Number; Neg=1;} //處理負數
else Neg=0;
for(i=0;i<7;i++) //拆分數字
{
DispBuff[i]=Number%10;
Number/=10;
}
for(i=6;i>DOT;i--) //消隱無效"0"
{
if (DispBuff[i]==0) DispBuff[i]=SP;
else break;
}
PolarLocate=i+1; // 負號顯示在第一個有效數字左邊
if(DOT>3) DOT=255; // 無效的小數點不顯示
if(DOT<1) DOT=255; // LCD048段碼中只有123位數字有小數點
for(i=0;i<7;i++)
{
temp=LCD_Tab[DispBuff[i]]; //查表
if (DOT==i) temp|=DOTSEG;//顯示小數點
if ((PolarLocate==i)&&(Neg)) temp|=NEGSEG;//負號
pLCD[i]=temp; //寫入顯存
}
}
/****************************************************************************
* 名 稱:LCD_DisplayDecimal()
* 功 能:在LCD上顯示一個帶有小數點的短整型數據。
* 入口參數:Number:顯示數值 (-32768~32767)
DOT :小數點位數(0~3)
* 出口參數:無
* 范 例: LCD_DisplayDecimal( 12345,2); 顯示結果: 123.45 (2位小數)
LCD_DisplayDecimal(-12345,1); 顯示結果:-1234.5 (1位小數)
* 說 明: 該函數顯示數值范圍小,但執行時間短,耗電小。
****************************************************************************/
void LCD_DisplayDecimal( int Number, char DOT)
{
char Neg;
char i;unsigned char temp;
char *pLCD = (char *)&LCDM1;
char PolarLocate;
char DispBuff[8];
if(Number<0) {Number=-Number; Neg=1;} //處理負數
else Neg=0;
for(i=0;i<7;i++) //拆分數字
{
DispBuff[i]=Number%10;
Number/=10;
}
for(i=6;i>DOT;i--) //消隱無效"0"
{
if (DispBuff[i]==0) DispBuff[i]=SP;
else break;
}
PolarLocate=i+1; // 負號顯示在第一個有效數字左邊
if(DOT>3) DOT=255; // 無效的小數點不顯示
if(DOT<1) DOT=255; // LCD048段碼中只有123位數字有小數點
for(i=0;i<7;i++)
{
temp=LCD_Tab[DispBuff[i]]; //查表
if (DOT==i) temp|=DOTSEG;//顯示小數點
if ((PolarLocate==i)&&(Neg)) temp|=NEGSEG;//負號
pLCD[i]=temp; //寫入顯存
}
}
/****************************************************************************
* 名 稱:LCD_DisplayLongNumber()
* 功 能:在LCD上顯示一個長整數。
* 入口參數:Number:顯示數值 (-999999~9999999)
* 出口參數:無
* 范 例: LCD_DisplayNumber( 123456); 顯示結果: 123456
LCD_DisplayNumber(-123456); 顯示結果:-123456
* 說 明: 該函數能夠顯示滿屏7位數字,但執行時間較長,耗電大。
****************************************************************************/
void LCD_DisplayLongNumber(long int Number)
{
LCD_DisplayLongDecimal(Number,0) ;//整數沒有小數點
}
/****************************************************************************
* 名 稱:LCD_DisplayNumber()
* 功 能:在LCD上顯示一個短整數。
* 入口參數:Number:顯示數值 (-32768~32767)
* 出口參數:無
* 范 例: LCD_DisplayNumber( 12345); 顯示結果: 12345
LCD_DisplayNumber(-12345); 顯示結果:-12345
****************************************************************************/
void LCD_DisplayNumber(int Number)
{
LCD_DisplayDecimal(Number,0) ;//整數沒有小數點
}
/****************************************************************************
* 名 稱:LCD_DisplayChar()
* 功 能:在LCD上顯示一個字符。
* 入口參數:ch :顯示內容 可顯示字母請參考LCD_Display.h中的宏定義
Location:顯示位置 從左至右對應76543210
* 出口參數:無
* 說 明: 調用該函數不影響LCD其他位的顯示。但顯示數字的函數會覆蓋該函數的結
果,因此該函數要在顯示數據函數之后調用。
* 范 例: LCD_DisplayChar(AA,4);
LCD_DisplayChar(PP,5);
LCD_DisplayChar(2 ,6); 顯示結果: 2PAXXXX
****************************************************************************/
void LCD_DisplayChar(char ch,char Location)
{
char *pLCD = (char *)&LCDM1;
pLCD[Location]=LCD_Tab[ch];
}
/****************************************************************************
* 名 稱:LCD_InsertChar()
* 功 能:在LCD最右端插入一個字符。
* 入口參數:ch :插入字符 可顯示字母請參考LCD_Display.h中的宏定義
* 出口參數:無
* 說 明: 調用該函數后,LCD所有已顯示字符左移一位,新的字符插入在最右端一位。
該函數可以實現滾屏動畫效果,或用于在數據后面顯示單位。
* 范 例: LCD_DisplayDecimal(1234,1);
LCD_InsertChar(PP);
LCD_InsertChar(FF);顯示結果: 123.4PF
****************************************************************************/
void LCD_InsertChar(char ch)
{ char i;
char *pLCD = (char *)&LCDM1;
for(i=6;i>=1;i--) pLCD[i]=pLCD[i-1];
pLCD[0]=LCD_Tab[ch];
}
/****************************************************************************
* 名 稱:LCD_ON()
* 功 能:開啟LCD顯示
* 入口參數:無
* 出口參數:無
* 說 明: 調用該函數將開啟LCD顯示。開啟后LCD仍顯示最后一次顯示內容
****************************************************************************/
void LCD_ON()
{
LCDCTL |= LCDON;
}
/****************************************************************************
* 名 稱:LCD_ON()
* 功 能:關閉LCD顯示
* 入口參數:無
* 出口參數:無
* 說 明: 調用該函數將關閉LCD顯示,可節省3~5uA電流。該函數不清除顯示內容。
****************************************************************************/
void LCD_OFF()
{
LCDCTL &=~ LCDON;
}
/****************************************************************************
* 名 稱:LCD_Clear()
* 功 能: 清除LCD顯示
* 入口參數:無
* 出口參數:無
* 說 明: 調用該函數將LCD顯示清除,但并不關閉LCD模塊。
****************************************************************************/
void LCD_Clear()
{ char i;
char *pLCD = (char *)&LCDM1; // 取LCDM1寄存器(最低位)的地址
for (i = 0; i < 8; i++) // Clear LCD memory
{
*pLCD++ = 0; //清屏
}
}
復制代碼
作者:
huqianzhu
時間:
2021-1-7 11:19
你好,頭文件還有么,能否發一份
作者:
Hygge_0528
時間:
2021-7-31 10:25
請問能移植到msp432上嗎
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
一级片免费视频
|
亚洲中午字幕
|
亚洲不卡一
|
黄色在线免费观看
|
国产精品精品视频一区二区三区
|
天堂久久av
|
一级片aaa
|
精品在线一区二区
|
91视频在线观看
|
91资源在线观看
|
国产精品一区二区av
|
涩涩导航
|
99久久久久久久
|
天天干狠狠干
|
一区二区三区四区视频
|
五月婷婷在线播放
|
亚洲成人毛片
|
成年人网站免费视频
|
国内精品在线视频
|
天久久
|
51ⅴ精品国产91久久久久久
|
欧美视频二区
|
欧美一区在线视频
|
日韩视频区
|
国产馆
|
国产福利在线视频
|
一区二区三区四区av
|
日皮视频免费
|
国产一在线观看
|
国产电影一区二区三区爱妃记
|
免费成人在线网站
|
在线观看视频h
|
伊人影院在线观看
|
99草免费视频
|
国产精品欧美一区二区
|
狠狠躁夜夜躁人人爽天天高潮
|
日韩成人在线网址
|
97人人草
|
最新日韩在线视频
|
天天草天天干天天
|
激情五月综合
|