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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4227|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

中景園OLED帶字庫顯示變量程序求指導(dǎo)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:230847 發(fā)表于 2019-11-2 16:07 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
使用的是中景園0.96寸OLED帶字庫屏幕。把示例程序改了一下。想顯示數(shù)字變量,但沒法顯示。下面是我的代碼。請(qǐng)各位師傅指導(dǎo)一下,是不是和指針,指針變量有關(guān)系。謝謝
  1. 主程序
  2. #include "all.h"

  3. void OLED_Display_Allot()//想通過X_Num顯示頻率這個(gè)數(shù)字變量
  4. {
  5.         uchar X_Num;//顯示一個(gè)變量
  6.         uchar *str;
  7.         str=&X_Num;
  8.         display_GB2312_string(2,20,str);//變量顯示不了,請(qǐng)指導(dǎo)一下
  9. }
  10. void OLED_Display_Init()
  11. {
  12.         Rom_CS=1;
  13.         lcd_cs1=0;
  14.         initial_lcd();       
  15.         clear_screen();
  16.         display_GB2312_string(0,1,"電機(jī)|頻率|狀態(tài)*");        /*在第1頁,第1列,顯示一串16x16點(diǎn)陣漢字或8x16的ASCII字*/
  17.         display_GB2312_string(2,1,"X:");  /*顯示一串16x16點(diǎn)陣漢字或8x16的ASCII字.以下雷同*/
  18.         display_GB2312_string(4,1,"Y:");
  19.         display_GB2312_string(6,1,"Z:");
  20.         display_GB2312_string(2,52,"HZ");  /*顯示一串16x16點(diǎn)陣漢字或8x16的ASCII字.以下雷同*/
  21.         display_GB2312_string(4,52,"HZ");
  22.         display_GB2312_string(6,52,"HZ");               
  23. }
  24. void main()
  25. {
  26.         P0M0=0;P0M1=0;
  27.         P1M0=0;P1M1=0;
  28.         P2M0=0;P2M1=0;
  29.         P3M0=0;P3M1=0;
  30.         P4M0=0;P4M1=0;
  31.         P5M0=0;P5M1=0;
  32.         Uart1_Init();
  33.         OLED_Display_Init();
  34.         while(1)
  35.         {
  36.                 OLED_Display_Allot();
  37.         }
  38.        
  39. }
