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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

字符芯片D6453單片機(jī)驅(qū)動程序 OSD顯示模塊

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:228021 發(fā)表于 2017-8-17 09:11 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
字符芯片D6453驅(qū)動程序,采用stc12c芯片來驅(qū)動的.

單片機(jī)源程序如下:

  1. /****************OSD顯示模塊********************/
  2. #include "STC12C5Ax.h"
  3. #include "main.h"

  4. sbit MCLK  = P1^1;
  5. sbit MCS   = P1^2;
  6. sbit MDATA = P1^3;
  7. /************送一個字節(jié)到OSD************/
  8. void OsdICSendOneByte(uchar osdbyte)   
  9. {   
  10.      uchar i;
  11.      uchar j;
  12.    
  13.      //EA=0;

  14.     MCS=0;
  15.     MDATA=1;
  16.     MCLK=0;
  17.     for(i = 0; i < 8; i++)
  18.     {   
  19.         if((osdbyte & 0x80)>0)
  20.          {   
  21.             MCLK=0;
  22.             MDATA=1;
  23.             j++;
  24.             j++;
  25.             j++;
  26.             j++;
  27.             j++;
  28.               MCLK=1;
  29.          }
  30.         else
  31.         {   
  32.             MCLK=0;
  33.             MDATA=0;
  34.             j++;
  35.             j++;
  36.             j++;
  37.             j++;
  38.             j++;
  39.              MCLK=1;
  40.          }
  41.         osdbyte = osdbyte<<1;
  42.     }
  43.     j = 150;
  44.     while((--j) > 0);
  45.     MCS=1;

  46.     //EA=1;
  47. }
  48. /************送一個字到OSD************/
  49. void OsdICSendTwoByte(int osdword)   
  50. {   
  51.      uchar i;
  52.     uchar j;
  53.         
  54.     MCS=0;
  55.     MDATA=1;
  56.     MCLK=0;
  57.     for(i = 0;i < 8; i++)
  58.     {   
  59.         if((osdword & 0x8000)>0)
  60.          {   
  61.             MCLK=0;
  62.             MDATA=1;
  63.             j++;
  64.             j++;
  65.             j++;
  66.             j++;
  67.             j++;
  68.              MCLK=1;
  69.          }
  70.         else
  71.         {   
  72.             MCLK=0;
  73.             MDATA=0;
  74.             j++;
  75.             j++;
  76.             j++;
  77.             j++;
  78.             j++;
  79.              MCLK=1;
  80.          }
  81.         osdword = osdword<<1;
  82.     }
  83.     j = 150;
  84.     while((--j) > 0);
  85.    
  86.     for(i = 0;i < 8; i++)
  87.     {   
  88.         if((osdword & 0x8000)>0)
  89.          {   
  90.             MCLK=0;
  91.             MDATA=1;
  92.             j++;
  93.             j++;
  94.             j++;
  95.             j++;
  96.             j++;
  97.              MCLK=1;
  98.          }
  99.         else
  100.         {   
  101.             MCLK=0;
  102.             MDATA=0;
  103.             j++;
  104.             j++;
  105.             j++;
  106.             j++;
  107.             j++;
  108.              MCLK=1;
  109.          }
  110.         osdword = osdword<<1;
  111.     }
  112.     j = 150;
  113.     while((--j) > 0);
  114.     MCS=1;
  115. }
  116. /*****************清屏********************/
  117. void OsdICInitRam(void)
  118. {   
  119.     OsdICSendOneByte(0x34);            //Video Ram Clear (0x34);
  120.     delay(300);
  121. }
  122. /***************字符顯示開*******************/
  123. void OsdICDisEn(uchar blink)
  124. {
  125.     //0001,D0,LC,BL1,BL0---BL1BL0:00-off,01-2Hz,10-1Hz,11-0.5Hz
  126.     OsdICSendOneByte(0x0c | (blink & 0x03));  //字符顯示開、震蕩開、閃爍1HZ
  127. }
  128. /**************字符背景顏色*****************/
  129. void OsdICDisBackColor(void)
  130. {
  131.     //0011,0BS1BS00--BS1,BS0:0-NO,1-BlackFraming,2-BlackOnWhite,3-BlackFilling
  132.     OsdICSendOneByte(0x41);      //沒有背景、邊框開
  133.     OsdICSendOneByte(0x10);      //黑色邊框
  134. }
  135. /***************清屏初始化*****************/
  136. void OsdInitDis(void)
  137. {   
  138.     OsdICInitRam();            //視頻RAM清零
  139.     OsdICDisEn(0x02);        //字符顯示開、震蕩開、閃爍1HZ
  140.     OsdICDisBackColor();    //字符背景顏色
  141.     //OsdICSendOneByte(0x32);    //字符上下拉長
  142. }
  143. /************字符顯示屏幕位置控制 32*32*************/
  144. void OsdICScreenPos(uchar col,uchar Line)
  145. {   
  146.     //1000,00V4V3,V2V1V0H4,H3H2H1H0
  147.     uint temp;
  148.    
  149.     temp   =col;
  150.     temp <<=5;
  151.     temp  |=Line;
  152.     temp  |=0x8000;
  153.     OsdICSendTwoByte(temp);//0x80e8);
  154. }
  155. /************字符顯示VRAM位置控制 12*24*************/
  156. void OsdCharDisPos(uchar Line,uchar col)   
  157. {   
  158.     //1000,100AR3,AR2AR1AR0AC4,AC3AC2AC1AC0
  159.     uint temp;
  160.    
  161.     temp   =Line;
  162.     temp <<=5;
  163.     temp  |=col;
  164.     temp  |=0x8400;
  165.    
  166.     OsdICSendTwoByte(temp);
  167.     OsdCurPosOpt.line=Line;
  168.     OsdCurPosOpt.col=col;
  169. }
  170. /***************字符顯示顏色控制*************/
  171. void OsdCharDis(uchar bl,uchar character)   
  172. {   
  173.     //1100,R G B BL,C7C6C5C4,C3C2C1C0--BL:1-Blink RGB:0-Black 1-Blue 2-Green 3-Cyan 4-Red 5-Magenta 6-Yellow 7-White
  174.    
  175.     uint temp;
  176.     uint temp1;
  177.    
  178.     temp=RGB_Color;
  179.     temp<<=9;
  180.    
  181.     temp1=bl;          //1為閃爍,0為不閃
  182.     temp1<<=8;
  183.    
  184.     temp=temp | temp1 | character;
  185.    
  186.     temp |=0xC000;
  187.    
  188.     OsdICSendTwoByte(temp);
  189.    
  190. }
  191. /*****************寫字符RAM地址****************/
  192. void OsdRamAddress(uchar RW,uchar RL)
  193. {
  194.   //1000 011 RW3RW2RW1RW0 RL4RL3RL2RL1RL0
  195.   
  196.   uint temp;
  197.   
  198.   temp=RW;
  199.   temp<<=5;
  200.   temp|=RL;  
  201.   temp|=0x8600;
  202.   
  203.   OsdICSendTwoByte(temp);
  204.   
  205. }
  206. /************寫字符RAM18行某行的數(shù)據(jù)*************/
  207. void OsdRamData(uint Character)
  208. {
  209.   //1001 CR11CR10CR9CR8CR7CR6CR5CR4CR3CR2CR1CR0
  210.   uint temp;
  211.   
  212.   temp=Character;
  213.   temp|=0x9000;
  214.   
  215.   OsdICSendTwoByte(temp);
  216. }
  217. /************寫一個漢字的點(diǎn)陣數(shù)據(jù)到CRAM*************/
  218. void OsdRamCharacter(uint CharacterBuf[18])
  219. {
  220.   uchar i;
  221.   
  222.   OsdRamData(0);
  223.   for(i=0;i<17;i++)
  224.   OsdRamData(CharacterBuf[i]);
  225.   
  226. }
  227. /************寫等待界面點(diǎn)陣數(shù)據(jù)到RAM*************/
  228. void OsdWaitRam(void)
  229. {
  230.   uchar i,x;
  231.   uchar j;  
  232.   uint xdata CharacterBuf[18];
  233.   
  234.   OsdRamAddress(0,0);
  235.   
  236.   for(i=0;i<5;i++)
  237.   {
  238.     for(j=0;j<18;j++)
  239.     {
  240.       x=HZKTab[i][j*2];
  241.       CharacterBuf[j]=x*256+HZKTab[i][j*2+1];
  242.     }
  243.     OsdRamCharacter(CharacterBuf);
  244.   }
  245. }
  246. /************寫系統(tǒng)配置界面點(diǎn)陣數(shù)據(jù)到RAM*************/
  247. void OsdInfoRam(void)
  248. {
  249.   uchar i,x;
  250.   uchar j;  
  251.   uint  CharacterBuf[18];
  252.   
  253.   OsdRamAddress(0,0);
  254.    
  255.   for(i=8;i<23;i++)
  256.   {
  257.     for(j=0;j<18;j++)
  258.     {
  259.       x=HZKTab[i][j*2];
  260.       CharacterBuf[j]=x*256+HZKTab[i][j*2+1];
  261.     }
  262.     OsdRamCharacter(CharacterBuf);
  263.   }
  264. }
  265. /************寫調(diào)預(yù)置位界面點(diǎn)陣數(shù)據(jù)到RAM1*************
  266. void OsdCallPresetRam(void)
  267. {
  268.   uchar i,x;
  269.   uchar j;  
  270.   uint  xdata CharacterBuf[18];
  271.   
  272.   OsdRamAddress(0,0);
  273.    
  274.   for(i=0;i<11;i++)
  275.   {
  276.     for(j=0;j<18;j++)
  277.     {
  278.       x=HZKTab[TabCallPresetRam[i]][j*2];
  279.       CharacterBuf[j]=x*256+HZKTab[TabCallPresetRam[i]][j*2+1];
  280.     }
  281.     OsdRamCharacter(CharacterBuf);
  282.   }
  283. }
  284. /*************************************/
  285. void Osd3BitDis(uchar num)
  286. {   
  287.     uchar temp;
  288.    
  289.     temp=num%100;
  290.     OsdCharDis(0,num/100);        
  291.     OsdCharDis(0,temp/10);
  292.     OsdCharDis(0,temp%10);
  293. }
  294. /************寫主菜單界面點(diǎn)陣數(shù)據(jù)到RAM*************/
  295. void OsdMainMenuRam(void)
  296. {
  297.   uchar i,x;
  298.   uchar j;  
  299.   uint CharacterBuf[18];
  300.   
  301.   OsdRamAddress(0,0);
  302.    
  303.   for(i=0;i<16;i++)
  304.   {
  305.     for(j=0;j<18;j++)
  306.     {
  307.       x=HZKTab[TabMainMenuRam[i]][j*2];
  308.       CharacterBuf[j]=x*256+HZKTab[TabMainMenuRam[i]][j*2+1];
  309.     }
  310.     OsdRamCharacter(CharacterBuf);
  311.   }
  312. }
  313. /************寫各級菜單界面點(diǎn)陣數(shù)據(jù)到RAM2*************/
  314. void OsdWhriteRam(uchar num,uchar TabRam[])
  315. {
  316.   uchar i,x;
  317.   uchar j;  
  318.   uint  CharacterBuf[18];
  319.   
  320.   OsdRamAddress(0,0);
  321.    
  322.   for(i=0;i<num;i++)
  323.   {
  324.     for(j=0;j<18;j++)
  325.     {
  326.       x=HZKTab[TabRam[i]][j*2];
  327.       CharacterBuf[j]=x*256+HZKTab[TabRam[i]][j*2+1];
  328.     }
  329.     OsdRamCharacter(CharacterBuf);
  330.   }
  331. }
  332. /*****************系統(tǒng)自檢顯示********************/
  333. void OsdPowWait(void)
  334. {   
  335.     uchar i;
  336.     OsdInitDis();                        //清屏初始化
  337.     delay(600);
  338. switch(OsdKeyOpt.Language)
  339. {
  340. case 0:   
  341.     OsdWaitRam();                       //寫等待界面點(diǎn)陣數(shù)據(jù)到Ram   
  342.     OsdICScreenPos(6,6);                //屏幕位置
  343.     delay(60);
  344.     OsdCharDisPos(5,4);                    //字符位置
  345.         
  346.     for(i = 0;i < 15;i++)
  347.     {   
  348.         OsdCharDis(0,OSDWAIT_TAB[i]);   //在屏幕顯示“系統(tǒng)自檢中”
  349.     }
  350.     break;
  351. case 1:        
  352.     OsdICScreenPos(6,6);                //屏幕位置
  353.     delay(60);
  354.     OsdCharDisPos(5,4);                    //字符位置
  355.         
  356.     for(i = 0;i < 15;i++)
  357.     {   
  358.         OsdCharDis(0,ENOSDWAIT_TAB[i]);   //在屏幕顯示“系統(tǒng)自檢中”
  359.     }
  360.     break;
  361. default: break;
  362. }        
  363.     delay(600);
  364. }
  365. /**************顯示初始化信息*****************/
  366. void OsdInforDis(void)
  367. {   
  368.     uchar j;
  369.    
  370.     OsdInitDis();            //初始化   
  371.     delay(200);
  372. switch(OsdKeyOpt.Language)
  373. {
  374. case 0:     
  375.     OsdInfoRam();           //寫系統(tǒng)配置點(diǎn)陣到RAM
  376.    
  377.     OsdICScreenPos(6,6);    //屏幕位置
  378.     delay(20);
  379.     OsdCharDisPos(2,2);
  380.     for(j=0;j<15;j++)
  381.     {   
  382.         OsdCharDis(0,OSDCAMERAID[j]);
  383.     }
  384.     if(DipSwOpt.Softcamid == 0)Osd3BitDis(DipSwOpt.camid);
  385.     else Osd3BitDis(DipSwOpt.Softcamid);

  386.     OsdCharDisPos(4,2);
  387.     for(j=0;j<10;j++)
  388.     {   
  389.         OsdCharDis(0,OSDBAUDRATE[j]);
  390.     }
  391.    
  392.     for(j=0;j<8;j++)
  393.     {   
  394.         OsdCharDis(0,OSDBAUDRATE_VALUE[DipSwOpt.baudrat][j]);
  395.     }
  396.    
  397.     OsdCharDisPos(6,2);
  398.     for(j = 0; j < 9; j++)
  399.     {   
  400.         OsdCharDis(0,OSDPROTOCOL[j]);
  401.     }
  402.    
  403.     for(j = 0; j < 9; j++)
  404.     {   
  405.         OsdCharDis(0,OSDPROTOCOL_VALUE[j]);
  406.     }
  407.    
  408.     OsdCharDisPos(8,2);
  409.     for(j=0;j<18;j++)
  410.     {   
  411.         OsdCharDis(0,OSDVER[j]);
  412.     }
  413. break;
  414. case 1:     
  415.     OsdICScreenPos(6,6);    //屏幕位置
  416.     delay(20);
  417.     OsdCharDisPos(2,2);
  418.     for(j=0;j<15;j++)
  419.     {   
  420.         OsdCharDis(0,ENOSDCAMERAID[j]);
  421.     }
  422.     if(DipSwOpt.Softcamid == 0)Osd3BitDis(DipSwOpt.camid);
  423.     else Osd3BitDis(DipSwOpt.Softcamid);

  424.     OsdCharDisPos(4,2);
  425.     for(j=0;j<10;j++)
  426.     {   
  427.         OsdCharDis(0,ENOSDBAUDRATE[j]);
  428.     }
  429.    
  430.     for(j=0;j<8;j++)
  431.     {   
  432.         OsdCharDis(0,OSDBAUDRATE_VALUE[DipSwOpt.baudrat][j]);
  433.     }
  434.    
  435.     OsdCharDisPos(6,2);
  436.     for(j = 0; j < 18; j++)
  437.     {   
  438.         OsdCharDis(0,ENOSDPROTOCOL[j]);
  439.     }

  440.     OsdCharDisPos(8,2);
  441.     for(j=0;j<18;j++)
  442.     {   
  443.         OsdCharDis(0,ENOSDVER[j]);
  444.     }
  445. break;
  446. default: break;
  447. }
  448.     OsdMenuOpt.inforflag = 1;
  449.     OsdMenuOpt.enterflag = 0;
  450.     OsdMenuOpt.osdflag= 1;
  451.     OsdMenuOpt.swflag = 0;
  452.     OsdMenuOpt.ymstat=0;   //頁面指針指向第一頁
  453.     OsdMenuOpt.gbstat=0;   //光標(biāo)指針指向第一行
  454.     TimeOpt.displaytime=0; //置位清屏?xí)r間
  455.     OsdKeyOpt.AngleFlag=1; //角度顯示標(biāo)志
  456. }
