久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4075|回復: 1
打印 上一主題 下一主題
收起左側

msp430g2231在lcd1602顯示自定義字符

[復制鏈接]
跳轉到指定樓層
樓主
ID:110653 發表于 2016-3-30 17:22 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
          自己又蛋疼寫的程序。主要是在1602上寫入自定義字符,可以用h1838遙控,沒有實際意義,做個測試文件,以后自己好再調試。msp430g2231只有8個io口(可以拓展為10個)怎么利用這些io口,我想了個簡單的辦法。紅外遙控占用一個io口,1602只是需要4根線(164驅動的)當然可以節省到2個io口,共占6個io口的,本來打算做個遙控車的,用PWM驅動,但肯跌的是自己不能解決電機反向電流的干擾。一上電機程序就崩潰,無奈,只好這樣了。不過寫入自定義字符確實是件不錯的樂趣。
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                            補充內容:
                                                                                                                                                                                                    圖片暫時無法上傳,看了很多開發板的原理圖,我發現高明的設計不在于用了什么高端的芯片,而是精明的設計,雖然我還不具備這樣的能力,也不知道我理解的怎么樣?先寫下我的思路。

部分程序預覽:
  1. #include"config.h"
  2. uchar const pic[8][8]={
  3. {0x04,0x0E,0x15,0x04,0x04,0x04,0x04,0x00},//↑
  4. {0x00,0x04,0x04,0x04,0x04,0x15,0x0E,0x04},//↓
  5. {0x00,0x04,0x08,0x1F,0x08,0x04,0x00,0x00},//←
  6. {0x00,0x04,0x02,0x1F,0x02,0x04,0x00,0x00},//→
  7. {0x04,0x04,0x0A,0x1F,0x1F,0x0A,0x04,0x04},//占位符
  8. {0x00,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x00},/*暫停*/
  9. {0x11,0x13,0x15,0x19,0x15,0x13,0x11,0x00},/*后退*/
  10. {0x11,0x19,0x15,0x13,0x15,0x19,0x11,0x00},/*"前進*/

  11. };

  12. uchar const pic1[8][8]={
  13. {0x00,0x0E,0x1F,0x11,0x11,0x11,0x11,0x1F},/*電量空*/
  14. {0x00,0x0E,0x1F,0x11,0x11,0x11,0x1F,0x1F},/*一格電*/
  15. {0x00,0x0E,0x1F,0x11,0x11,0x1F,0x1F,0x1F},/*2格電*/
  16. {0x00,0x0E,0x1F,0x11,0x1F,0x1F,0x1F,0x1F},/*3格電*/
  17. {0x00,0x0E,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F},/*4格電滿電*/
  18. {0x00,0x0F,0x09,0x0D,0x0B,0x09,0x11,0x00},/*凡*/
  19. {0x11,0x0E,0x1F,0x11,0x1F,0x04,0x1B,0x04},/*機器人*/
  20. {0x00,0x1F,0x0A,0x0A,0x0A,0x11,0x00,0x00},/*pi*/
  21. };

  22. //音量大小設置1-8
  23. uchar const pic3[8][8]={
  24. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f},/*"未命名文件",1*/
  25. {0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x1f},/*"未命名文件",2*/
  26. {0x00,0x00,0x00,0x00,0x00,0x1f,0x1f,0x1f},/*"未命名文件",3*/
  27. {0x00,0x00,0x00,0x00,0x1f,0x1f,0x1f,0x1f},/*"未命名文件",4*/
  28. {0x00,0x00,0x00,0x1f,0x1f,0x1f,0x1f,0x1f},/*"未命名文件",5*/
  29. {0x00,0x00,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f},/*"未命名文件",6*/
  30. {0x00,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f},/*"未命名文件",7*/
  31. {0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f},/*"未命名文件",8*/
  32. };

  33. uchar flag,flag1,flag2;
  34. uchar flag3,flag4;
  35. //extern void read_xyz_normol();
  36. void extern_1m()
  37. {
  38.    WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  39.   if (CALBC1_1MHZ==0xFF)                                        // If calibration constant erased
  40.   {                                                                                       
  41.     while(1);                               // do not load, trap CPU!!       
  42.   }
  43.   DCOCTL = 0;                               // Select lowest DCOx and MODx settings
  44.   BCSCTL1 = CALBC1_1MHZ;
  45.   DCOCTL = CALDCO_1MHZ;                     // Load 8MHz constants
  46. }
  47. void sendbyte(uchar byte)
  48. {            
  49. uchar c,num;   
  50. num=byte;
  51. for(c=0;c<8;c++)        
  52. {     
  53. P1OUT&=~0x80;
  54. CLK0;   
  55. P1OUT|=num&0x80; //(0x80即十進制的128, 二進制的10000000 按位發送
  56. CLK1;         
  57. num<<=1;   
  58. }
  59. }

  60. // - - 向LCD1602寫指令
  61. void LCD_write_command(uchar dat)
  62. {

  63. LCD_RS_LOW; // - - 指令
  64. //LCD_RW_LOW; // - - 寫入
  65. sendbyte(dat);
  66. //delay_us(10);
  67. LCD_EN_HIGH; // - - 允許
  68. //delay_us(1);
  69. LCD_EN_LOW;
  70. }

  71. // - - 向LCD1602寫數據
  72. void LCD_write_data(uchar dat)
  73. {
  74. LCD_RS_HIGH;// - - 數據
  75. //LCD_RW_LOW;// - - 寫入
  76. sendbyte(dat);
  77. //delay_us(10);
  78. LCD_EN_HIGH;// - - 允許
  79. //delay_us(1);
  80. LCD_EN_LOW;
  81. }

  82. // - - 設置顯示位置
  83. void LCD_set_xy(uchar x,uchar y)
  84. {
  85.   uchar address;
  86.   if(y==1)
  87.   {
  88.     address=0x80+x; // - - 第一行位置
  89.   } else {
  90.     address=0xc0+x; // - - 第二行位置
  91.   }
  92. //    LCD_delay_10us(1);
  93.     LCD_write_command(address);
  94. }

  95. // - - 顯示一個字符函數
  96. void LCD_disp_char(uchar x,uchar y,uchar dat) // - - LCD_disp_char(0,1,0x38); // - - 顯示8
  97. {
  98.     LCD_set_xy(x,y);
  99. //    LCD_delay_10us(1);
  100.     LCD_write_data(dat);
  101. }



  102. // - - 顯示一個字符串函數
  103. void LCD_disp_string(uchar x,uchar y,char *s)
  104. {
  105.   LCD_set_xy(x,y);
  106. // LCD_delay_10us(1);
  107.   while(*s!='\0')
  108.   {
  109.     LCD_write_data(*s);
  110.     s++;
  111.   }
  112. }

  113. void LCD_init(void)
  114. {
  115.   RSEN_INIT;
  116.   CLKDAT_INIT;
  117.   LCD_READ_DIR;
  118. LCD_write_command(0x38); // - - 設置8位格式,2行,5x7
  119. //delay_us(20);
  120. LCD_write_command(0x0c); // - - 整體顯示,關光標,不閃爍
  121. //delay_us(20);
  122. LCD_write_command(0x06); // - - 設定輸入方式,增量不移位
  123. //delay_us(20);
  124. LCD_write_command(0x01); // - - 清除屏幕顯示
  125. //delay_us(200);
  126. }

  127. void lcd1602_write_pic(unsigned char add,uchar const *pic_num)
  128. {
  129. unsigned char i;
  130. add=add<<3;
  131. for(i=0;i<8;i++)
  132. {
  133. LCD_write_command(0x40|add+i);
  134. LCD_write_data(*pic_num++);
  135. }
  136. }

  137. void lcd1602_write_pic_all()//顯示跳變所有顯示
  138. {
  139.   uchar i;
  140.   switch(flag)
  141.   {
  142.   case 0:flag=1;break;
  143.   case 1:flag=0;break;
  144.   default:flag=0;break;
  145.   }
  146.   if(flag==0)
  147.   {
  148.   for(i=0;i<8;i++)
  149.     lcd1602_write_pic(i,pic[i]);
  150.    LCD_disp_string(0,1,"        ");
  151. for(i=0;i<8;i++)
  152.    LCD_disp_char(i,0,i);
  153.   }
  154.   else{
  155. for(i=0;i<8;i++)
  156.     lcd1602_write_pic(i,pic1[i]);
  157. LCD_disp_string(0,0,"        ");
  158. for(i=0;i<8;i++)
  159.    LCD_disp_char(i,1,i);
  160.   }
  161. }

  162. void lcd1602_write_pic_baterry() //自定義數據1
  163. {
  164.   if(flag>=5)
  165.     flag=0;
  166.   lcd1602_write_pic(1,pic1[flag]);
  167.   LCD_disp_char(15,0,1);
  168. }

  169. void lcd1602_write_pic_robot()  //自定義數據0
  170. {
  171.    if(++flag1>=15)
  172.    {
  173.     flag1=0;
  174.     LCD_disp_char(14,0,' ');
  175.    }
  176.    else
  177.    LCD_disp_char(flag1-1,0,' ');
  178.    lcd1602_write_pic(0,pic1[6]);
  179.    LCD_disp_char(flag1,0,0);
  180. }

  181. void lcd1602_write_pic_dian(unsigned char add)  //自定義數據0
  182. {
  183.   if(++flag2==8)
  184.       flag2=0;
  185. lcd1602_write_pic(add,pic[flag2]);  
  186. LCD_disp_char(10,1,add);  

  187. }

  188. void lcd1602_write_pic_volum(unsigned char add)
  189. {
  190. if(flag3>=8)
  191.   flag3=0;
  192. lcd1602_write_pic(add,pic3[flag3]);  
  193. LCD_disp_char(15,1,add);
  194. }

  195. void lcd1602_write_pic_qu(unsigned char add)
  196. {
  197.   if(++flag4>=8)
  198.   flag4=0;
  199.   uchar i;
  200.   for(i=0;i<4;i++)
  201.   {
  202.      lcd1602_write_pic(add+i,pic3[(i+flag4)%8]);  
  203.      LCD_disp_char(i,1,add+i);
  204.   }
  205. }

  206. void sendbyte_4wire(char date)
  207. {
  208.   uchar i;
  209.   for(i=0;i<2;i++)
  210.   {
  211.     LCD_EN_HIGH;
  212.     sendbyte(date);
  213.     LCD_EN_LOW;
  214.     date<<=4;
  215.   }
  216. }

  217. void lcd_4wire(uchar cd,uchar date)
  218. {
  219.   if(cd==0)
  220.     LCD_RS_LOW;
  221.   else LCD_RS_HIGH;
  222.   sendbyte_4wire(date);
  223. }

  224. void lcd_4wire_init()
  225. {
  226.     RSEN_INIT;
  227.   CLKDAT_INIT;
  228.   lcd_4wire(0,0x28);
  229.   lcd_4wire(0,0x0f);
  230.   lcd_4wire(0,0x06);
  231.   lcd_4wire(0,0x01);
  232.   lcd_4wire(0,0x80);
  233. }

  234. void lcd_4wire_setxy(uchar x,uchar y)
  235. {
  236.   uchar address;
  237.   if(y==1)
  238.   {
  239.     address=0x80+x; // - - 第一行位置
  240.   } else {
  241.     address=0xc0+x; // - - 第二行位置
  242.   }
  243. //    LCD_delay_10us(1);
  244.    lcd_4wire(0,address);
  245. }

  246. void LCD_4wire_disp_char(uchar x,uchar y,uchar  dat) // - - LCD_disp_char(0,1,0x38); // - - 顯示8
  247. {
  248.     lcd_4wire_setxy(x,y);
  249. //    LCD_delay_10us(1);
  250.     lcd_4wire(1,dat);
  251. }

  252. // - - 顯示一個字符串函數
  253. void lcd_4wire_disp_string(uchar x,uchar y,char *s)
  254. {
  255.   lcd_4wire_setxy(x,y);
  256. // LCD_delay_10us(1);
  257.   while(*s!='\0')
  258.   {
  259.     lcd_4wire(1,*s);
  260.     s++;
  261.   }
  262. }

  263. void init_TA()
  264. {
  265.   TACCTL0 = CCIE;                           // TACCR0 interrupt enabled
  266.   TACCR0 = 50000;                            //400ms中斷一次
  267.   TACTL = TASSEL_2 + MC_1+ID_3;                  // SMCLK, upmode
  268. }


  269. #pragma vector=TIMER0_A0_VECTOR  
  270. __interrupt void Timer_A (void)
  271. {
  272.   
  273. //  LCD_disp_char(0,0,'F');
  274. // lcd_4wire_disp_string(0,0,"wo shi");
  275. // lcd1602_write_pic_all();
  276. lcd1602_write_pic_baterry();
  277. lcd1602_write_pic_robot();
  278. lcd1602_write_pic_dian(2);
  279. lcd1602_write_pic_volum(3);
  280. lcd1602_write_pic_qu(4);
  281. //read_xyz_normol();
  282. }