復(fù)制代碼
  1. OLED驅(qū)動(dòng)程序
  2. #include "all.h"
  3. ulong  fontaddr=0;
  4. uchar code bmp1[]={
  5. //--  調(diào)入了一幅圖像:D:\我的文檔\My Pictures\12864-555.bmp  --*/
  6. //--  寬度x高度=128x64  --
  7. 0x00,0x06,0x0A,0xFE,0x0A,0xC6,0x00,0xE0,0x00,0xF0,0x00,0xF8,0x00,0x00,0x00,0x00,
  8. 0x00,0x00,0xFE,0x7D,0xBB,0xC7,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xC7,0xBB,0x7D,
  9. 0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  10. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  11. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  12. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,
  13. 0x0C,0xFE,0xFE,0x0C,0x08,0x20,0x60,0xFE,0xFE,0x60,0x20,0x00,0x00,0x00,0x78,0x48,
  14. 0xFE,0x82,0xBA,0xBA,0x82,0xBA,0xBA,0x82,0xBA,0xBA,0x82,0xBA,0xBA,0x82,0xFE,0x00,
  15. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  16. 0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
  17. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  18. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  19. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  20. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  21. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  22. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  23. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  24. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,
  25. 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0xFF,0xFF,0x00,0x00,0xFE,0xFF,0x03,
  26. 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0xFF,0xFE,0x00,0x00,0x00,0x00,0xC0,0xC0,
  27. 0xC0,0x00,0x00,0x00,0x00,0xFE,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
  28. 0xFF,0xFE,0x00,0x00,0xFE,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0xFF,
  29. 0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  30. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  31. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  32. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,
  33. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x0C,
  34. 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0xFF,0xFF,0x00,0x00,0x00,0x00,0xE1,0xE1,
  35. 0xE1,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  36. 0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0xFF,
  37. 0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  38. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  39. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  40. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x1F,
  41. 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0x0F,0x00,0x00,0x0F,0x1F,0x18,
  42. 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,
  43. 0x00,0x00,0x00,0x00,0x00,0x0F,0x1F,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
  44. 0x1F,0x0F,0x00,0x00,0x0F,0x1F,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,
  45. 0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  46. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  47. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  48. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  49. 0x00,0x00,0x00,0x00,0x00,0xE2,0x92,0x8A,0x86,0x00,0x00,0x7C,0x82,0x82,0x82,0x7C,
  50. 0x00,0xFE,0x00,0x82,0x92,0xAA,0xC6,0x00,0x00,0xC0,0xC0,0x00,0x7C,0x82,0x82,0x82,
  51. 0x7C,0x00,0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0xC0,0xC0,0x00,0x7C,0x82,0x82,0x82,
  52. 0x7C,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  53. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  54. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  55. 0x00,0x24,0xA4,0x2E,0x24,0xE4,0x24,0x2E,0xA4,0x24,0x00,0x00,0x00,0xF8,0x4A,0x4C,
  56. 0x48,0xF8,0x48,0x4C,0x4A,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  57. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  58. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  59. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  60. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  61. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x20,0x10,0x10,
  62. 0x10,0x10,0x20,0xC0,0x00,0x00,0xC0,0x20,0x10,0x10,0x10,0x10,0x20,0xC0,0x00,0x00,
  63. 0x00,0x12,0x0A,0x07,0x02,0x7F,0x02,0x07,0x0A,0x12,0x00,0x00,0x00,0x0B,0x0A,0x0A,
  64. 0x0A,0x7F,0x0A,0x0A,0x0A,0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  65. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  66. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  67. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  68. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  69. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x40,0x40,
  70. 0x40,0x50,0x20,0x5F,0x80,0x00,0x1F,0x20,0x40,0x40,0x40,0x50,0x20,0x5F,0x80,0x00,
  71. };       
  72. uchar code jiong1[]={/*--  文字:  囧  --*/
  73. /*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16   --*/
  74. 0x00,0xFE,0x82,0x42,0xA2,0x9E,0x8A,0x82,0x86,0x8A,0xB2,0x62,0x02,0xFE,0x00,0x00,
  75. 0x00,0x7F,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x7F,0x00,0x00};
  76. uchar code lei1[]={/*--  文字:  畾  --*/
  77. /*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16   --*/
  78. 0x80,0x80,0x80,0xBF,0xA5,0xA5,0xA5,0x3F,0xA5,0xA5,0xA5,0xBF,0x80,0x80,0x80,0x00,
  79. 0x7F,0x24,0x24,0x3F,0x24,0x24,0x7F,0x00,0x7F,0x24,0x24,0x3F,0x24,0x24,0x7F,0x00};


  80. /*寫指令到LCD模塊*/
  81. void transfer_command_lcd(int data1)   
  82. {
  83.         char i;
  84.         lcd_rs=0;
  85.         lcd_sclk=0;
  86.         for(i=0;i<8;i++)
  87.    {
  88.                
  89.                 if(data1&0x80) lcd_sid=1;
  90.                 else lcd_sid=0;
  91.                 lcd_sclk=1;
  92.                 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  93.                  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  94.                 lcd_sclk=0;
  95.                  data1<<=1;
  96.    }
  97. }

  98. /*寫數(shù)據(jù)到LCD模塊*/
  99. void transfer_data_lcd(int data1)
  100. {
  101.         char i;
  102.         lcd_rs=1;
  103.         lcd_sclk=0;
  104.         for(i=0;i<8;i++)
  105.    {
  106.                
  107.                 if(data1&0x80) lcd_sid=1;
  108.                 else lcd_sid=0;
  109.                 lcd_sclk=1;
  110.                 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  111.                  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  112.                 lcd_sclk=0;
  113.                  data1<<=1;
  114.    }
  115. }
  116. /*延時(shí)*/
  117. void delay(int n_ms)               
  118. {
  119. int j,k;
  120. for(j=0;j<n_ms;j++)
  121. for(k=0;k<110;k++);
  122. }
  123. /*LCD模塊初始化*/
  124. void initial_lcd()
  125. {
  126.         lcd_cs1=0;
  127.         Rom_CS = 1;

  128.         delay(20);

  129.         delay(20);        
  130.         transfer_command_lcd(0xAE);   //display off
  131.         transfer_command_lcd(0x20);        //Set Memory Addressing Mode       
  132.         transfer_command_lcd(0x10);        //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid
  133.         transfer_command_lcd(0xb0);        //Set Page Start Address for Page Addressing Mode,0-7
  134.         transfer_command_lcd(0xc8);        //Set COM Output Scan Direction
  135.         transfer_command_lcd(0x00);//---set low column address
  136.         transfer_command_lcd(0x10);//---set high column address
  137.         transfer_command_lcd(0x40);//--set start line address
  138.         transfer_command_lcd(0x81);//--set contrast control register
  139.         transfer_command_lcd(0x7f);
  140.         transfer_command_lcd(0xa1);//--set segment re-map 0 to 127
  141.         transfer_command_lcd(0xa6);//--set normal display
  142.         transfer_command_lcd(0xa8);//--set multiplex ratio(1 to 64)
  143.         transfer_command_lcd(0x3F);//
  144.         transfer_command_lcd(0xa4);//0xa4,Output follows RAM content;0xa5,Output ignores RAM content
  145.         transfer_command_lcd(0xd3);//-set display offset
  146.         transfer_command_lcd(0x00);//-not offset
  147.         transfer_command_lcd(0xd5);//--set display clock divide ratio/oscillator frequency
  148.         transfer_command_lcd(0xf0);//--set divide ratio
  149.         transfer_command_lcd(0xd9);//--set pre-charge period
  150.         transfer_command_lcd(0x22); //
  151.         transfer_command_lcd(0xda);//--set com pins hardware configuration
  152.         transfer_command_lcd(0x12);
  153.         transfer_command_lcd(0xdb);//--set vcomh
  154.         transfer_command_lcd(0x20);//0x20,0.77xVcc
  155.         transfer_command_lcd(0x8d);//--set DC-DC enable
  156.         transfer_command_lcd(0x14);//
  157.         transfer_command_lcd(0xaf);//--turn on oled panel
  158.         lcd_cs1=1;
  159. }

  160. void lcd_address(uchar page,uchar column)
  161. {

  162.         transfer_command_lcd(0xb0 + column);   /*設(shè)置頁地址*/
  163.         transfer_command_lcd(((page & 0xf0) >> 4) | 0x10);        /*設(shè)置列地址的高4位*/
  164.         transfer_command_lcd((page & 0x0f) | 0x00);        /*設(shè)置列地址的低4位*/       
  165. }

  166. /*全屏清屏*/
  167. void clear_screen()
  168. {
  169.         uchar i,j;
  170.         lcd_cs1=0;
  171.         Rom_CS = 1;       
  172.         for(i=0;i<8;i++)
  173.         {
  174.                 transfer_command_lcd(0xb0+i);
  175.                 transfer_command_lcd(0x00);
  176.                 transfer_command_lcd(0x10);
  177.                 for(j=0;j<128;j++)
  178.                 {
  179.                         transfer_data_lcd(0x00);
  180.                 }
  181.         }
  182.         lcd_cs1=1;       
  183. }


  184. /*顯示128x64點(diǎn)陣圖像*/
  185. void display_128x64(uchar *dp)
  186. {
  187.         uint i,j;
  188.         lcd_cs1=0;
  189.         for(j=0;j<8;j++)
  190.         {
  191.                 lcd_address(0,j);
  192.                 for (i=0;i<128;i++)
  193.                 {       
  194.                         transfer_data_lcd(*dp);                                        /*寫數(shù)據(jù)到LCD,每寫完一個(gè)8位的數(shù)據(jù)后列地址自動(dòng)加1*/
  195.                         dp++;
  196.                 }
  197.         }
  198.         lcd_cs1=1;
  199. }


  200. /*顯示16x16點(diǎn)陣圖像、漢字、生僻字或16x16點(diǎn)陣的其他圖標(biāo)*/
  201. void display_graphic_16x16(uint page,uint column,uchar *dp)
  202. {
  203.         uint i,j;
  204.         lcd_cs1=0;
  205.         Rom_CS = 1;        
  206.         for(j=2;j>0;j--)
  207.         {
  208.                 lcd_address(column,page);
  209.                 for (i=0;i<16;i++)
  210.                 {       
  211.                         transfer_data_lcd(*dp);                                        /*寫數(shù)據(jù)到LCD,每寫完一個(gè)8位的數(shù)據(jù)后列地址自動(dòng)加1*/
  212.                         dp++;
  213.                 }
  214.                 page++;
  215.         }
  216.         lcd_cs1=1;
  217. }


  218. /*顯示8x16點(diǎn)陣圖像、ASCII, 或8x16點(diǎn)陣的自造字符、其他圖標(biāo)*/
  219. void display_graphic_8x16(uint page,uchar column,uchar *dp)
  220. {
  221.         uint i,j;
  222.         lcd_cs1=0;       
  223.         for(j=2;j>0;j--)
  224.         {
  225.                 lcd_address(column,page);
  226.                 for (i=0;i<8;i++)
  227.                 {       
  228.                         transfer_data_lcd(*dp);                                        /*寫數(shù)據(jù)到LCD,每寫完一個(gè)8位的數(shù)據(jù)后列地址自動(dòng)加1*/
  229.                         dp++;
  230.                 }
  231.                 page++;
  232.         }
  233.         lcd_cs1=1;
  234. }


  235. /*顯示5*7點(diǎn)陣圖像、ASCII, 或5x7點(diǎn)陣的自造字符、其他圖標(biāo)*/
  236. void display_graphic_5x7(uint page,uchar column,uchar *dp)
  237. {
  238.         uint col_cnt;
  239.         uchar page_address;
  240.         uchar column_address_L,column_address_H;
  241.         page_address = 0xb0+page-1;
  242.        
  243.         lcd_cs1=0;       
  244.        
  245.         column_address_L =(column&0x0f)-1;
  246.         column_address_H =((column>>4)&0x0f)+0x10;
  247.        
  248.         transfer_command_lcd(page_address);                 /*Set Page Address*/
  249.         transfer_command_lcd(column_address_H);        /*Set MSB of column Address*/
  250.         transfer_command_lcd(column_address_L);        /*Set LSB of column Address*/
  251.        
  252.         for (col_cnt=0;col_cnt<6;col_cnt++)
  253.         {       
  254.                 transfer_data_lcd(*dp);
  255.                 dp++;
  256.         }
  257.         lcd_cs1=1;
  258. }

  259. /****送指令到晶聯(lián)訊字庫IC***/
  260. void send_command_to_ROM( uchar datu )
  261. {
  262.         uchar i;
  263.         for(i=0;i<8;i++ )
  264.         {
  265.                 if(datu&0x80)
  266.                         lcd_sid = 1;
  267.                 else
  268.                         lcd_sid = 0;
  269.                         datu = datu<<1;
  270.                         lcd_sclk=0;
  271.                         lcd_sclk=1;
  272.         }
  273. }

  274. /****從晶聯(lián)訊字庫IC中取漢字或字符數(shù)據(jù)(1個(gè)字節(jié))***/
  275. static uchar get_data_from_ROM( )
  276. {
  277.        
  278.         uchar i;
  279.         uchar ret_data=0;
  280.         lcd_sclk=1;
  281.         for(i=0;i<8;i++)
  282.         {
  283.                 Rom_OUT=1;
  284.                 lcd_sclk=0;
  285.                 ret_data=ret_data<<1;
  286.                 if( Rom_OUT )
  287.                         ret_data=ret_data+1;
  288.                 else
  289.                         ret_data=ret_data+0;
  290.                 lcd_sclk=1;
  291.         }
  292.         return(ret_data);
  293. }



  294. /*從相關(guān)地址(addrHigh:地址高字節(jié),addrMid:地址中字節(jié),addrLow:地址低字節(jié))中連續(xù)讀出DataLen個(gè)字節(jié)的數(shù)據(jù)到 pBuff的地址*/
  295. /*連續(xù)讀取*/
  296. void get_n_bytes_data_from_ROM(uchar addrHigh,uchar addrMid,uchar addrLow,uchar *pBuff,uchar DataLen )
  297. {
  298.         uchar i;
  299.         Rom_CS = 0;
  300.         lcd_cs1=1;       
  301.         lcd_sclk=0;
  302.         send_command_to_ROM(0x03);
  303.         send_command_to_ROM(addrHigh);
  304.         send_command_to_ROM(addrMid);
  305.         send_command_to_ROM(addrLow);
  306.         for(i = 0; i < DataLen; i++ )
  307.              *(pBuff+i) =get_data_from_ROM();
  308.         Rom_CS = 1;
  309. }


  310. /******************************************************************/
  311. void display_GB2312_string(uchar y,uchar x,uchar *text)
  312. {
  313.         uchar i= 0;
  314.         uchar addrHigh,addrMid,addrLow ;
  315.         uchar fontbuf[32];                       
  316.         while((text[i]>0x00))
  317.         {
  318.                 if(((text[i]>=0xb0) &&(text[i]<=0xf7))&&(text[i+1]>=0xa1))
  319.                 {                                               
  320.                         /*國標(biāo)簡(jiǎn)體(GB2312)漢字在晶聯(lián)訊字庫IC中的地址由以下公式來計(jì)算:*/
  321.                         /*Address = ((MSB - 0xB0) * 94 + (LSB - 0xA1)+ 846)*32+ BaseAdd;BaseAdd=0*/
  322.                         /*由于擔(dān)心8位單片機(jī)有乘法溢出問題,所以分三部取地址*/
  323.                         fontaddr = (text[i]- 0xb0)*94;
  324.                         fontaddr += (text[i+1]-0xa1)+846;
  325.                         fontaddr = (ulong)(fontaddr*32);
  326.                        
  327.                         addrHigh = (fontaddr&0xff0000)>>16;  /*地址的高8位,共24位*/
  328.                         addrMid = (fontaddr&0xff00)>>8;      /*地址的中8位,共24位*/
  329.                         addrLow = fontaddr&0xff;             /*地址的低8位,共24位*/
  330.                         get_n_bytes_data_from_ROM(addrHigh,addrMid,addrLow,fontbuf,32 );/*取32個(gè)字節(jié)的數(shù)據(jù),存到"fontbuf[32]"*/
  331.                         display_graphic_16x16(y,x,fontbuf);/*顯示漢字到LCD上,y為頁地址,x為列地址,fontbuf[]為數(shù)據(jù)*/
  332.                         i+=2;
  333.                         x+=16;
  334.                 }
  335.                 else if(((text[i]>=0xa1) &&(text[i]<=0xa3))&&(text[i+1]>=0xa1))
  336.                 {                                               
  337.                         /*國標(biāo)簡(jiǎn)體(GB2312)15x16點(diǎn)的字符在晶聯(lián)訊字庫IC中的地址由以下公式來計(jì)算:*/
  338.                         /*Address = ((MSB - 0xa1) * 94 + (LSB - 0xA1))*32+ BaseAdd;BaseAdd=0*/
  339.                         /*由于擔(dān)心8位單片機(jī)有乘法溢出問題,所以分三部取地址*/
  340.                         fontaddr = (text[i]- 0xa1)*94;
  341.                         fontaddr += (text[i+1]-0xa1);
  342.                         fontaddr = (ulong)(fontaddr*32);
  343.                        
  344.                         addrHigh = (fontaddr&0xff0000)>>16;  /*地址的高8位,共24位*/
  345.                         addrMid = (fontaddr&0xff00)>>8;      /*地址的中8位,共24位*/
  346.                         addrLow = fontaddr&0xff;             /*地址的低8位,共24位*/
  347.                         get_n_bytes_data_from_ROM(addrHigh,addrMid,addrLow,fontbuf,32 );/*取32個(gè)字節(jié)的數(shù)據(jù),存到"fontbuf[32]"*/
  348.                         display_graphic_16x16(y,x,fontbuf);/*顯示漢字到LCD上,y為頁地址,x為列地址,fontbuf[]為數(shù)據(jù)*/
  349.                         i+=2;
  350.                         x+=16;
  351.                 }
  352.                 else if((text[i]>=0x20) &&(text[i]<=0x7e))       
  353.                 {                                               
  354.                         unsigned char fontbuf[16];                       
  355.                         fontaddr = (text[i]- 0x20);
  356.                         fontaddr = (unsigned long)(fontaddr*16);
  357.                         fontaddr = (unsigned long)(fontaddr+0x3cf80);                       
  358.                         addrHigh = (fontaddr&0xff0000)>>16;
  359.                         addrMid = (fontaddr&0xff00)>>8;
  360.                         addrLow = fontaddr&0xff;

  361.                         get_n_bytes_data_from_ROM(addrHigh,addrMid,addrLow,fontbuf,16 );/*取16個(gè)字節(jié)的數(shù)據(jù),存到"fontbuf[32]"*/
  362.                        
  363.                         display_graphic_8x16(y,x,fontbuf);/*顯示8x16的ASCII字到LCD上,y為頁地址,x為列地址,fontbuf[]為數(shù)據(jù)*/
  364.                         i+=1;
  365.                         x+=8;
  366.                 }
  367.                 else
  368.                         i++;       
  369.         }       
  370. }

  371. void display_string_5x7(uchar y,uchar x,uchar *text)
  372. {
  373.         unsigned char i= 0;
  374.         unsigned char addrHigh,addrMid,addrLow ;
  375.         while((text[i]>0x00))
  376.         {
  377.                
  378.                 if((text[i]>=0x20) &&(text[i]<=0x7e))       
  379.                 {                                               
  380.                         unsigned char fontbuf[8];                       
  381.                         fontaddr = (text[i]- 0x20);
  382.                         fontaddr = (unsigned long)(fontaddr*8);
  383.                         fontaddr = (unsigned long)(fontaddr+0x3bfc0);                       
  384.                         addrHigh = (fontaddr&0xff0000)>>16;
  385.                         addrMid = (fontaddr&0xff00)>>8;
  386.                         addrLow = fontaddr&0xff;

  387.                         get_n_bytes_data_from_ROM(addrHigh,addrMid,addrLow,fontbuf,8);/*取8個(gè)字節(jié)的數(shù)據(jù),存到"fontbuf[32]"*/
  388.                        
  389.                         display_graphic_5x7(y,x,fontbuf);/*顯示5x7的ASCII字到LCD上,y為頁地址,x為列地址,fontbuf[]為數(shù)據(jù)*/
  390.                         i+=1;
  391.                         x+=6;
  392.                 }
  393.                 else
  394.                 i++;       
  395.         }       
  396. }

