欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
msp430g2231在lcd1602顯示自定義字符
[打印本頁]
作者:
hubaba
時間:
2016-3-30 17:22
標題:
msp430g2231在lcd1602顯示自定義字符
自己又蛋疼寫的程序。主要是在1602上寫入自定義字符,可以用h1838遙控,沒有實際意義,做個測試文件,以后自己好再調(diào)試。msp430g2231只有8個io口(可以拓展為10個)怎么利用這些io口,我想了個簡單的辦法。紅外遙控占用一個io口,1602只是需要4根線(164驅(qū)動的)當然可以節(jié)省到2個io口,共占6個io口的,本來打算做個遙控車的,用PWM驅(qū)動,但肯跌的是自己不能解決電機反向電流的干擾。一上電機程序就崩潰,無奈,只好這樣了。不過寫入自定義字符確實是件不錯的樂趣。
補充內(nèi)容:
圖片暫時無法上傳,看了很多開發(fā)板的原理圖,我發(fā)現(xiàn)高明的設(shè)計不在于用了什么高端的芯片,而是精明的設(shè)計,雖然我還不具備這樣的能力,也不知道我理解的怎么樣?先寫下我的思路。
部分程序預覽:
#include"config.h"
uchar const pic[8][8]={
{0x04,0x0E,0x15,0x04,0x04,0x04,0x04,0x00},//↑
{0x00,0x04,0x04,0x04,0x04,0x15,0x0E,0x04},//↓
{0x00,0x04,0x08,0x1F,0x08,0x04,0x00,0x00},//←
{0x00,0x04,0x02,0x1F,0x02,0x04,0x00,0x00},//→
{0x04,0x04,0x0A,0x1F,0x1F,0x0A,0x04,0x04},//占位符
{0x00,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x00},/*暫停*/
{0x11,0x13,0x15,0x19,0x15,0x13,0x11,0x00},/*后退*/
{0x11,0x19,0x15,0x13,0x15,0x19,0x11,0x00},/*"前進*/
};
uchar const pic1[8][8]={
{0x00,0x0E,0x1F,0x11,0x11,0x11,0x11,0x1F},/*電量空*/
{0x00,0x0E,0x1F,0x11,0x11,0x11,0x1F,0x1F},/*一格電*/
{0x00,0x0E,0x1F,0x11,0x11,0x1F,0x1F,0x1F},/*2格電*/
{0x00,0x0E,0x1F,0x11,0x1F,0x1F,0x1F,0x1F},/*3格電*/
{0x00,0x0E,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F},/*4格電滿電*/
{0x00,0x0F,0x09,0x0D,0x0B,0x09,0x11,0x00},/*凡*/
{0x11,0x0E,0x1F,0x11,0x1F,0x04,0x1B,0x04},/*機器人*/
{0x00,0x1F,0x0A,0x0A,0x0A,0x11,0x00,0x00},/*pi*/
};
//音量大小設(shè)置1-8
uchar const pic3[8][8]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f},/*"未命名文件",1*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x1f},/*"未命名文件",2*/
{0x00,0x00,0x00,0x00,0x00,0x1f,0x1f,0x1f},/*"未命名文件",3*/
{0x00,0x00,0x00,0x00,0x1f,0x1f,0x1f,0x1f},/*"未命名文件",4*/
{0x00,0x00,0x00,0x1f,0x1f,0x1f,0x1f,0x1f},/*"未命名文件",5*/
{0x00,0x00,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f},/*"未命名文件",6*/
{0x00,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f},/*"未命名文件",7*/
{0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f},/*"未命名文件",8*/
};
uchar flag,flag1,flag2;
uchar flag3,flag4;
//extern void read_xyz_normol();
void extern_1m()
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
if (CALBC1_1MHZ==0xFF) // If calibration constant erased
{
while(1); // do not load, trap CPU!!
}
DCOCTL = 0; // Select lowest DCOx and MODx settings
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ; // Load 8MHz constants
}
void sendbyte(uchar byte)
{
uchar c,num;
num=byte;
for(c=0;c<8;c++)
{
P1OUT&=~0x80;
CLK0;
P1OUT|=num&0x80; //(0x80即十進制的128, 二進制的10000000 按位發(fā)送
CLK1;
num<<=1;
}
}
// - - 向LCD1602寫指令
void LCD_write_command(uchar dat)
{
LCD_RS_LOW; // - - 指令
//LCD_RW_LOW; // - - 寫入
sendbyte(dat);
//delay_us(10);
LCD_EN_HIGH; // - - 允許
//delay_us(1);
LCD_EN_LOW;
}
// - - 向LCD1602寫數(shù)據(jù)
void LCD_write_data(uchar dat)
{
LCD_RS_HIGH;// - - 數(shù)據(jù)
//LCD_RW_LOW;// - - 寫入
sendbyte(dat);
//delay_us(10);
LCD_EN_HIGH;// - - 允許
//delay_us(1);
LCD_EN_LOW;
}
// - - 設(shè)置顯示位置
void LCD_set_xy(uchar x,uchar y)
{
uchar address;
if(y==1)
{
address=0x80+x; // - - 第一行位置
} else {
address=0xc0+x; // - - 第二行位置
}
// LCD_delay_10us(1);
LCD_write_command(address);
}
// - - 顯示一個字符函數(shù)
void LCD_disp_char(uchar x,uchar y,uchar dat) // - - LCD_disp_char(0,1,0x38); // - - 顯示8
{
LCD_set_xy(x,y);
// LCD_delay_10us(1);
LCD_write_data(dat);
}
// - - 顯示一個字符串函數(shù)
void LCD_disp_string(uchar x,uchar y,char *s)
{
LCD_set_xy(x,y);
// LCD_delay_10us(1);
while(*s!='\0')
{
LCD_write_data(*s);
s++;
}
}
void LCD_init(void)
{
RSEN_INIT;
CLKDAT_INIT;
LCD_READ_DIR;
LCD_write_command(0x38); // - - 設(shè)置8位格式,2行,5x7
//delay_us(20);
LCD_write_command(0x0c); // - - 整體顯示,關(guān)光標,不閃爍
//delay_us(20);
LCD_write_command(0x06); // - - 設(shè)定輸入方式,增量不移位
//delay_us(20);
LCD_write_command(0x01); // - - 清除屏幕顯示
//delay_us(200);
}
void lcd1602_write_pic(unsigned char add,uchar const *pic_num)
{
unsigned char i;
add=add<<3;
for(i=0;i<8;i++)
{
LCD_write_command(0x40|add+i);
LCD_write_data(*pic_num++);
}
}
void lcd1602_write_pic_all()//顯示跳變所有顯示
{
uchar i;
switch(flag)
{
case 0:flag=1;break;
case 1:flag=0;break;
default:flag=0;break;
}
if(flag==0)
{
for(i=0;i<8;i++)
lcd1602_write_pic(i,pic[i]);
LCD_disp_string(0,1," ");
for(i=0;i<8;i++)
LCD_disp_char(i,0,i);
}
else{
for(i=0;i<8;i++)
lcd1602_write_pic(i,pic1[i]);
LCD_disp_string(0,0," ");
for(i=0;i<8;i++)
LCD_disp_char(i,1,i);
}
}
void lcd1602_write_pic_baterry() //自定義數(shù)據(jù)1
{
if(flag>=5)
flag=0;
lcd1602_write_pic(1,pic1[flag]);
LCD_disp_char(15,0,1);
}
void lcd1602_write_pic_robot() //自定義數(shù)據(jù)0
{
if(++flag1>=15)
{
flag1=0;
LCD_disp_char(14,0,' ');
}
else
LCD_disp_char(flag1-1,0,' ');
lcd1602_write_pic(0,pic1[6]);
LCD_disp_char(flag1,0,0);
}
void lcd1602_write_pic_dian(unsigned char add) //自定義數(shù)據(jù)0
{
if(++flag2==8)
flag2=0;
lcd1602_write_pic(add,pic[flag2]);
LCD_disp_char(10,1,add);
}
void lcd1602_write_pic_volum(unsigned char add)
{
if(flag3>=8)
flag3=0;
lcd1602_write_pic(add,pic3[flag3]);
LCD_disp_char(15,1,add);
}
void lcd1602_write_pic_qu(unsigned char add)
{
if(++flag4>=8)
flag4=0;
uchar i;
for(i=0;i<4;i++)
{
lcd1602_write_pic(add+i,pic3[(i+flag4)%8]);
LCD_disp_char(i,1,add+i);
}
}
void sendbyte_4wire(char date)
{
uchar i;
for(i=0;i<2;i++)
{
LCD_EN_HIGH;
sendbyte(date);
LCD_EN_LOW;
date<<=4;
}
}
void lcd_4wire(uchar cd,uchar date)
{
if(cd==0)
LCD_RS_LOW;
else LCD_RS_HIGH;
sendbyte_4wire(date);
}
void lcd_4wire_init()
{
RSEN_INIT;
CLKDAT_INIT;
lcd_4wire(0,0x28);
lcd_4wire(0,0x0f);
lcd_4wire(0,0x06);
lcd_4wire(0,0x01);
lcd_4wire(0,0x80);
}
void lcd_4wire_setxy(uchar x,uchar y)
{
uchar address;
if(y==1)
{
address=0x80+x; // - - 第一行位置
} else {
address=0xc0+x; // - - 第二行位置
}
// LCD_delay_10us(1);
lcd_4wire(0,address);
}
void LCD_4wire_disp_char(uchar x,uchar y,uchar dat) // - - LCD_disp_char(0,1,0x38); // - - 顯示8
{
lcd_4wire_setxy(x,y);
// LCD_delay_10us(1);
lcd_4wire(1,dat);
}
// - - 顯示一個字符串函數(shù)
void lcd_4wire_disp_string(uchar x,uchar y,char *s)
{
lcd_4wire_setxy(x,y);
// LCD_delay_10us(1);
while(*s!='\0')
{
lcd_4wire(1,*s);
s++;
}
}
void init_TA()
{
TACCTL0 = CCIE; // TACCR0 interrupt enabled
TACCR0 = 50000; //400ms中斷一次
TACTL = TASSEL_2 + MC_1+ID_3; // SMCLK, upmode
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
// LCD_disp_char(0,0,'F');
// lcd_4wire_disp_string(0,0,"wo shi");
// lcd1602_write_pic_all();
lcd1602_write_pic_baterry();
lcd1602_write_pic_robot();
lcd1602_write_pic_dian(2);
lcd1602_write_pic_volum(3);
lcd1602_write_pic_qu(4);
//read_xyz_normol();
}
復制代碼
液晶顯示.rar
2016-3-30 17:22 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
38.72 KB, 下載次數(shù): 7, 下載積分: 黑幣 -5
作者:
51hei電控2112311
時間:
2016-6-4 02:11
在1602上顯示四線的可以,164轉(zhuǎn)兩線的也可以,iicpcf8574,74hc595均可以,在1m時鐘下可以不延時,在8m時鐘下可以不延時,在16m時鐘下一定要延時。下
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1