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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3614|回復: 1
打印 上一主題 下一主題
收起左側

stm32滴答定時器+LCD1602顯示真實系統時鐘Proteus仿真

[復制鏈接]
跳轉到指定樓層
樓主
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
#include "stm32f10x.h"
void LCD1602_GPIO_Config(void)
{
        RCC_APB2PeriphClockCmd(LCD1602_CLK, ENABLE);
        GPIO_InitTypeDef LCD1602_GPIOStruct;
        LCD1602_GPIOStruct.GPIO_Mode = GPIO_Mode_Out_PP;
        LCD1602_GPIOStruct.GPIO_Speed = GPIO_Speed_10MHz;
        LCD1602_GPIOStruct.GPIO_Pin =  LCD1602_E | LCD1602_RS | LCD1602_RW ;
        GPIO_Init(LCD1602_GPIO_PORT,&LCD1602_GPIOStruct);
        //LCD1602_GPIOStruct.GPIO_Mode = GPIO_Mode_Out_OD;
        LCD1602_GPIOStruct.GPIO_Pin =   DB0 |  DB1 | DB2 |DB3 |  DB4 | DB5|
                                                                                                                                        DB6 |  DB7 ;     //若設置為開漏輸出 需要上拉電阻
        GPIO_Init(LCD1602_GPIO_PORT,&LCD1602_GPIOStruct);
}

void LCD1602_WaitReady(void) //檢測忙狀態
{
        uint8_t sta;

        LCD1602_GPIO_PORT->ODR =0x00FF;
        RSO(0);
        RWO(1);
        EO(1);
        SysTick_Delay_Us(1);
        do{
                sta=GPIO_ReadInputDataBit(LCD1602_GPIO_PORT,GPIO_Pin_7);
                EO(0);
        }while(sta);
}

void LCD1602_WriteCmd(uint8_t cmd) //寫指令
{
        LCD1602_WaitReady();
        RSO(0);
        RWO(0);
        EO(0);
        SysTick_Delay_Us(1);
        EO(1);
        LCD1602_GPIO_PORT->ODR &= (cmd|0xFF00);
        EO(0);
        SysTick_Delay_Us(400);
}

void LCD1602_WriteDat(uint8_t dat) //寫數據
{
        LCD1602_WaitReady();
        RSO(1);
        RWO(0);
        SysTick_Delay_Us(30);
        EO(1);
        LCD1602_GPIO_PORT->ODR &=(dat|0xFF00);
        EO(0);
        SysTick_Delay_Us(400);
}

void LCD1602_SetCursor(uint8_t x, uint8_t y)
{
    uint8_t addr;

    if (y == 0)  //由輸入的屏幕坐標計算顯示RAM的地址
        addr = 0x00 + x;  //第一行字符地址從0x00起始
    else
        addr = 0x40 + x;  //第二行字符地址從0x40起始
    LCD1602_WriteCmd(addr|0x80);  //設置RAM地址
}

void LCD1602_ShowStr(uint8_t x, uint8_t y, uint8_t *str, uint8_t len)
{
    LCD1602_SetCursor(x, y);        //設置起始地址
    while (len--)         //連續寫入len個字符數據
    {
        LCD1602_WriteDat(*str++);
    }
}





void LCD1602_Init(void)
{
          LCD1602_GPIO_Config();   //開啟GPIO口
    LCD1602_WriteCmd(0X38);  //16*2顯示,5*7點陣,8位數據接口
    LCD1602_WriteCmd(0x0C);  //顯示器開,光標關閉
    LCD1602_WriteCmd(0x06);  //文字不動,地址自動+1
    LCD1602_WriteCmd(0x01);  //清屏
}
        
int main(void)
{ uint8_t str[8];
        RCC_ClocksTypeDef RCC_Clocks;                        //時鐘結構體

        SysTick_Init(); //滴答定時器初始化
  LCD1602_Init();        


        RCC_GetClocksFreq(&RCC_Clocks);                //獲取片上時鐘
        str[0]=RCC_Clocks.SYSCLK_Frequency/10000000+0x30;
        str[1]=RCC_Clocks.SYSCLK_Frequency/1000000%10+0x30;
        LCD1602_ShowStr(0,0,"sysclk:",7);
        LCD1602_ShowStr(7,0,str,2);
        LCD1602_ShowStr(9,0,"MHz",3);
        while(1);
}
void SysTick_Delay_Us( __IO uint32_t us)  //us延時函數
{
        uint32_t i;
        RCC_GetClocksFreq(&RCC_Clocks);                //獲取片上真實系統時鐘
        SysTick_Config(RCC_Clocks.SYSCLK_Frequency/1000000);
        
        for(i=0;i<us;i++)
        {
                // 當計數器的值減小到0的時候,CRTL寄存器的位16會置1        
                while( !((SysTick->CTRL)&(1<<16)) );
        }
        // 關閉SysTick定時器
        SysTick->CTRL &=~SysTick_CTRL_ENABLE_Msk;
}

void SysTick_Delay_Ms( __IO uint32_t ms)  // ms延時函數
{
        uint32_t i;        
        RCC_GetClocksFreq(&RCC_Clocks);                //獲取片上真實系統時鐘
        SysTick_Config(RCC_Clocks.SYSCLK_Frequency/1000);
        
        for(i=0;i<ms;i++)
        {
                // 當計數器的值減小到0的時候,CRTL寄存器的位16會置1
                // 當置1時,讀取該位會清0
                while( !((SysTick->CTRL)&(1<<16)) );
        }
        // 關閉SysTick定時器
        SysTick->CTRL &=~ SysTick_CTRL_ENABLE_Msk;
}


全部資料51hei附件下載:
滴答定時器LCD1602仿真代碼.7z (189.71 KB, 下載次數: 102)

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:984343 發表于 2021-12-20 21:31 來自手機 | 只看該作者
仿真圖是Proteus8.8版本的
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩二三区 | 作爱视频免费看 | 日韩精品一| 逼逼网| 亚洲精品一区二区二区 | 亚洲综合色网 | 福利网址 | 日本福利在线观看 | 国产人免费人成免费视频 | 国产精品久久久久久久久久久免费看 | 九九热精品在线 | 国产精品成人一区二区 | 久久久av| 99精品欧美 | 国产免费色 | 亚洲午夜视频 | 在线精品一区二区三区 | 中文字幕第100页 | 久久久久久久一区二区三区 | 亚洲综合在线视频 | 欧美伊人 | 亚洲精品9999 | 亚洲一区二区三区免费在线观看 | 电影午夜精品一区二区三区 | 久久久国产精品网站 | 涩在线 | 日韩成人免费视频 | 日韩一区二区三区在线 | 午夜精品久久 | 黄色大片在线视频 | 日韩精品一二三 | 久久中文字幕在线 | 麻豆久久精品 | 日韩视频免费看 | 在线一区| 91精品国产综合久久久久久 | 成人精品国产一区二区4080 | 天天躁人人躁人人躁狂躁 | 颜色网站在线观看 | 欧美日韩国产在线观看 | 久久精片|