復(fù)制代碼
  1. 頭文件
  2. #include <STC8.H>
  3. typedef unsigned char u8;
  4. typedef unsigned short u16;
  5. typedef unsigned long u32;
  6. #include <intrins.h>
  7. #include "OLED_Display_drive.h"
復(fù)制代碼
  1. OLDE的頭文件
  2. #ifndef OLED_Display_drive
  3. #define OLED_Display_drive

  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. #define ulong unsigned long

  7. sbit lcd_sclk=P1^4;  /*接口定義:lcd_sclk就是D0*/
  8. sbit lcd_sid=P1^3;   /*接口定義:lcd_sid就是D1*/
  9. sbit lcd_rs=P1^2;    /*接口定義:lcd_rs就是DC*/
  10. sbit lcd_cs1=P1^1;   /*接口定義:lcd_cs1就是OLED的片選CS1*/
  11. sbit Rom_OUT=P1^0;   /*字庫IC接口定義:Rom_OUT就是OUT*/
  12. sbit Rom_CS=P0^0;    /*字庫IC接口定義Rom_CS就是字庫IC的CS2*/

  13. extern void delay(int n_ms);   
  14. extern uchar code bmp1[];//畫面
  15. extern uchar code jiong1[];//特殊字符
  16. extern uchar code lei1[];//特殊字符
  17. extern void initial_lcd();//OLED 初始化
  18. extern void clear_screen();//OLED 清屏
  19. extern void display_128x64(uchar *dp);//OLED 顯示128×64畫面
  20. extern void display_graphic_16x16(uint page,uint column,uchar *dp);//OLED 顯示16×16字符
  21. extern void display_graphic_8x16(uint page,uchar column,uchar *dp);//OLED 顯示8×16字符
  22. extern void display_graphic_5x7(uint page,uchar column,uchar *dp);//OLED 顯示5×7字符
  23. extern void display_GB2312_string(uchar y,uchar x,uchar *text);//OLED 顯示GB字符
  24. extern void display_string_5x7(uchar y,uchar x,uchar *text);//OLED 顯示ACIIC字符
  25. extern void display_graphic_Num_16x16(uint page,uint column,uchar dp);

  26. #endif
