if(s==16) while(1) { LCD_super clear lcd();

LCD1602学习小结
LCD1602常用知识点
1.& LCD1602简介
LCD1602为工业字符型液晶,能够同时显示16 x
2(16列2行)即32个字符。1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的型液晶模块。它由若干个5X7或者5X11等字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形。
2.& 引脚功能详叙
3.& 信号真值表
4.& 常用指令集
5.& 常用代码段
1)判忙函数
&Bit &LCD_Check_Busy(void)
DataPort= 0xFF;
return (bit)(DataPort & 0x80);
2)写入命令函数
&&LCD_Write_Com(unsigned char
while(LCD_Check_Busy()); //忙则等待
3)写入数据函数
void &&LCD_Write_Data(unsigned
char Data)
while(LCD_Check_Busy()); //忙则等待
&&&&&EN_SET;
&&&&&DataPort=
4)清屏函数
void &LCD_Clear(void)
LCD_Write_Com(0x01);
DelayMs(5);
5)写入字符串函数
void &LCD_Write_String(unsigned char x,unsigned
char y,unsigned char *s)
if (y == 0)
LCD_Write_Com(0x80 +
//表示第一行
LCD_Write_Com(0xC0 +
//表示第二行
LCD_Write_Data(
6)写入字符函数
void &LCD_Write_Char(unsigned char x,unsigned
char y,unsigned char Data)
if (y == 0)
LCD_Write_Com(0x80 + x);& //0x80为第一行首地址
LCD_Write_Com(0xC0 + x);&
//0xC0为第二行首地址&&
LCD_Write_Data(Data);&
7)初始化函数
void &LCD_Init(void)
LCD_Write_Com(0x38);&&&
&& DelayMs(5);
LCD_Write_Com(0x06);&&&
&& DelayMs(5);
LCD_Write_Com(0x0C);&&&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。500 Internal Server Error
500 Internal Server ErrorTinyos学习笔记(3-1)--HF开发板液晶显示过程及其在tinyos上的移植
Tinyos学习笔记(3-1)
&&&&&&&&&&&&&&&&&&&&&&&&&&
--HF开发板液晶显示过程及其在tinyos上的移植
这次的学习目的主要就是搞清楚HF开发板上的液晶显示相关的原理及功能实现,学习的主要材料是HF提供的开发板的LCD的例子显示程序。把这个搞懂后我接下来就是将这个液晶显示的功能在tinyos上进行实现,包括编写相应的显示组件及提供相应的接口。
(支持原创,如需转载请注明地址:
作者:叶雨荫城(阿雨))
HF开发板液晶在IAR平台下驱动的实现
首先从液晶在IAR平台下的实现说起。HF采用的液晶型号为WCG,具体的详细信息大家可以参考它的datasheet,其实操作什么的都很简单,且在买液晶的时候基本都提供液晶51驱动的c文件,所以在进行移植的时候还是相对比较简单的。看下原理图。
大家可以清晰地看到,液晶显示控制的引脚主要有四个(cs片选信号固定接3.3V,所以没有算在内),相应的解释有的是用的英文,懒得翻译,其实非常简单。
LCD_CD:与cc2430的P1.4相连,对应CD端口:Select Control data or Display data
for read/write
LCD_WRD:与cc2430的P1.5相连,对应WR0端口:WR [1:0] controls the read/write
operation of interface. See Host Interface section for more detail.
In parallel mode, WR [1:0] meaning
depends on whether the interface is in the 6800 mode or the 8080
LCD_SDN:与cc2430的P1.6相连。
LCD_SCLK:与cc2430的P1.7相连。
其中LCD_SDN与LCD_SCLK经过了一个串并转换器(8-bit serial-in, parallel-out shift
register),对应的D0-D7为IO口(Bi-directional bus for both serial and
parallel host
Interfaces)
整个实现的过程很简单,通过164的串并转换写入相应的数据,SDN为数据线,而SCLK为时钟线。而通过CD控制写入数据的类型(命令还是数据),而通过WR0控制读还是写的操作。相应的具体命令操作命令见下表。
整个IAR下的液晶驱动分为两个文件lcd.h文件和lcd.c文件,表面上看,这个由华凡的公司实现的驱动是好使的,但稍微具有编程经验的人如果仔细看看,可以说,他们的代码写的是很乱的,无论是函数的命名还是整个程序的排版,都是非常乱的,所以还是奉劝各位博友一句,看代码还是要看高质量的代码,从而养成一个好的习惯,否则,一些坏的习惯可能伴随你的一生。这其实就是像做事情一样,大家总能发现身边的一些人总喜欢走捷径耍小聪明,表面上短期内他们能完成一些任务,但从长远来看,他们是走不远也得不到提高的,反而养成一身的坏毛病和奸诈气。无论是做产品还是做研究,认真仔细谨慎都是我们技术人员必备的素质。走捷径,抄小道的人会死的很惨。至于这个液晶的问题,我将会在移植到tinyos的过程中做些优化,当然,本身的大框架这么乱,优化也是很有限的。恩,不瞎扯,接着说,这个原驱动的全部代码都会贴出来,一个是为了让自己查着方便,第二个是为没有华凡板子的博友能够彻底了解我的移植过程。首先看下IAR工程下lcd.h下的程序,主要包括的是一些宏定义及相应的函数声明。
#ifndef LCD_H
#define LCD_H
#include "hal.h"& //包含了硬件抽象层的头文件
LINE_SIZE&&&&&&&&
20&&& // Line
length of LCD
LINE1_ADDR&&&&&
0x80&&& // Upper
line of LCD
LINE2_ADDR&&&&&
0xC0&&& // Lower
line of LCD
#define CHAR1_ADDRESS&&
LINE1&&&&&&&&&&&&&
LINE2&&&&&&&
LINE3&&&&&&&&&&&&&
CLEARLY_VISIBLE&&&
BEARLY_VISIBLE&&&&
//symbol codes
ARROW_LEFT&&&&&
ARROW_RIGHT&&&&
ARROW_UP&&&&&&&
ARROW_DOWN&&&&&
// 定义设备的无线工作状态
Wireless_Status_TX&&&&
Wireless_Status_RX&&&&
#define Wireless_Status_TX_RX& 0x03
#define Wireless_Status_None&&
// 定义设备的无线信号强度
Wireless_Level_None&&&
Wireless_Level_0&&&&&&
Wireless_Level_1&&&&&&
Wireless_Level_2&&&&&&
Wireless_Level_3&&&&&&
// 定义设备的声音状态
Voice_None&&&&&&&&&&&&
Voice_On&&&&&&&&&&&&&&
Voice_Off&&&&&&&&&&&&&
// 定义设备的信息状态
Message_Off&&&&&&&&&&&
Message_On&&&&&&&&&&&&
// 定义设备的剩余能量状态
Power_Level_None&&&&&&
Power_Level_0&&&&&&&&&
Power_Level_1&&&&&&&&&
Power_Level_2&&&&&&&&&
Power_Level_3&&&&&&&&&
// 定义显示的行号(pages对应不同显示行)
#define&&&&&
#define&&&&&
#define&&&&&
#define&&&&&
#define&&&&&
#define&&&&&
#define&&&&&
#define&&&&&
#define&&&&&
#define&&&&&
Line10& 0x09
#define&&&&&
Line11& 0x0A
#define&&&&&
Line12& 0x0B
#define&&&&&
Line13& 0x0C
// 定义显示的列数
#define&&&&&
Column1&&&&
#define&&&&&
Column2&&&&
#define&&&&&
Column3&&&&
#define&&&&&
Column4&&&&
#define&&&&&
Column5&&&&
#define&&&&&
Column6&&&&
#define&&&&&
Column7&&&&
#define&&&&&
Column8&&&&
#define&&&&&
Column9&&&&
#define&&&&&
Column10&& 0x09
#define&&&&&
Column11&&&
#define&&&&&
Column12 0x0B
#define&&&&&
Column13&& 0x0C
#define&&&&&
Column14 0x0D
#define&&&&&
Column15 0x0E
#define&&&&&
Column16&& 0x0F
#define&&&&&
Column17 0x10
#define&&&&&
Column18 0x11
#define&&&&&
Column19 0x12
#define&&&&&
Column20 0x13
// 段码区的对应显示字段
#define&&&&&&
DuanMa_Year&&&&&&&
#define&&&&&&
DuanMa_YEAR_1_E&&&
#define&&&&&&
DuanMa_YEAR_1_G&&&
#define&&&&&&
DuanMa_YEAR_1_F&&&
#define&&&&&&
DuanMa_YEAR_1_A&&&
#define&&&&&&
DuanMa_YEAR_1_B&&&
#define&&&
&&&DuanMa_YEAR_1_C&&&
#define&&&&&&
DuanMa_YEAR_1_D&&&
#define&&&&&&
DuanMa_YEAR_2_E&&&
#define&&&&&&
DuanMa_YEAR_2_G&&&
#define&&&&&&
DuanMa_YEAR_2_F&&&
#define&&&&&&
DuanMa_YEAR_2_A&&&
#define&&&&&&
DuanMa_YEAR_2_B&&&
#define&&&&&&
DuanMa_YEAR_2_C&&&
#define&&&&&&
DuanMa_YEAR_2_D&&&
#define&&&&&&
DuanMa_YEAR_3_E&&&
#define&&&&&&
DuanMa_YEAR_3_G&&&
#define&&&&&&
DuanMa_YEAR_3_F&&&
#define&&&&&&
DuanMa_YEAR_3_A&&&
#define&&&&&&
DuanMa_YEAR_3_B&&&
#define&&&&&&
DuanMa_YEAR_3_C&&&
#define&&&&&&
DuanMa_YEAR_3_D&&&
#define&&&&&&
DuanMa_YEAR_4_E&&&
#define&&&&&&
DuanMa_YEAR_4_G&&&
#define&&&&&&
DuanMa_YEAR_4_F&&&
#define&&&&&&
DuanMa_YEAR_4_A&&&
#define&&&&&&
DuanMa_YEAR_4_B&&&
#define&&&&&&
DuanMa_YEAR_4_C&&&
#define&&&&&&
DuanMa_YEAR_4_D&&&
#define&&&&&&
DuanMa_Month&&&&&&
#define&&&&&&
DuanMa_Month_1_E&& 0x27
#define&&&&&&
DuanMa_Month_1_G&& 0x28
#define&&&&&&
DuanMa_Month_1_F&& 0x29
#define&&&&&&
DuanMa_Month_1_A&& 0x2A
#define&&&&&&
DuanMa_Month_1_B&& 0x2B
#define&&&&&&
DuanMa_Month_1_C&& 0x2C
#define&&&&&&
DuanMa_Month_1_D&& 0x2D
#define&&&&&&
DuanMa_Month_2_E&& 0x2E
#define&&&&&&
DuanMa_Month_2_G&& 0x2F
#define&&&&&&
DuanMa_Month_2_F&& 0x30
#define&&&&&&
DuanMa_Month_2_A&& 0x31
#define&&&&&&
DuanMa_Month_2_B&& 0x32
#define&&&&&&
DuanMa_Month_2_C&& 0x33
#define&&&&&&
DuanMa_Month_2_D&& 0x34
#define&&&&&&
DuanMa_Day&&&&&&&&
#define&&&&&&
DuanMa_Day_1_E&&&&
#define&&&&&&
DuanMa_Day_1_G&&&&
#define&&&&&&
DuanMa_Day_1_F&&&&
#define&&&&&&
DuanMa_Day_1_A&&&&
#define&&&&&&
DuanMa_Day_1_B&&&&
#define&&&&&&
DuanMa_Day_1_C&&&&
#define&&&&&&
DuanMa_Day_1_D&&&&
#define&&&&&&
DuanMa_Day_2_E&&&&
#define&&&&&&
DuanMa_Day_2_G&&&&
#define&&&&&&
DuanMa_Day_2_F&&&&
#define&&&&&&
DuanMa_Day_2_A&&&&
#define&&&&&&
DuanMa_Day_2_B&&&&
#define&&&&&&
DuanMa_Day_2_C&&&&
#define&&&&&&
DuanMa_Day_2_D&&&&
// 发送标志段
#define&&&&&&
DuanMa_RX&&&&&&&&&
// 接收标志段
#define&&&&&&
DuanMa_TX&&&&&&&&&
#define&&&&&&
DuanMa_Signal_Flag 0x68
#define&&&&&&
DuanMa_Signal_1&&&
#define&&&&&&
DuanMa_Signal_2&&&
#define&&&&&&
DuanMa_Signal_3&&&
#define&&&&&&
DuanMa_Voice_Off&& 0x7B
#define&&&&&&
DuanMa_Voice_On&&&
#define&&&&&&
DuanMa_Message&&&&
// 电池能量段
#define&&&&&&
DuanMa_Power_113&& 0x9D
#define&&&&&&
DuanMa_Power_114&& 0x9E
#define&&&&&&
DuanMa_Power_115&& 0x9F
#define&&&
&&&DuanMa_Power_116&&
LCD_CD&&&&&&&&&&&&&&&
LCD_WR0&&&&&&&&&&&&&&
LCD_SCLK&&&&&&&&&&&&&&
LCD_SDIN&&&&&&&&&&&&&&
void initLcd(void);
void lcdUpdate(char *pLine1, char *pLine2);
void lcdUpdateLine(UINT8 line, unsigned char *line_p);
void lcdUpdateChar(UINT8 line, UINT8 position, char c);
void lcdUpdateSymbol(UINT8 line, UINT8 position, char c);
//void initNewSymbol(char* symbol, BYTE address);
void waitVisible(BOOL visibility);
void scrollText(char *string, UINT8 length);
void ShowHz16(unsigned char Y,unsigned char X,unsigned char
*address); //显示汉字,这编程的人太烂了,从这个函数的命名就能够看出这个人的水平
void LCD_write_english_string(unsigned char X,unsigned char
Y,unsigned char *s);
//写英语字符串
void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned
char *map,
&&&&&&&&&&&&&&&&&&&&&&&
unsigned char Pix_x,unsigned char Pix_y);
//位图绘制函数
void& Write_Year(unsigned char year); //写年
void& Write_Month(unsigned char month);
void& Write_Day(unsigned char day); //写天
void& Write_Wireless_Status(unsigned char
status); //写无线的状态
void& Write_Signal_Status(unsigned char level);
//写信号状态
void& Write_Voice_Status(unsigned char
status);//写音量状态
void& Write_Message_Status(unsigned char
status);//写信息状态
void& Write_Power_Status(unsigned char
status);//写能量状态
来看看具体的函数实现,具体实现在lcd.c文件中。
//WCG160X100 UC1608控制器
#include "lcd.h"
#include "hal.h"
#include "intrinsics.h"&
#define uint8& unsigned char
#define uint16 unsigned int
#define byte& unsigned char
#define uint32 unsigned long
#define HAL_LCD_MAX_CHARS 20
//english_8x16_pixel
// 8 x 16 font
// index = ASCII - 32
// ------------------& ASCII字模的数据表
------------------------ //
码表从0x20~0x7e&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
横向取模左高位&&&&
--------------------------------------------------------------
__code const unsigned char font8x16[][16]
=&&&&&&&&&&&&&
// ASCII 二维数组这个如果在tinyos中进行存储,怎么声明变量,这个不能存储在RAM.
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,& // -
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x18,0x3C,0x3C,0x3C,0x18,0x18,& //
0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00,
0x00,0x66,0x66,0x66,0x24,0x00,0x00,0x00,& //
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x6C,0x6C,0xFE,0x6C,0x6C,& //
0x6C,0xFE,0x6C,0x6C,0x00,0x00,0x00,0x00,
0x18,0x18,0x7C,0xC6,0xC2,0xC0,0x7C,0x06,& //
0x86,0xC6,0x7C,0x18,0x18,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xC2,0xC6,0x0C,0x18,& //
0x30,0x60,0xC6,0x86,0x00,0x00,0x00,0x00,
0x00,0x00,0x38,0x6C,0x6C,0x38,0x76,0xDC,& //
0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00,
0x00,0x30,0x30,0x30,0x60,0x00,0x00,0x00,& //
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x0C,0x18,0x30,0x30,0x30,0x30,& //
0x30,0x30,0x18,0x0C,0x00,0x00,0x00,0x00,
0x00,0x00,0x30,0x18,0x0C,0x0C,0x0C,0x0C,& //
0x0C,0x0C,0x18,0x30,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x66,0x3C,0xFF,& //
0x3C,0x66,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x7E,& //
0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,& //
0x00,0x18,0x18,0x18,0x30,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,& //
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,& //
0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x02,0x06,0x0C,0x18,& //
0x30,0x60,0xC0,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x7C,0xC6,0xC6,0xCE,0xD6,0xD6,& //
0xE6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,
0x00,0x00,0x18,0x38,0x78,0x18,0x18,0x18,& //
0x18,0x18,0x18,0x7E,0x00,0x00,0x00,0x00,
0x00,0x00,0x7C,0xC6,0x06,0x0C,0x18,0x30,& //
0x60,0xC0,0xC6,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x7C,0xC6,0x06,0x06,0x3C,0x06,& //
0x06,0x06,0xC6,0x7C,0x00,0x00,0x00,0x00,
0x00,0x00,0x0C,0x1C,0x3C,0x6C,0xCC,0xFE,& //
0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,0x00,
0x00,0x00,0xFE,0xC0,0xC0,0xC0,0xFC,0x0E,& //
0x06,0x06,0xC6,0x7C,0x00,0x00,0x00,0x00,
0x00,0x00,0x38,0x60,0xC0,0xC0,0xFC,0xC6,& //
0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,
0x00,0x00,0xFE,0xC6,0x06,0x06,0x0C,0x18,& //
0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00,
0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x7C,0xC6,& //
0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,
0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x7E,0x06,& //
0x06,0x06,0x0C,0x78,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,& //
0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,& //
0x00,0x18,0x18,0x30,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x60,& //
0x30,0x18,0x0C,0x06,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,& //
0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x06,& //
0x0C,0x18,0x30,0x60,0x00,0x00,0x00,0x00,
0x00,0x00,0x7C,0xC6,0xC6,0x0C,0x18,0x18,& //
0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x7C,0xC6,0xC6,0xDE,0xDE,& //
0xDE,0xDC,0xC0,0x7C,0x00,0x00,0x00,0x00,
0x00,0x00,0x10,0x38,0x6C,0xC6,0xC6,0xFE,& //
0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00,
0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x66,& //
0x66,0x66,0x66,0xFC,0x00,0x00,0x00,0x00,
0x00,0x00,0x3C,0x66,0xC2,0xC0,0xC0,0xC0,& //
0xC0,0xC2,0x66,0x3C,0x00,0x00,0x00,0x00,
0x00,0x00,0xF8,0x6C,0x66,0x66,0x66,0x66,& //
0x66,0x66,0x6C,0xF8,0x00,0x00,0x00,0x00,
0x00,0x00,0xFE,0x66,0x62,0x68,0x78,0x68,& //
0x60,0x62,0x66,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0xFE,0x66,0x62,0x68,0x78,0x68,& //
0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x3C,0x66,0xC2,0xC0,0xC0,0xDE,& //
0xC6,0xC6,0x66,0x3A,0x00,0x00,0x00,0x00,
0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xFE,0xC6,& //
0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00,
0x00,0x00,0x3C,0x18,0x18,0x18,0x18,0x18,& //
0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,
0x00,0x00,0x1E,0x0C,0x0C,0x0C,0x0C,0x0C,& //
0xCC,0xCC,0xCC,0x78,0x00,0x00,0x00,0x00,
0x00,0x00,0xE6,0x66,0x6C,0x6C,0x78,0x78,& //
0x6C,0x66,0x66,0xE6,0x00,0x00,0x00,0x00,
0x00,0x00,0xF0,0x60,0x60,0x60,0x60,0x60,& //
0x60,0x62,0x66,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0xC6,0xEE,0xFE,0xFE,0xD6,0xC6,& //
0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00,
0x00,0x00,0xC6,0xE6,0xF6,0xFE,0xDE,0xCE,& //
0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00,
0x00,0x00,0x38,0x6C,0xC6,0xC6,0xC6,0xC6,& //
0xC6,0xC6,0x6C,0x38,0x00,0x00,0x00,0x00,
0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x60,& //
0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,& //
0xC6,0xD6,0xDE,0x7C,0x0C,0x0E,0x00,0x00,
0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x6C,& //
0x66,0x66,0x66,0xE6,0x00,0x00,0x00,0x00,
0x00,0x00,0x7C,0xC6,0xC6,0x60,0x38,0x0C,& //
0x06,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,
0x00,0x00,0x7E,0x7E,0x5A,0x18,0x18,0x18,& //
0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,
0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,& //
0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,
0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,& //
0xC6,0x6C,0x38,0x10,0x00,0x00,0x00,0x00,
0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xD6,& //
0xD6,0xFE,0x6C,0x6C,0x00,0x00,0x00,0x00,
0x00,0x00,0xC6,0xC6,0x6C,0x6C,0x38,0x38,& //
0x6C,0x6C,0xC6,0xC6,0x00,0x00,0x00,0x00,
0x00,0x00,0x66,0x66,0x66,0x66,0x3C,0x18,& //
0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,
0x00,0x00,0xFE,0xC6,0x86,0x0C,0x18,0x30,& //
0x60,0xC2,0xC6,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x3C,0x30,0x30,0x30,0x30,0x30,& //
0x30,0x30,0x30,0x3C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0xC0,0xE0,0x70,0x38,& //
0x1C,0x0E,0x06,0x02,0x00,0x00,0x00,0x00,
0x00,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,& //
0x0C,0x0C,0x0C,0x3C,0x00,0x00,0x00,0x00,
0x10,0x38,0x6C,0xC6,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,0xFF,0x00,0x00,
0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00,& //
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x78,0x0C,0x7C,& //
0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00,
0x00,0x00,0xE0,0x60,0x60,0x78,0x6C,0x66,& //
0x66,0x66,0x66,0xDC,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC0,& //
0xC0,0xC0,0xC6,0x7C,0x00,0x00,0x00,0x00,
0x00,0x00,0x1C,0x0C,0x0C,0x3C,0x6C,0xCC,& //
0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xFE,& //
0xC0,0xC0,0xC6,0x7C,0x00,0x00,0x00,0x00,
0x00,0x00,0x38,0x6C,0x64,0x60,0xF0,0x60,& //
0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x76,0xCC,0xCC,& //
0xCC,0xCC,0xCC,0x7C,0x0C,0xCC,0x78,0x00,
0x00,0x00,0xE0,0x60,0x60,0x6C,0x76,0x66,& //
0x66,0x66,0x66,0xE6,0x00,0x00,0x00,0x00,
0x00,0x00,0x18,0x18,0x00,0x38,0x18,0x18,& //
0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,
0x00,0x00,0x06,0x06,0x00,0x0E,0x06,0x06,& //
0x06,0x06,0x06,0x06,0x66,0x66,0x3C,0x00,
0x00,0x00,0xE0,0x60,0x60,0x66,0x6C,0x78,& //
0x78,0x6C,0x66,0xE6,0x00,0x00,0x00,0x00,
0x00,0x00,0x38,0x18,0x18,0x18,0x18,0x18,& //
0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xEC,0xFE,0xD6,& //
0xD6,0xD6,0xD6,0xD6,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xDC,0x66,0x66,& //
0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,& //
0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xDC,0x66,0x66,& //
0x66,0x66,0x66,0x7C,0x60,0x60,0xF0,0x00,
0x00,0x00,0x00,0x00,0x00,0x76,0xCC,0xCC,& //
0xCC,0xCC,0xCC,0x7C,0x0C,0x0C,0x1E,0x00,
0x00,0x00,0x00,0x00,0x00,0xDC,0x76,0x62,& //
0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0x60,& //
0x38,0x0C,0xC6,0x7C,0x00,0x00,0x00,0x00,
0x00,0x00,0x10,0x30,0x30,0xFC,0x30,0x30,& //
0x30,0x30,0x36,0x1C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xCC,0xCC,0xCC,& //
0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,& //
0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6,& //
0xD6,0xD6,0xFE,0x6C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xC6,0x6C,0x38,& //
0x38,0x38,0x6C,0xC6,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6,& //
0xC6,0xC6,0xC6,0x7E,0x06,0x0C,0xF8,0x00,
0x00,0x00,0x00,0x00,0x00,0xFE,0xCC,0x18,& //
0x30,0x60,0xC6,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x24,0x24,0x24,0x24,0x24,0x24,& //
-||-&&& 91
0x24,0x24,0x24,0x24,0x24,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x20,0x40,0xFF,& //
0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x04,0x02,0xFF,& //
0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x10,0x38,0x54,0x10,0x10,0x10,0x10,& //
-up-&&& 94
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,
0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,& //
-down-& 95
0x10,0x10,0x10,0x10,0x54,0x38,0x10,0x00,
0x7E,0x7E,0x18,0x18,0x18,0x18,0x18,0x18,& // -ADC
Series上用的上划线-
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1E,
0x1E,0x18,0x18,0x18,0x18,0x18,0x18,0x18,& // -ADC
Series上用的下划线-
0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x7E,
// 段码显示0~10对应的列选信号
unsigned char scandata[10] = {0x5F, 0x06, 0x6D, 0x2F, 0x36,
0x3B, 0x7B, 0x0E, 0x7F, 0x3F};
unsigned char Ratio = 0x2d;//Set Power
Controlc=&26;d:26-43
unsigned char Refer = 0x6d;//Set reference voltage register
void OutData_595(unsigned char Indata);
void Initial(void);
void DatWrite(unsigned char dat);
void ComWrite(unsigned char com);
void Disp(unsigned char dot1 , unsigned char dot2);
void LCD_clear_line(unsigned char line);
void Adj_Data(unsigned char *Src_Dat,unsigned char
*Dst_Dat);
//函& 数:Delay_us(unsigned int time)
//作& 用:延时N us
//输& 入:unsigned ine time
//输& 出:无
static void Delay_us(unsigned int n)
& for(i = 0; i & i++)
& for(j = 1; j&0x05; j++)
void LCD_clear(void)
& Disp(0x00,0x00);
void initLcd(void)
& // CC2430 中,I/O 口做普通 I/O 使用时和每个 I/O 端口相关的寄存器有
3 个,分别是 //PxSEL
& //功能选择寄存器,PxDIR 方向寄存器,PxINP 输入模式寄存器,其中 x 为
0,1,2 。
& P1SEL &= 0x0F; //P1高4位 为普通
& P1DIR |= 0xF0; //P1高4位 设置为输出
& Initial();//液晶初始化,写相应的控制命令
LCD_clear();&&&
&&&&&&&&&&&&&&&
void LCD_write_english_string(unsigned char X,unsigned char
Y,uint8 *s)
& unsigned char m,
& unsigned char LSB_Data,MSB_D
& unsigned char data_new[16];
& unsigned char i,j;
& LCD_clear_line(Y);&
//清某一行
& while(*s)
//横线字模转换为纵向字模
&&for(i=0;i&16;i++)
data_new[i]=0;
for(j=0;j&8;j++)
for(i=0;i&8;i++)
data_new[j*2]&&&&&&
((font8x16[*s-0x20][i]&&(7-j))&0x01)&&i;
data_new[j*2+1]&&&&
((font8x16[*s-0x20][i+8]&&(7-j))&0x01)&&i;
//液晶显示
ComWrite(0xb0+0+Y*2);
for(m=0;m&8;m++)
LSB_Data=(m+n*8+X)&0x0f;
MSB_Data=(((m+n*8+X)&&4)&0x0f)|0x10;
ComWrite(LSB_Data);
ComWrite(MSB_Data);
DatWrite(data_new[m*2]);
ComWrite(0xb0+1+Y*2);
for(m=0;m&8;m++)
LSB_Data=(m+n*8+X)&0x0f;
MSB_Data=(((m+n*8+X)&&4)&0x0f)|0x10;
ComWrite(LSB_Data);
ComWrite(MSB_Data);
DatWrite(data_new[m*2+1]);
if(n&=HAL_LCD_MAX_CHARS)
void lcdUpdateChar(UINT8 line, UINT8 position, char c)
& unsigned char i,j;
& unsigned char LSB_Data,MSB_D
& unsigned char data_new[16];
& //横线字模转换为纵向字模
& for(i=0;i&16;i++)
data_new[i]=0;
& for(j=0;j&8;j++)
for(i=0;i&8;i++)
data_new[j*2]&&&&&&
((font8x16[c-0x20][i]&&(7-j))&0x01)&&i;
data_new[j*2+1]&&&&
((font8x16[c-0x20][i+8]&&(7-j))&0x01)&&i;
& //液晶显示
& ComWrite(0xb0+0+line*2);
& for(i=0;i&8;i++)
LSB_Data=(i+position*8)&0x0f;
MSB_Data=(((i+position*8)&&4)&0x0f)|0x10;
ComWrite(LSB_Data);
ComWrite(MSB_Data);&
DatWrite(data_new[i*2]);
& ComWrite(0xb0+1+line*2);
& for(i=0;i&8;i++)
LSB_Data=(i+position*8)&0x0f;
MSB_Data=(((i+position*8)&&4)&0x0f)|0x10;
ComWrite(LSB_Data);
ComWrite(MSB_Data);
DatWrite(data_new[i*2+1]);
void lcdUpdateSymbol(UINT8 line, UINT8 position, char c)
& unsigned char i,j;
& unsigned char LSB_Data,MSB_D
& unsigned char data_new[16];
& //横线字模转换为纵向字模
& for(i=0;i&16;i++)
data_new[i]=0;
& for(j=0;j&8;j++)
for(i=0;i&8;i++)
data_new[j*2]&&&
((font8x16[c-0x20][i]&&(7-j))&0x01)&&i;
data_new[j*2+1]&&&&
((font8x16[c-0x20][i+8]&&(7-j))&0x01)&&i;
& //液晶显示
& ComWrite(0xb0+0+line*2);
& for(i=0;i&8;i++)
LSB_Data=(i+position*8)&0x0f;
MSB_Data=(((i+position*8)&&4)&0x0f)|0x10;
ComWrite(LSB_Data);
ComWrite(MSB_Data);
DatWrite(data_new[i*2]);
& ComWrite(0xb0+1+line*2);
& for(i=0;i&8;i++)
LSB_Data=(i+position*8)&0x0f;
MSB_Data=(((i+position*8)&&4)&0x0f)|0x10;
ComWrite(LSB_Data);
ComWrite(MSB_Data);
DatWrite(data_new[i*2+1]);
void lcdUpdateLine(uint8 line, uint8 *pLine)
& LCD_write_english_string(0,line,pLine);
void OutData_164(unsigned char Indata)
& for(i=0;i&8;i++)
if(Indata&0x80)
LCD_SDIN=1;
LCD_SDIN=0;
LCD_SCLK=0;
__no_operation();& // #include
"intrinsics.h"头文件中有该函数的声明
__no_operation();
LCD_SCLK=1;
__no_operation();
__no_operation();
LCD_SCLK=0;
Indata=Indata&&1;&&&&
//液晶初始化
void Initial()
&& Delay_us(2000);
&& // CS_HI;
ComWrite(0xe2);&&&&&
&& Delay_us(500);
ComWrite(0xae);&&&&&
// Display Off
ComWrite(0x24);&&&&&
// MUX ratio(duty)=1/128 & temperature
compensation
ComWrite(0xc4);&&&&&
// Set LCD mapping control
ComWrite(0x2d);&&&&&
//set internal charge pump---new
ComWrite(0xea);&&&&&
// lcd bias 1/12//ea& e911.3&
e810.7&& eb12.7
ComWrite(Ratio);&&&&
// Set Power Control(capacitance of LCD and internal Vlcd)
ComWrite(0x81);&&&&&
// Set gain and potentiometer (Double Byte Command)
ComWrite(Refer);&&&&
// Set reference voltage register
ComWrite(0x90);&&&&&
// Set fixed lines
ComWrite(0x8c);&&&&&
// Set RAM Address Control
ComWrite(0xaf);&&&&&
// Display On
ComWrite(0x40);&&&&&
// Set Display Start Line
void DatWrite(unsigned char dat)
& LCD_CD=1;
& LCD_WR0=0;
& //OutData_595(dat);
& OutData_164(dat);
& Delay_us(1);
& LCD_WR0=1;
& Delay_us(1);
void ComWrite(unsigned char com)
& LCD_CD=0;
& LCD_WR0=0;
& //OutData_595(com);
& OutData_164(com);
& Delay_us(1);
& LCD_WR0=1;
& Delay_us(1);
void Disp(unsigned char dot1 , unsigned char dot2)
& unsigned char cnt, cnt1;
& for(cnt = 0; cnt & 13; cnt
ComWrite(0xb0 + cnt);
ComWrite(0x10);
ComWrite(0x00);
for(cnt1=0; cnt1 & 80; cnt1 ++)
DatWrite(dot1);
DatWrite(dot2);
void LCD_clear_line(unsigned char line)
& unsigned char cnt, cnt1;
& for(cnt = line*2; cnt &
line*2+2; cnt ++)
ComWrite(0xb0 + cnt);
ComWrite(0x10);
ComWrite(0x00);
for(cnt1=0; cnt1 & 80; cnt1 ++)
DatWrite(0);
DatWrite(0);
//16X16横向字模转纵向字模
void Adj_Data(unsigned char *Src_Dat,unsigned char *Dst_Dat)
& unsigned char i,j;
& for(i=0;i&32;i++)
*(Dst_Dat+i)=0;
& for(j=0;j&8;j++)
for(i=0;i&8;i++)
*(Dst_Dat+j*2)&&&&&
(((*(Src_Dat+i*2))&&(7-j))&0x01)&&i;
*(Dst_Dat+j*2+1)&&&
(((*(Src_Dat+i*2+16))&&(7-j))&0x01)&&i;
*(Dst_Dat+j*2+16)&&
(((*(Src_Dat+i*2+1))&&(7-j))&0x01)&&i;
*(Dst_Dat+j*2+1+16) |=&
(((*(Src_Dat+i*2+16+1))&&(7-j))&0x01)&&i;
void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned
char *map,
&&&&&&&&&&&&&&&&&&&&&&&
unsigned char Pix_x,unsigned char Pix_y)
& unsigned char cnt,cnt1;
& row=Pix_y/8;
& for(cnt = 0; cnt & cnt
ComWrite(0xb0 + cnt+Y);
ComWrite((X+cnt)&0x0f);
ComWrite((((X+cnt)&&4)&0x0f)|0x10);
for(cnt1=0; cnt1 & Pix_x; cnt1 ++)
DatWrite(*(map+cnt*Pix_x+cnt1));
void ShowHz16(unsigned char Y,unsigned char X,unsigned char
& unsigned char LSB_Data,MSB_D
& unsigned char hanzi_new[32];
Adj_Data(address,&hanzi_new[0]);
& ComWrite(0xb0+0+Y*2);
& for(i=0;i&16;i++)
LSB_Data=(i+X)&0x0f;
MSB_Data=(((i+X)&&4)&0x0f)|0x10;
ComWrite(LSB_Data);
ComWrite(MSB_Data);
DatWrite(hanzi_new[i*2]);
& ComWrite(0xb0+1+Y*2);
& for(i=0;i&16;i++)
LSB_Data=(i+X)&0x0f;
MSB_Data=(((i+X)&&4)&0x0f)|0x10;
ComWrite(LSB_Data);
ComWrite(MSB_Data);
DatWrite(hanzi_new[i*2+1]);
void lcdUpdate(char *pLine1, char *pLine2)
& lcdUpdateLine(LINE1, pLine1);
& lcdUpdateLine(LINE2, pLine2);
void waitVisible(BOOL visibility)
& if(visibility){
& while(i--){
halWait(10);
void& Write_Year(unsigned char year)
& unsigned char i, year_3, year_4;
& year_3 = year / 10;
& year_4 = year % 10;
& ComWrite(0xb0 + 12); // 定位至段码显示区域的“页”
& // 显示汉字“年”
& ComWrite( 0x10 + (DuanMa_Year-1) / 16);
& ComWrite( 0x00 + (DuanMa_Year-1) % 16);
& DatWrite(0x10); //
点亮段码对应的列,只要将该例的第5位置1即可。
& // 显示年份的第1位
& ComWrite( 0x10 + (DuanMa_YEAR_1_E-1) /
& ComWrite( 0x00 + (DuanMa_YEAR_1_E-1) %
& for( i = 0; i & 7; i++)
& &&DatWrite(
(((scandata[2] && (6 - i))
& 0x01 ) && 4 )
& // 显示年份的第2位
& ComWrite( 0x10 + (DuanMa_YEAR_2_E-1) /
& ComWrite( 0x00 + (DuanMa_YEAR_2_E-1) %
& for( i = 0; i & 7; i++)
DatWrite( (((scandata[0] && (6 - i))
& 0x01 ) && 4 )
& // 显示年份的第3位
& ComWrite( 0x10 + (DuanMa_YEAR_3_E-1) /
& ComWrite( 0x00 + (DuanMa_YEAR_3_E-1) %
& for( i = 0; i & 7; i++)
DatWrite( (((scandata[year_3] && (6 -
i)) & 0x01 ) && 4 )
& // 显示年份的第4位
& ComWrite( 0x10 + (DuanMa_YEAR_4_E-1) /
& ComWrite( 0x00 + (DuanMa_YEAR_4_E-1) %
& for( i = 0; i & 7; i++)
DatWrite( (((scandata[year_4] && (6 -
i)) & 0x01 ) && 4 )
void& Write_Month(unsigned char month)
& unsigned char i, month_1, month_2;
& month_1 = month / 10;
& month_2 = month % 10;
& ComWrite(0xb0 + 12); // 定位至段码显示区域的“页”
& // 显示汉字“月”
& ComWrite( 0x10 + (DuanMa_Month - 1) /
&&ComWrite( 0x00 +
(DuanMa_Month - 1) % 16);
& DatWrite(0x10);
& // 显示“月”的第1位
& ComWrite( 0x10 + (DuanMa_Month_1_E-1) /
& ComWrite( 0x00 + (DuanMa_Month_1_E-1) %
& for( i = 0; i & 7; i++)
DatWrite( (((scandata[month_1] && (6
- i)) & 0x01 ) && 4 )
& // 显示“月”的第2位
& ComWrite( 0x10 + (DuanMa_Month_2_E-1) /
& ComWrite( 0x00 + (DuanMa_Month_2_E-1) %
& for( i = 0; i & 7; i++)
DatWrite( (((scandata[month_2] && (6
- i)) & 0x01 ) && 4 )
void& Write_Day(unsigned char day)
& unsigned char i, day_1, day_2;
& day_1 = day / 10;
& day_2 = day % 10;
& ComWrite(0xb0 + 12); // 定位至段码显示区域的“页”
& // 显示汉字“天”
& ComWrite( 0x10 + (DuanMa_Day - 1) / 16);
& ComWrite( 0x00 + (DuanMa_Day - 1) % 16);
& DatWrite(0x10);
& // 显示“天”的第1位
& ComWrite( 0x10 + (DuanMa_Day_1_E-1) /
& ComWrite( 0x00 + (DuanMa_Day_1_E-1) %
& for( i = 0; i & 7; i++)
DatWrite( (((scandata[day_1] && (6 -
i)) & 0x01 ) && 4 )
& // 显示“天”的第2位
& ComWrite( 0x10 + (DuanMa_Day_2_E-1) /
& ComWrite( 0x00 + (DuanMa_Day_2_E-1) %
& for( i = 0; i & 7; i++)
DatWrite( (((scandata[day_2] && (6 -
i)) & 0x01 ) && 4 )
void& Write_Wireless_Status(unsigned char
& switch( status )
Wireless_Status_RX:
ComWrite(0xb0 + 12);
ComWrite(0x10 + (DuanMa_RX-1) / 16);
ComWrite(0x00 + (DuanMa_RX-1) % 16);
DatWrite(0x10);
DatWrite(0x00);
Wireless_Status_TX:
ComWrite(0xb0 + 12);
ComWrite(0x10 + (DuanMa_RX-1) / 16);
ComWrite(0x00 + (DuanMa_RX-1) % 16);
DatWrite(0x00);
DatWrite(0x10);
Wireless_Status_TX_RX:
ComWrite(0xb0 + 12);
ComWrite(0x10 + (DuanMa_RX-1) / 16);
ComWrite(0x00 + (DuanMa_RX-1) % 16);
DatWrite(0x10);
DatWrite(0x10);
Wireless_Status_None:
ComWrite(0xb0 + 12);
ComWrite(0x10 + (DuanMa_RX-1) / 16);
ComWrite(0x00 + (DuanMa_RX-1) % 16);
DatWrite(0x00);
DatWrite(0x00);
void& Write_Signal_Status(unsigned char
& switch( level )
Wireless_Level_None:
ComWrite(0xb0 + 12);
&&&ComWrite(0x10
+ (DuanMa_Signal_Flag-1) / 16);
ComWrite(0x00 + (DuanMa_Signal_Flag-1) % 16);
DatWrite(0x00);
DatWrite(0x00);
DatWrite(0x00);
DatWrite(0x00);
Wireless_Level_0:
ComWrite(0xb0 + 12);
ComWrite(0x10 + (DuanMa_Signal_Flag-1) / 16);
ComWrite(0x00 + (DuanMa_Signal_Flag-1) % 16);
DatWrite(0x10);
DatWrite(0x00);
DatWrite(0x00);
DatWrite(0x00);
Wireless_Level_1:
ComWrite(0xb0 + 12);
ComWrite(0x10 + (DuanMa_Signal_Flag-1) / 16);
ComWrite(0x00 + (DuanMa_Signal_Flag-1) % 16);
DatWrite(0x10);
DatWrite(0x10);
DatWrite(0x00);
DatWrite(0x00);
Wireless_Level_2:
ComWrite(0xb0 + 12);
ComWrite(0x10 + (DuanMa_Signal_Flag-1) / 16);
ComWrite(0x00 + (DuanMa_Signal_Flag-1) % 16);
DatWrite(0x10);
DatWrite(0x10);
DatWrite(0x10);
DatWrite(0x00);
Wireless_Level_3:
ComWrite(0xb0 + 12);
ComWrite(0x10 + (DuanMa_Signal_Flag-1) / 16);
ComWrite(0x00 + (DuanMa_Signal_Flag-1) % 16);
DatWrite(0x10);
DatWrite(0x10);
DatWrite(0x10);
DatWrite(0x10);
void& Write_Voice_Status(unsigned char
& switch( status )
Voice_None:
ComWrite(0xb0 + 12);
ComWrite(0x10 + (DuanMa_Voice_Off-1) / 16);
ComWrite(0x00 + (DuanMa_Voice_Off-1) % 16);
DatWrite(0x00);
DatWrite(0x00);
ComWrite(0xb0 + 12);
ComWrite(0x10 + (DuanMa_Voice_Off-1) / 16);
ComWrite(0x00 + (DuanMa_Voice_Off-1) % 16);
DatWrite(0x00);
DatWrite(0x10);
Voice_Off:
ComWrite(0xb0 + 12);
ComWrite(0x10 + (DuanMa_Voice_Off-1) / 16);
ComWrite(0x00 + (DuanMa_Voice_Off-1) % 16);
DatWrite(0x10);
DatWrite(0x10);
void& Write_Message_Status(unsigned char
& switch( status )
Message_Off:
ComWrite(0xb0 + 12);
ComWrite(0x10 + (DuanMa_Message-1) / 16);
ComWrite(0x00 + (DuanMa_Message-1) % 16);
DatWrite(0x00);
Message_On:
ComWrite(0xb0 + 12);
ComWrite(0x10 + (DuanMa_Message-1) / 16);
ComWrite(0x00 + (DuanMa_Message-1) % 16);
DatWrite(0x10);
void& Write_Power_Status(unsigned char
& switch( status )
Power_Level_None:
ComWrite(0xb0 + 12);
ComWrite(0x10 + (DuanMa_Power_113-1) / 16);
ComWrite(0x00 + (DuanMa_Power_113-1) % 16);
DatWrite(0x00);
DatWrite(0x00);
DatWrite(0x00);
DatWrite(0x00);
Power_Level_0:
ComWrite(0xb0 + 12);
ComWrite(0x10 + (DuanMa_Power_113-1) / 16);
ComWrite(0x00 + (DuanMa_Power_113-1) % 16);
DatWrite(0x10);
DatWrite(0x00);
DatWrite(0x00);
DatWrite(0x00);
Power_Level_1:
ComWrite(0xb0 + 12);
ComWrite(0x10 + (DuanMa_Power_113-1) / 16);
ComWrite(0x00 + (DuanMa_Power_113-1) % 16);
DatWrite(0x10);
DatWrite(0x00);
DatWrite(0x00);
DatWrite(0x10);
Power_Level_2:
ComWrite(0xb0 + 12);
ComWrite(0x10 + (DuanMa_Power_113-1) / 16);
ComWrite(0x00 + (DuanMa_Power_113-1) % 16);
DatWrite(0x10);
DatWrite(0x00);
DatWrite(0x10);
DatWrite(0x10);
Power_Level_3:
ComWrite(0xb0 + 12);
ComWrite(0x10 + (DuanMa_Power_113-1) / 16);
ComWrite(0x00 + (DuanMa_Power_113-1) % 16);
DatWrite(0x10);
DatWrite(0x10);
DatWrite(0x10);
DatWrite(0x10);
看完上面的程序,如果希望将这个液晶显示程序移植到Tinyos下面临的问题主要有如下几个:
问题1:__code const unsigned char
font8x16[][16]的存储,肯定是存储在ROM里面,但是在tinyos及keil平台下,如果希望把数据存储在code中,需要怎样声明。
问题2:在这个驱动下用到了#include "intrinsics.h" 下的__intrinsic void
__no_operation(void);这个函数是IAR平台下独有的,如果希望在keil中实现同样的功能,该用什么函数进行替代。
解决方案具体如下:
问题1:查询&iocc2430.h&文件查到了这个,不知道能不能解决这个问题typedef
uint16_t uint16_t_&& // will
be replaced by uint16_t code
问题2:网上查了一些资料,说这个__intrinsic void
__no_operation(void)函数其实就是NOP的变体,如果我们需要改写的话直接写成asm(“nop”)就行。
具体的移植请参见下一个学习笔记,我将会对其作详细介绍。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 python while if 的文章

 

随机推荐