復制代碼

      

液晶顯示.rar

38.72 KB, 下載次數: 7, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:117823 發表于 2016-6-4 02:11 來自手機 | 只看該作者
在1602上顯示四線的可以,164轉兩線的也可以,iicpcf8574,74hc595均可以,在1m時鐘下可以不延時,在8m時鐘下可以不延時,在16m時鐘下一定要延時。下

評分

參與人數 1黑幣 +40 收起 理由
admin + 40 很給力!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 粉嫩av在线| 麻豆成人在线视频 | 日本一区二区在线视频 | 精品久久久久久久久久 | 亚洲精品免费在线 | 一区二区三区国产好 | 一区二区三区不卡视频 | 国产成都精品91一区二区三 | 午夜天堂 | 成人午夜影院 | 国产精品久久久久久福利一牛影视 | 青青草综合网 | 国产精品久久久久久久久婷婷 | 日韩高清中文字幕 | 九九九视频 | 蜜月aⅴ国产精品 | 国产乱码精品一区二区三区中文 | 日本一区二区三区在线观看 | 亚洲男人天堂 | 日韩精品一区二区在线 | 国产精品久久久久久久久久三级 | 91在线精品视频 | www九色| 亚洲精品欧美一区二区三区 | 欧美亚洲国产日韩 | 午夜影院在线观看免费 | 999精品在线 | 九久久 | 黄色骚片 | 噜噜噜噜狠狠狠7777视频 | 欧美aⅴ| 成人超碰| 久久成人综合 | 污片在线免费观看 | 久久久久久黄 | 羞羞视频网站在线观看 | 亚洲一区精品在线 | 国产精品久久久久无码av | 日韩欧美天堂 | 精品一区二区不卡 | 日韩在线免费视频 |