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

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

QQ登錄

只需一步,快速開始

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

stm32103c8t6單片機(jī)熱敏打印機(jī)驅(qū)動(dòng)程序與資料下載

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
板子呢,只是燒壞了單片機(jī),程序呢,就是根據(jù)板子來寫的,首先就是用AD走下板子的走線和原理圖走線(在壓縮文件里有),還搜查了相關(guān)芯片的資料(壓縮文件也有)。感興趣的伙伴,可以看看吧。壓縮包太大了,整個(gè)程序工程文件是放不上了,



單片機(jī)源程序如下:
  1. /*********************************************************************************************************************
  2. 打印機(jī)的單片機(jī)(GD32)燒壞了,更換為(stm32f103c8t6)實(shí)現(xiàn)基本的打印功能
  3. 程序總體說明:打印機(jī)頭控制(步進(jìn)電機(jī)+熱頭加熱+SPI通信+溫度檢測(cè))+stm32f103c8t6(串口+ADC)
  4. 就一個(gè)燒壞單片機(jī)的熱敏打印機(jī),搜查相關(guān)資料,實(shí)現(xiàn)打印基本功能
  5. 打包資料有寫程序過程中用到的資料
  6. *********************************************************************************************************************/
  7. #include "motor.h"               //步進(jìn)電機(jī)的控制
  8. #include "Systick.h"             //延時(shí)
  9. #include "myrmspi.h"             //熱頭加熱
  10. #include "powerled.h"            //指示燈
  11. #include "myspii.h"              //SPI通信(stm32與打印機(jī)頭)
  12. #include "yjspi.h"               //SPI通信(stm32與字庫)
  13. #include "myadc.h"               //電源電壓檢測(cè),打印機(jī)溫度檢測(cè)
  14. #include "usart.h"               //串口通信

  15. /************************************************************************************************************************
  16. 變量定義
  17. ************************************************************************************************************************/
  18. u8 yyy=0;                             //初始化TIM4一次用
  19. u16 huancun[128]={0};                 //存儲(chǔ)接收數(shù)據(jù)
  20. extern u16 ADC_ConvertedValue[2];     //存儲(chǔ)AD采集電壓
  21. extern u8 dayinbiaoz;                 

  22. /************************************************************************************************************************
  23. 函數(shù)聲明
  24. ************************************************************************************************************************/
  25. void Key_Zou(void);
  26. void SPI_Writerm(void);
  27. u16 ISN_Conversion(u16 isn);

  28. /************************************************************************************************************************
  29. 主函數(shù)
  30. ************************************************************************************************************************/
  31. int main(void)
  32. {
  33.         Myrmspi_Init();                     
  34.         Hotlead_Init();
  35.         Powerled_Init();
  36.         PBtim4_init();
  37.         SPI_Configuration();
  38.         SPI2_Configuration();
  39.         ADC_Configuration();
  40.         USART_Configuration();
  41.         while(1)
  42.   {
  43.                 if(dayinbiaoz==2){            //開始打印
  44.                         if(yyy==0){
  45.                           TIM4_PWM_Init4();
  46.                                 yyy=1;
  47.                         }
  48.       SPI_Writerm();              
  49.                   dayinbiaoz=0;               //準(zhǔn)備接收判斷起始數(shù)據(jù)1
  50.                         USART_Cmd(USART3, ENABLE);  //使能串口中斷
  51.                 }
  52.                 Key_Zou();
  53.         }
  54. }

  55. /************************************************************************************************************************
  56. 說明:就是找對(duì)應(yīng)關(guān)系
  57.       已知:一組數(shù)據(jù)0,1,2,3.......。另一組數(shù)據(jù)GB18030里的字對(duì)應(yīng)的編碼從8140開始(具體看GB18030_54936.html文件,不是以1遞增的)。
  58.             0對(duì)應(yīng)8140開始,后面數(shù)據(jù)都是對(duì)應(yīng)關(guān)系。
  59.       求:一個(gè)對(duì)應(yīng)函數(shù)能滿足以上關(guān)系。
  60.       很明顯初中的知識(shí)        
  61. ************************************************************************************************************************/
  62. u16 ISN_Conversion(u16 isn)     //GB18030,字編碼轉(zhuǎn)換為SPI存儲(chǔ)地址
  63. {
  64.     u16 conn=0;
  65.     conn=((isn-0x8140)-66*(((isn-0x8140)-((isn-0x8140)%256))/256));       
  66.           if(((((isn-0x8140)%256)+1)>0)&&(((isn-0x8140)%256)<63)){
  67.        return conn;
  68.                 }else{
  69.                    if((((isn-0x8140)%256)>63)&&(((isn-0x8140)%256)<191)){
  70.                            return (conn-1);
  71.                          }else{
  72.                             return 0;
  73.                           }
  74.                  }
  75. }

  76. /************************************************************************************************************************
  77. 說明:下面程序關(guān)鍵在“字庫中存儲(chǔ)的數(shù)據(jù)”和“發(fā)送給打印機(jī)頭的數(shù)據(jù)”要實(shí)現(xiàn)數(shù)據(jù)的重組。目的是為了讓字體打印出的效果符合預(yù)期
  78.       看打包的資料吧。“字庫中存儲(chǔ)的數(shù)據(jù)”參考相關(guān)圖片文件
  79.                       “發(fā)送給打印機(jī)頭的數(shù)據(jù)”參考熱敏打印機(jī)頭說明書.txt
  80.       先有個(gè)概念,再找對(duì)應(yīng)關(guān)系,和上面的初中題差不多,就是比較繁瑣
  81. ************************************************************************************************************************/
  82. void SPI_Writerm(void)
  83. {
  84.         u8 bian=0,y,fanhui=0,cached;                  //bian存儲(chǔ)重新組合的8位數(shù)據(jù),y保存下一行開頭數(shù)據(jù)在緩存中的位置,fanhui結(jié)束符變量,cached存儲(chǔ)字庫中讀取的數(shù)據(jù)
  85.         u8 i,j,k,l,p;                                 //用于for循環(huán)體的變量
  86.         u8 m=1,d=0;                                   //m用于一字行(分成3段,以一點(diǎn)行為單位),d用于字行(單位為字行)
  87.         u32 iscn;                                     //存儲(chǔ)SPI字庫的起始地址
  88.         do
  89.         {
  90. //-------------------------------------------------------------------------------------
  91.     //先判斷特殊情況       
  92.     //以huancun[p]為起始共16個(gè)數(shù)據(jù)為一組,判斷有沒有換行符或者結(jié)束符       
  93.           for(p=d;p<(16+d);p++){                                 //搜尋換行符(0x0D0A)位置
  94.                         if((huancun[p]==0x0D0A)||(huancun[p]==0x0002)){
  95.                                 if(huancun[p]==0x0002){                            //碰到結(jié)束符
  96.                                         fanhui=127;                                                   //fanhui=127:跳出while的條件
  97.                                 }
  98. //                                p++;                                                            
  99.                                 break;                                             //得到變量P,跳出
  100.                   }
  101.                 }
  102. //--------------------------------------------------------------------------------------
  103.                 //“字庫里讀取出的數(shù)據(jù)”和“發(fā)送給打印機(jī)的數(shù)據(jù)要轉(zhuǎn)換”,最終得到正確的字體打印效果
  104.                 //字庫存儲(chǔ)數(shù)據(jù)和發(fā)送給打印機(jī)的數(shù)據(jù)參考打包的資料
  105. //                y=p-1-d;
  106.                 y=p-d;
  107.                 for(j=0;j<3;j++){                                   //3層循環(huán)
  108.                         for(k=0;k<8;k++){                                                    //8層循環(huán)
  109.                                 Power_Pulse();                                  //電源脈沖(HOTLEAD引腳,高低電平在for循環(huán)里變化實(shí)現(xiàn)脈沖)
  110.                                 for(p=16;p>y;p--){                              //不用打字的部分,(16-y)個(gè)字填空
  111.                                         for(l=0;l<3;l++){                             //一個(gè)字寬24位,所以給3層循環(huán)
  112.                                           SPI_WriteByte(0x00);                        //直接發(fā)送給打印機(jī)頭數(shù)據(jù)0x00
  113.                                         }
  114.                                 }
  115.                                 for(;p>0;p--){
  116.                                         iscn=(ISN_Conversion(huancun[p-1+d])*72);     //從尾部數(shù)據(jù)開始重組發(fā)送打印機(jī)頭數(shù)據(jù)
  117.                                   for(l=m;l<(m+3);l++){
  118.                                     GPIO_ResetBits(PORT_SPI_CS, PIN_SPI_CS);    //通信時(shí)序必要,可參考打包資料W25Q16
  119.                   SPI2_WriteByte(0x03);                       //讀指令
  120.                               SPI2_WriteByte((u8)((72-(8*l)+iscn)>>16));  //24位地址(以下3行)
  121.                                     SPI2_WriteByte((u8)((72-(8*l)+iscn)>>8));
  122.                                     SPI2_WriteByte((u8)(72-(8*l)+iscn));
  123.             for(i=0;i<8;i++){
  124.                                       cached=SPI2_WriteByte(0x00);                    //讀數(shù)據(jù)
  125.                                             bian|=(((cached&(0x01<<k))>>k)<<i);       //重新組合的8位數(shù)據(jù)
  126.                                     }
  127.                                     SPI_WriteByte(bian);                        //發(fā)送給打印機(jī)頭
  128.                                     bian=0;                                     //存儲(chǔ)數(shù)據(jù)變量清零
  129.                                     GPIO_SetBits(PORT_SPI_CS, PIN_SPI_CS);      //通信時(shí)序必要,可參考打包資料W25Q16
  130.                             }
  131.                           }                                               //上面j的3層、k的8層、p的16層,是一點(diǎn)行384個(gè)點(diǎn),細(xì)分p層,l是3層、i是8層,是24位一個(gè)字寬
  132. //--------------------------------------------------------------------------------------------------------------------------------------------------------------                               
  133.         //打印部分程序
  134.                                 //打印一點(diǎn)行為一個(gè)單位
  135.                                 Tim4_Pwm();                             //設(shè)置PWM輸出引腳為復(fù)用功能輸出(這是輸出PWM的條件,讓步進(jìn)電機(jī)轉(zhuǎn))
  136.                                 delayms(10);                                                    //電機(jī)轉(zhuǎn)一點(diǎn)行需要4ms,這里延遲10ms,讓轉(zhuǎn)一點(diǎn)行這一過程完成,再執(zhí)行下面的程序
  137.                                 Scintillation();                        //打印紙檢測(cè)                                 
  138.                           Hold_Enable();                          //熱頭分組加熱
  139.                                 while(ADC_ConvertedValue[0]<1750)       //判斷采集的熱敏處電壓是否過低,即打印機(jī)溫度是否過大,當(dāng)溫度過高時(shí),程序停在此while里,直到溫度上升到一定程度跳出
  140.                                 {
  141.                                   GPIO_SetBits(PORT_POWERLED, POWERLED);//指示燈滅
  142.                                 }
  143. //--------------------------------------------------------------------------------------------------------------------------------------------------------------                               
  144.                         }
  145.                    m+=3;                                                   //m對(duì)應(yīng)點(diǎn)行,m=1時(shí),是字的三分之一段8行。m+3后,是字的三分之一中間段8行。再+3后,是剩下的8行。
  146.           }       
  147.     m=1;                                                                 //準(zhǔn)備下一行字打印(一行字等于24行點(diǎn)行)
  148.                 d+=y+1;
  149. //                d+=(y+1);                                          
  150. //------------------------------------
  151.                 //一行字與一行字之間的間隔(空白)
  152.                 //不打印,只走紙
  153.                 for(i=0;i<24;i++){
  154.              Tim4_Pwm();
  155.                         delayms(8);
  156.           }
  157. //------------------------------------
  158.         }while(((fanhui!=127)&&(d!=128)));
  159.         //清空緩存
  160.   for(i=0;i<128;i++){
  161.            huancun[i]=0;
  162.         }
  163. //----------------------------------------------------------------------------------------       
  164.   GPIO_ResetBits(PORT_HOTLEAD, HOTLEAD);                         //關(guān)閉5V電源
  165. }

  166. /************************************************************************************************************************/

  167. /*************************************************************************
  168. 說明:短按按鍵走一點(diǎn)行,按住按鍵1.5秒以上持續(xù)走紙
  169. *************************************************************************/
  170. void Key_Zou(void)
  171. {
  172.   u8 i,t=0;                                                    //計(jì)時(shí)變量t=0,循環(huán)變量i
  173.         if(dayinbiaoz==0){                                           //打印不走紙
  174.           if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)==RESET){        //判斷引腳
  175.                         USART_Cmd(USART3, DISABLE);                              //關(guān)串口,走紙不打印
  176.             delayms(20);                                             //去抖
  177.                   while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)==RESET){   //再次判斷,按鍵松開跳出循環(huán)
  178.                                 if((t==0)||(t>100)){                                   //短按按鍵走一點(diǎn)行,按住按鍵1.5秒以上持續(xù)走紙
  179.                       if(yyy==0){
  180.                               TIM4_PWM_Init4();
  181.                                     yyy=1;
  182.                             }
  183.                       for(i=0;i<4;i++){                                    //電源脈沖
  184.                               Power_Pulse();
  185.                         delayms(2);
  186.                             }                  
  187.                       Tim4_Pwm();                                          //PWM輸出
  188.                       delayms(8);
  189.                                 }
  190.                                 if(t<101){                                             //計(jì)時(shí)變量t累加
  191.                                         t++;
  192.                                         delayms(15);
  193.                                 }
  194.                   }
  195.                         USART_Cmd(USART3, ENABLE);                               //開串口
  196.     }
  197.   }
  198. }
