找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4789|回復: 0
打印 上一主題 下一主題
收起左側(cè)

7腳12864spi單片機源程序,直接函數(shù)調(diào)用

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:281144 發(fā)表于 2018-4-20 20:46 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
7腳12864spi程序,直接函數(shù)調(diào)用


單片機源程序如下:
  1. #include "yejin.h"

  2. const uchar num[]={
  3. 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*"0",0*/

  4. 0X00,0X00,0X08,0X08,0X1F,0X00,0X00,0X00,0X00,0X00,0X04,0X04,0XFC,0X04,0X04,0X00,/*"1",1*/

  5. 0x00,0x70,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*"2",2*/

  6. 0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x18,0x20,0x21,0x21,0x22,0x1C,0x00,/*"3",3*/

  7. 0x00,0x00,0x80,0x40,0x30,0xF8,0x00,0x00,0x00,0x06,0x05,0x24,0x24,0x3F,0x24,0x24,/*"4",4*/

  8. 0x00,0xF8,0x88,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x20,0x20,0x20,0x11,0x0E,0x00,/*"5",5*/

  9. 0x00,0xE0,0x10,0x88,0x88,0x90,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x20,0x1F,0x00,/*"6",6*/

  10. 0x00,0x18,0x08,0x08,0x88,0x68,0x18,0x00,0x00,0x00,0x00,0x3E,0x01,0x00,0x00,0x00,/*"7",7*/

  11. 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*"8",8*/

  12. 0x00,0xF0,0x08,0x08,0x08,0x10,0xE0,0x00,0x00,0x01,0x12,0x22,0x22,0x11,0x0F,0x00,/*"9",9*/};
  13. /************微秒延時************/
  14. void delay_us(unsigned long int us)
  15. {
  16. unsigned long int i;

  17. for( i=0;i<us;i++);
  18. }
  19. /**************毫秒延時************/
  20. void delay_ms(unsigned int ms)
  21. {
  22. unsigned int i,j;
  23. for( i=0;i<ms;i++)
  24. for(j=0;j<1141;j++);
  25. }
  26. /*************************************/
  27. void SPI_init(void)
  28. {
  29.   DDRB |= 0xBF;
  30.   SPCR = 0x50; //主機,使能spi,高位先,上升沿起
  31.   SPSR = 0x01; //2倍頻
  32. }

  33. //******************端口初始化函數(shù)*************
  34. void port_init()
  35. {
  36. DDRB=0Xff;      //SCK、MOSI、SS置位為輸出
  37. }
  38. //***************SPI發(fā)送************************
  39. void lcd_wrByte(uint data,uint dc)
  40. {
  41.   if(dc==0) DC_0;
  42.   if(dc==1) DC_1;
  43.   SPDR = data;
  44.   while ((SPSR & 0x80) == 0);
  45. }

  46. /*********************OLED 設置坐標*********************/
  47. void lcd_Set_xy(uchar x, uchar y)
  48. {
  49.         lcd_wrByte(0xb0+y,0);
  50.         lcd_wrByte(((x&0xf0)>>4)|0x10,0);
  51.         lcd_wrByte((x&0x0f)|0x01,0);
  52. }
  53. /*********************OLED復位************************************/
  54. void lcd_CLS(void)
  55. {
  56.         uchar y,x;
  57.         for(y=0;y<8;y++)
  58.         {
  59.                 lcd_wrByte(0xb0+y,0);
  60.                 lcd_wrByte(0x01,0);
  61.                 lcd_wrByte(0x10,0);
  62.                 for(x=0;x<128;x++)
  63.                 lcd_wrByte(0,1);
  64.         }
  65. }
  66. /*********************OLED初始化************************************/
  67. void lcd_Init(void)
  68. {       
  69.         RES_0;
  70.         delay_ms(500);//初始化之前的延時
  71.         RES_1;
  72.         lcd_wrByte(0xae,0);//關(guān)閉oled面板
  73.         lcd_wrByte(0x00,0);//設置低列地址
  74.         lcd_wrByte(0x10,0);//設置高列地址
  75.         lcd_wrByte(0x40,0);//設置開始行地址設置映射RAM顯示開始行(0x00 0x3F)
  76.         lcd_wrByte(0x81,0);//設置對比控制寄存器
  77.         lcd_wrByte(duibidu,0); // 設置輸出對比度
  78.         lcd_wrByte(0xa1,0);//設置列映射     0xa0左右反置 0xa1正常
  79.         lcd_wrByte(0xc8,0);//掃描方向   0xc0上下反置 0xc8正常
  80.         lcd_wrByte(0xa6,0);//設置正常顯示
  81.         lcd_wrByte(0xa8,0);//設置多種比列(1到64)
  82.         lcd_wrByte(0x3f,0);//1/64
  83.         lcd_wrByte(0xd3,0);//設置顯示補償(0x00 0x3F)
  84.         lcd_wrByte(0x00,0);//抵消
  85.         lcd_wrByte(0xd5,0);//設置顯示時鐘分頻/振蕩器頻率
  86.         lcd_wrByte(0x80,0);//設置分割比,設置時鐘為100幀/秒
  87.         lcd_wrByte(0xd9,0);//設置pre-charge時期
  88.         lcd_wrByte(0xf1,0);//將預充電設置為15個時鐘,放電為1個時鐘
  89.         lcd_wrByte(0xda,0);//設置com pin硬件配置
  90.         lcd_wrByte(0x12,0);//
  91.         lcd_wrByte(0xdb,0);//設置vcomh電壓
  92.         lcd_wrByte(0x40,0);//取消VCOM等級
  93.         lcd_wrByte(0x20,0);//設置內(nèi)存尋址模式(0x00/0x01/0x02)
  94.         lcd_wrByte(0x02,0);//頁面尋址模式
  95.         lcd_wrByte(0x8d,0);//設置充電泵啟用/禁用
  96.         lcd_wrByte(0x14,0);//顯示時啟用
  97.         lcd_wrByte(0xa4,0);//全部顯示開,恢復內(nèi)存內(nèi)容顯示,輸出內(nèi)存中的內(nèi)容
  98.         lcd_wrByte(0xa6,0);// 禁用反顯示(0xa6/a7)
  99.         lcd_wrByte(0xaf,0);//打開lcd面板
  100.         lcd_CLS(); //初始清屏
  101. }
  102. /*****************功能描述:顯示16*16點陣  顯示的坐標(x,y),y為頁范圍0~7****************************/
  103. void lcd_16x16(uchar x,uchar y,uchar N,uchar zi[])
  104. {
  105.         uchar wm=0;
  106.         uint adder=32*N;
  107.         lcd_Set_xy(x,y);
  108.         for(wm = 0;wm < 16;wm++)            //上頁
  109.         {
  110.                 //lcd_wrByte(zi[adder],1);
  111.                 adder ++;
  112.         }
  113.         lcd_Set_xy(x,y + 1);
  114.         for(wm = 0;wm < 16;wm++)           //下頁
  115.         {
  116.                 //lcd_wrByte(zi[adder],1);
  117.                 adder ++;
  118.         }                  
  119. }
  120. /*******************功能描述:顯示8*16         顯示的坐標(x,y),y為頁范圍0~7,N第幾個字****************/
  121. void lcd_8x16(uchar x,uchar y,uchar N)
  122. {
  123.         uchar wm=0;
  124.         uint adder=16*N;
  125.         lcd_Set_xy(x , y);
  126.         for(wm = 0;wm < 8;wm++)            //上頁
  127.         {
  128.                 lcd_wrByte(num[adder],1);
  129.                 adder ++;
  130.         }
  131.         lcd_Set_xy(x,y + 1);
  132.         for(wm = 0;wm < 8;wm++)           //下頁
  133.         {
  134.                 lcd_wrByte(num[adder],1);
  135.                 adder ++;
  136.         }                  
  137. }
  138. /***********功能描述:顯示顯示BMP圖片起始點坐標(x,y),x的范圍0~127,y為頁的范圍0~7*****************/
  139. void lcd_BMP(uchar x,uchar y,uchar chang,uchar kuan,uchar BMP[])
  140. {
  141.         uchar wm=0,su,hen;
  142.         uint i,j,adder;
  143.         lcd_Set_xy(x,y);
  144.         if(kuan%8==0)  su=kuan/8;
  145.         else su=kuan/8+1;
  146.         for(i = y;i < su;i++)            
  147.         {
  148.                 lcd_Set_xy(x,i);
  149.                 for(j=x;j<chang;j++)
  150.                 {
  151.                  lcd_wrByte(BMP[adder++],1);
  152.                 }
  153.         }
  154.                 
  155. }
復制代碼

所有資料51hei提供下載:
液晶.zip (2.26 KB, 下載次數(shù): 245)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表