復(fù)制代碼




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

使用道具 舉報(bào)

沙發(fā)
ID:230847 發(fā)表于 2019-11-3 11:39 | 只看該作者
可以顯示變量的函數(shù)弄好了。使用sprintf函數(shù)。我把函數(shù)發(fā)一下大家參考參考。看有沒有更好的方式。這個(gè)直接放在main.c中。oled驅(qū)動(dòng)函數(shù)不用變
  1. void OLED_Display_Allot()
  2. {
  3.         static u16 count=0;
  4.         static u16 kk=0;
  5.         u8 x_num[8];
  6.         count++;
  7.        
  8.         if(count>1000)
  9.         {
  10.                 count=0;
  11.                 kk++;
  12.                 //clear_screen();
  13.         }
  14.         sprintf(x_num,"%hd",(short)kk);
  15.         display_GB2312_string(2,20,x_num);
  16. }
復(fù)制代碼



回復(fù)

使用道具 舉報(bào)

板凳
ID:94031 發(fā)表于 2019-11-3 12:03 | 只看該作者
先要測(cè)得頻率這個(gè)變量值,然后將此值傳到函數(shù)OLED_Display_Allot進(jìn)行顯示,你缺了值的傳遞。
回復(fù)

使用道具 舉報(bào)

地板
ID:94031 發(fā)表于 2019-11-3 12:08 | 只看該作者
一束光的旅程 發(fā)表于 2019-11-3 11:39
可以顯示變量的函數(shù)弄好了。使用sprintf函數(shù)。我把函數(shù)發(fā)一下大家參考參考。看有沒有更好的方式。這個(gè)直接 ...