復(fù)制代碼

所有資料51hei提供下載:
熱敏打印機(jī).rar (18.83 MB, 下載次數(shù): 225)



評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:690045 發(fā)表于 2020-2-28 13:38 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

板凳
ID:82944 發(fā)表于 2022-9-17 14:02 | 只看該作者
沒接觸過打印機(jī),但也要學(xué)習(xí),感覺熱心人士
回復(fù)

使用道具 舉報(bào)

地板
ID:812749 發(fā)表于 2022-10-11 20:29 | 只看該作者
謝謝分享,手頭有二手的熱敏打印機(jī),可以試驗(yàn)一下
回復(fù)

使用道具 舉報(bào)

5#
ID:65369 發(fā)表于 2024-9-28 00:44 | 只看該作者

謝謝分享,手頭正需要者寶貴的資料的
回復(fù)

使用道具 舉報(bào)

6#
ID:277290 發(fā)表于 2024-9-28 08:01 | 只看該作者
謝謝分享,手頭有熱敏打印機(jī),試驗(yàn)一下
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲性在线 | 成人在线精品视频 | 国产一区二区三区四区 | 91精品国产91久久久久久密臀 | 青青久草| 在线中文字幕视频 | 欧美一区二区免费视频 | 国产免费一区二区 | 在线一区视频 | 9191在线播放 | 婷婷精品 | 欧美日韩在线精品 | 午夜欧美| 日本又色又爽又黄的大片 | 亚洲国产精品久久久久 | 亚洲在线| www.伊人.com | 精品国产一区二区国模嫣然 | 一区二区精品视频 | 色婷婷综合久久久中字幕精品久久 | 亚洲精品www.| 黄色毛片在线观看 | 中文字幕国产一区 | 一区二区在线不卡 | 人人看人人草 | 精品熟人一区二区三区四区 | 一级a性色生活片久久毛片 一级特黄a大片 | 一区二区在线免费观看视频 | 看一级黄色毛片 | 欧美a在线观看 | 欧美精品一二三区 | 国产欧美久久一区二区三区 | 波多野吉衣久久 | 免费成人高清在线视频 | 亚洲国产精品成人无久久精品 | 精品一二区 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | av在线电影网站 | 成人午夜免费福利视频 | 伊人激情网 | 久精品视频|