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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6393|回復: 3
收起左側(cè)

LCD1602的STM32驅(qū)動工程模板

[復制鏈接]
ID:249540 發(fā)表于 2017-11-15 09:24 | 顯示全部樓層 |閱讀模式
lcd1602數(shù)字鐘,運行有點小錯
0B1A4D5A0B3E4592611CD5EBC31477D7.png

0.png

單片機源程序如下:
  1. /* 下載完程序后要把BOOT1拔掉在重新上電即可看到效果  */


  2. #include "public.h"
  3. #define DATA (GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15)
  4. #define rs (GPIO_Pin_1)
  5. #define rw (GPIO_Pin_2)
  6. #define e (GPIO_Pin_0)
  7. u8 num[]="0123456789";
  8. u8 b[]=" welcome to PZ  ";
  9. u8 c[6]="Time: ";
  10. u16 m,miao,shi,fen;
  11. u8 a[6];
  12. void GPIOINIT()          //端口初始化
  13. {
  14.         GPIO_InitTypeDef GPIO_InitStructure;
  15.         GPIO_InitStructure.GPIO_Pin=DATA|rs|rw|e;
  16.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  17.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  18.         GPIO_Init(GPIOB,&GPIO_InitStructure);
  19.         GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);//把調(diào)試設(shè)置普通IO口
  20. }
  21. void RCCINIT() //系統(tǒng)初始化
  22. {
  23.         SystemInit();
  24.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  25.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
  26.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
  27.         //如果不加這條語句程序顯示就會出錯,即沒有打開端口復用功能的時鐘配置
  28. }
  29. u8 readbusy()        //忙信號檢測
  30. {               
  31.         u8 f;       
  32.         GPIO_ResetBits(GPIOB,rs);               
  33.         GPIO_SetBits(GPIOB,rw);
  34.         GPIO_SetBits(GPIOB,e);       
  35.         f=((GPIO_ReadInputData(GPIOB)&0X8000));
  36.         delayms(10);
  37.         GPIO_ResetBits(GPIOB,e);
  38.         return f;               
  39. }
  40. void lcdwrc(u8 c)
  41. {       
  42.         while(readbusy());
  43.         GPIO_ResetBits(GPIOB,rs);               
  44.         GPIO_ResetBits(GPIOB,rw);
  45.         GPIO_ResetBits(GPIOB,e);
  46.         delayms(1);
  47.         GPIOB->BSRR = c<<8 & 0xf000;  //將數(shù)據(jù)送到P0口
  48.     GPIOB->BRR = ((~c)<<8) & 0xf000;

  49.         delayms(1);
  50.         GPIO_SetBits(GPIOB,e);
  51.         delayms(1);
  52.         GPIO_ResetBits(GPIOB,e);
  53.         delayms(1);
  54. }

  55. void lcdwrc4bit(long c)
  56. {       
  57.         while(readbusy());
  58.         GPIO_ResetBits(GPIOB,rs);               
  59.         GPIO_ResetBits(GPIOB,rw);
  60.         GPIO_ResetBits(GPIOB,e);
  61.         delayms(1);
  62.         GPIOB->BSRR = c<<8 & 0xf000;  //將數(shù)據(jù)送到P0口
  63.     GPIOB->BRR = ((~c)<<8) & 0xf000;
  64.         delayms(1);
  65.         GPIO_SetBits(GPIOB,e);
  66.         delayms(1);
  67.         GPIO_ResetBits(GPIOB,e);
  68.         delayms(1);

  69.         GPIOB->BSRR = c<<12 & 0xf000;  //將數(shù)據(jù)送到P0口
  70.     GPIOB->BRR = ((~c)<<12) & 0xf000;
  71.         delayms(1);
  72.         GPIO_SetBits(GPIOB,e);
  73.         delayms(1);
  74.         GPIO_ResetBits(GPIOB,e);
  75.         delayms(1);
  76. }

  77. void lcdwrd(long dat)
  78. {
  79.         while(readbusy());               
  80.         GPIO_SetBits(GPIOB,rs);               
  81.         GPIO_ResetBits(GPIOB,rw);
  82.         GPIO_ResetBits(GPIOB,e);
  83.         delayms(1);
  84.         GPIOB->BSRR = dat<<8 & 0xf000;  //將數(shù)據(jù)送到P0口
  85.     GPIOB->BRR = ((~dat)<<8) & 0xf000;
  86.         delayms(1);
  87.         GPIO_SetBits(GPIOB,e);
  88.         delayms(1);
  89.         GPIO_ResetBits(GPIOB,e);
  90.         delayms(1);
  91.         GPIOB->BSRR = dat<<12 & 0xf000;  //將數(shù)據(jù)送到P0口
  92.     GPIOB->BRR = ((~dat)<<12) & 0xf000;
  93.         delayms(1);
  94.         GPIO_SetBits(GPIOB,e);
  95.         delayms(1);
  96.         GPIO_ResetBits(GPIOB,e);
  97.         delayms(1);
  98.         GPIO_ResetBits(GPIOB,rs);
  99. }
  100. void lcdinit()
  101. {
  102.         delayms(15);
  103.         lcdwrc4bit(0x32);
  104.         delayms(5);       
  105.         lcdwrc4bit(0x28);
  106.         delayms(5);
  107.         lcdwrc4bit(0x08);
  108.         delayms(5);
  109.         lcdwrc4bit(0x01);
  110.         delayms(5);
  111.         lcdwrc4bit(0x06);
  112.         delayms(5);
  113.         lcdwrc4bit(0x0c);
  114.         delayms(5);
  115. }
  116. void NVICINIT()
  117. {
  118.        
  119.         NVIC_InitTypeDef NVIC_InitStructure;

  120.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

  121.         NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
  122.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
  123.         NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
  124.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  125.         NVIC_Init(&NVIC_InitStructure);

  126.                
  127. }

  128. void TIMINIT()
  129. {
  130.         TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;

  131.         TIM_ClearITPendingBit(TIM3,TIM_IT_Update);

  132.         TIM_TimeBaseInitStructure.TIM_Period = 2000;//如果等于2000的話是定時1s
  133.         TIM_TimeBaseInitStructure.TIM_Prescaler = 35999;
  134.         TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;
  135.         TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
  136.         TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
  137.        
  138.         TIM_Cmd(TIM3,ENABLE); //使能或者失能TIMx外設(shè)
  139.         TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE );        //使能或者失能指定的TIM中斷

  140.                        
  141. }

  142. void display()
  143. {
  144.         u8 i;
  145.         lcdwrc4bit(0x00+0x80);
  146.         for(i=0;i<16;i++)
  147.         {
  148.                 lcdwrd(b[i]);       
  149.         }
  150.         lcdwrc4bit(0x40+0x80);
  151.         for(i=0;i<6;i++)
  152.         {
  153.                 lcdwrd(c[i]);       
  154.         }
  155. ……………………

  156. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
163.STM32-LCD數(shù)字時鐘設(shè)計.rar (483.68 KB, 下載次數(shù): 88)





回復

使用道具 舉報

ID:219160 發(fā)表于 2018-10-27 23:14 | 顯示全部樓層
你好,謝謝大佬的分享,這對我這個菜鳥有巨大的幫助。不過對于大佬的工程里有些疑問,如果大佬能抽空回答一下我的問題,感激不盡。
疑問:在函數(shù)lcdinit()中,lcd的初始化用的始終是同一個函數(shù)lcdwrc4bit(),而在此函數(shù)中,每次只能4bit初始化,想問大佬,后面的08H,01H,06H,0CH的初始化如何完成?
附上我對lcdwrc4bit函數(shù)的注釋:(亂碼部分不影響程序)
void lcdwrc4bit(long c)
{       
        while(readbusy()); //readbusy = f=1 --> busy --> LOOP WITA
        GPIO_ResetBits(GPIOB,rs);                //rs=0
        GPIO_ResetBits(GPIOB,rw);   //rw=0
        GPIO_ResetBits(GPIOB,e);    //e=0
        delayms(1);                                        //IF C = 0011 0010           ->
        GPIOB->BSRR = c<<8 & 0xf000;  //½«êy¾YËíμ½P0¿ú  yfr//BSRR = 0011 0000 0000 0000 ->  //D7~D0 = 0011 0000
    GPIOB->BRR = ((~c)<<8) & 0xf000;                 // BRR = 1100 0000 0000 0000 ->
        delayms(1);                                       
        GPIO_SetBits(GPIOB,e);  //e=1  ->
        delayms(1);             //     ->  here a pulse -> get D7~D4
        GPIO_ResetBits(GPIOB,e);//e=0  ->
        delayms(1);
                                                     //IF C = 0011 0010           ->
        GPIOB->BSRR = c<<12 & 0xf000;  //½«êy¾YËíμ½P0¿ú yfr//BSRR = 0010 0000 0000 0000 ->  //D7~D0 = 0010 0000
    GPIOB->BRR = ((~c)<<12) & 0xf000;                // BRR = 1101 0000 0000 0000 ->
        delayms(1);
        GPIO_SetBits(GPIOB,e);
        delayms(1);             //e=1  ->
        GPIO_ResetBits(GPIOB,e);//     ->  here a pulse -> get D7~D4
        delayms(1);             //e=0  ->
}
回復

使用道具 舉報

ID:636416 發(fā)表于 2019-11-7 20:36 | 顯示全部樓層
時鐘是用的ds1302嗎
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久久成人 | 一区二区三区免费 | 中文字幕一区二区三区精彩视频 | av日韩精品| 日韩不卡在线观看 | 女同久久另类99精品国产 | 久久黄色网 | 男女网站在线观看 | 久久一区二区三区四区 | 亚洲第一av | 日本高清中文字幕 | 男女精品网站 | 成人国产免费视频 | 亚洲欧美国产精品一区二区 | 盗摄精品av一区二区三区 | 日韩精品一区二区三区视频播放 | 欧美一区二区三区在线观看 | 一区中文字幕 | 精品一区二区三区在线视频 | 国产精品免费在线 | 自拍偷拍中文字幕 | 涩涩鲁亚洲精品一区二区 | 国产免国产免费 | 毛片免费看的 | 蜜桃五月天 | 91免费福利视频 | 91资源在线 | 99精品欧美一区二区三区综合在线 | 狠狠骚 | 亚洲国产精品人人爽夜夜爽 | 久久伊人精品一区二区三区 | 久久久久国产一区二区三区 | 亚洲一区二区在线视频 | 日韩电影免费在线观看中文字幕 | 91最新入口 | com.色.www在线观看 | 一区二区视频在线观看 | 请别相信他免费喜剧电影在线观看 | 亚洲精品国产电影 | 亚洲一区二区精品视频 | 国产精品久久久久久久久久久久 |