復(fù)制代碼


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

使用道具 舉報(bào)

沙發(fā)
ID:230975 發(fā)表于 2019-9-19 09:38 | 只看該作者
謝謝樓主分享。
回復(fù)

使用道具 舉報(bào)

板凳
ID:110630 發(fā)表于 2019-10-21 12:31 來自手機(jī) | 只看該作者
謝謝分享!
回復(fù)

使用道具 舉報(bào)

地板
ID:214792 發(fā)表于 2023-8-9 20:42 | 只看該作者
字庫還不懂,能否提供一下字庫或者整個工程參考一下謝謝
回復(fù)

使用道具 舉報(bào)

5#
ID:688460 發(fā)表于 2023-12-28 21:18 | 只看該作者
能提供完整的程序,我給你獎勵200黑幣, 謝謝!
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品自拍av | 男女视频91 | 最新国产精品精品视频 | 久久国产精品首页 | 欧美激情视频一区二区三区在线播放 | 天天搞天天搞 | 伊人欧美视频 | 久久精品国产久精国产 | 欧美国产一区二区 | 一区二区视频在线观看 | 日韩高清一区二区 | 91精品国产综合久久国产大片 | 亚洲v区 | 久久久久久国产 | 中文字幕视频在线 | 精品久久国产 | 欧洲一级毛片 | 国内自拍偷拍 | 中文字幕91 | 欧美日韩在线电影 | 亚洲性视频 | 亚洲国产精品va在线看黑人 | 男人天堂免费在线 | 中文字幕久久精品 | 亚洲av毛片| 国产精品大片在线观看 | 日日操夜夜操天天操 | 日韩久久久一区二区 | 欧美日韩一区二区视频在线观看 | 伊人久久大香线 | 国产激情免费视频 | 一区二区久久 | 亚洲综合首页 | 色网在线观看 | 国产精品99久久久久久动医院 | 天天草天天操 | 欧美日产国产成人免费图片 | 国产精品久久久久久久久久久免费看 | 久久综合久久综合久久 | 在线成人av | 欧美日产国产成人免费图片 |