你在函數(shù)里自己玩,沒有外面測(cè)頻率值與傳進(jìn)來的過程。
回復(fù)

使用道具 舉報(bào)

5#
ID:230847 發(fā)表于 2019-11-3 13:09 | 只看該作者
經(jīng)過兩天的研究終于使屏幕可以顯示變量了。關(guān)鍵在與對(duì)指針的理解。把程序打包一下分享給大家。

中景園OLED帶字庫(0.96)驅(qū)動(dòng).zip

93.72 KB, 下載次數(shù): 128

回復(fù)

使用道具 舉報(bào)

6#
ID:230847 發(fā)表于 2019-11-3 14:53 來自手機(jī) | 只看該作者
xuyaqi 發(fā)表于 2019-11-3 12:08
你在函數(shù)里自己玩,沒有外面測(cè)頻率值與傳進(jìn)來的過程。

嗯,得定義一個(gè)外部變量存儲(chǔ)頻率。我發(fā)的這個(gè)程序只是OLED顯示一個(gè)變量的試驗(yàn)程序。正在嘗試做一個(gè)3路的步進(jìn)電機(jī)控制器。后面的路還很長(zhǎng)
回復(fù)

使用道具 舉報(bào)

7#
ID:496002 發(fā)表于 2020-1-20 13:00 | 只看該作者
你寫的這個(gè)函數(shù) 還是顯示“hd”  并未顯示變量.還請(qǐng)賜教
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品毛片 | 亚洲成人精品视频 | 精品一区二区三区中文字幕 | 亚洲性综合网 | 欧美中文字幕在线 | 久久久久久国产精品mv | 精品国产高清一区二区三区 | 一区二区三区回区在观看免费视频 | 成人免费视频网站 | 一级爱爱片 | 中文字幕一区二区三区精彩视频 | 亚洲狠狠丁香婷婷综合久久久 | 国产精品国产a | 密色视频 | 久久这里只有精品首页 | 国产99久久精品一区二区永久免费 | 国产传媒视频在线观看 | 精品久久久久国产 | 羞羞在线视频 | 国产精品一区二区久久 | 国产综合久久 | 国产一区999 | 亚洲成人一区 | 一区二区三区免费观看 | 二区av| 亚洲成人精品 | 久久国产日韩 | 欧美一级二级在线观看 | 国产一区二区三区在线观看免费 | 欧美精品欧美精品系列 | 亚洲成人免费av | 国产乱码精品一区二区三区忘忧草 | 91看片免费版| 久久性色| 天堂亚洲 | 国产清纯白嫩初高生在线播放视频 | 中文字幕在线播放第一页 | 欧美精品一区在线发布 | 人人鲁人人莫人人爱精品 | 日韩电影中文字幕 | 国产精品美女久久久久久免费 |