娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

數碼管作為最廉價的輸出設備,在各種自動化設備中有很大的應用,最簡單普通的顯示方式為動態刷新顯示,稱為假動態顯示,即通過分時掃描每一位,利于人眼的視覺停留現象,造成一種靜態顯示的效果,如下圖所示:

C51單片機由于運行速度很慢,在高刷新頻率下,單片機的資源耗費很厲害,這樣單片機就不可以再進行大量的計算工作,實際上,單片機在刷新時,只需要周期性的改變GPIO口的狀態就可以了,剩下的時間其實都是在空轉的狀態下,我們能不能將這個空轉的狀態拿來用呢?當然是可以的啦,這里,我們利用單片機的定時器周期地產能中斷,在中斷內進行數碼管的刷新工作,就可以將等待中斷的這個CPU時間拿來做別的事情了。


硬件電路:

代碼貼過來:


主函數


#include "shumaguan.h"

#include "timer.h"

 

 

sbit sw_jdq=P1^0;//定義一位繼電器操作

void main(void)

{

  int cnt=0;//設定初值

  timer_init();//初始化定時器

  while(1)

  {

    value_now = cnt;//送初值到顯示緩存

    delay(50);

    cnt++;

    sw_jdq=~sw_jdq;//切換繼電器狀態

    if(cnt>9999)//數值超出界線,回歸最小

      cnt=-999;

  }

}

數碼管驅動函數


#include "shumaguan.h"

 

#define DType 1 //define the Digital LED type, 1: VCC in common, 0: GND in common

#if DType==1

/*--------------------------------------------------------

Set the digital LED display code 

From left to right for

0,1,2,3,4,5,6,7,8,9,a.b,c,d,e,f,dp,-, 

--------------------------------------------------------*/

uchar code DS_BUF[]={0xc0 , 0xf9 , 0xa4 , 0xb0 , 0x99 , 0x92 , 0x82 , 0xf8 , 0x80 , 0x90 , 0x88 , 

0x83 , 0xc6 , 0xa1 , 0x86 , 0x8e , 0x7f , 0xbf , 0xff };

#else

uchar code DS_BUF[]={0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6b , 0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 

0x7c , 0x39 , 0x5e , 0x79 , 0x71 , 0x80 , 0x40 , 0x00 };

#endif

uchar xdata buf_sm[4];            //set display buffer

  

uchar frash_cnt=0;//刷新計數器

uchar wei_buf=0x10;//位輸出計數器

 

/*--------------------------

Compute the number from Value

value: something to display, range from -999 to 9999, suport float

--------------------------*/

void calc_sm(float value)

{

uint tmp=0;

if(value>=0)//輸入值為正數,不顯示負號

{

if(value>9999)//輸入值大于9999,顯示----

{

buf_sm[0]=17;

buf_sm[1]=17;

buf_sm[2]=17;

buf_sm[3]=17;

}

else if(value>=1000)//輸入值大于999,只顯示整數

{

tmp=value;

buf_sm[0]=tmp/1000;

buf_sm[1]=tmp%1000/100;

buf_sm[2]=tmp%100/10;

buf_sm[3]=tmp%10;

}

else if(value>=100)//顯示一位小數

{

tmp=value*10;

buf_sm[0]=tmp/1000;

buf_sm[1]=tmp%1000/100;

buf_sm[2]=(tmp%100/10)+20;

buf_sm[3]=tmp%10;

}

else if(value>=10)//顯示兩位小數

{

tmp=value*100;

buf_sm[0]=tmp/1000;

buf_sm[1]=(tmp%1000/100)+20;

buf_sm[2]=tmp%100/10;

buf_sm[3]=tmp%10;

}

else//顯示三位小數

{

tmp=value*1000;

buf_sm[0]=(tmp/1000)+20;

buf_sm[1]=tmp%1000/100;

buf_sm[2]=tmp%100/10;

buf_sm[3]=tmp%10;

}

}

else//輸入值小于0,顯示負號,其余同上

{

if((value<0)&&(value>-10))

{

tmp=value*100;

tmp=abs(tmp);

buf_sm[0]=17;

buf_sm[1]=(tmp/100)+20;

buf_sm[2]=tmp%100/10;

buf_sm[3]=tmp%10;

}

else if((value<=-10)&&(value>-100))

{

tmp=value*10;

tmp=abs(tmp);

buf_sm[0]=17;

buf_sm[1]=(tmp/100);

buf_sm[2]=tmp%100/10+20;

buf_sm[3]=tmp%10;

}

else if((value<=-100)&&(value>-1000))

{

tmp=value;

tmp=abs(tmp);

buf_sm[0]=17;

buf_sm[1]=(tmp/100);

buf_sm[2]=tmp%100/10;

buf_sm[3]=tmp%10;

}

    

}

  

}

/*

顯示部分,每執行一次,顯示的位左移一位,移到最左邊時,重新回到最右邊,開始下一次刷新。

定義有小數點的位+20,每次送斷碼,檢查大于20,段與0x7f添加小數點。

*/

void display()

{

  if(frash_cnt<=3)

  {

    wei |=0xf0;//數碼管的消隱

    

    if(buf_sm[3-frash_cnt]>=20)

    {

      duan = (DS_BUF[(buf_sm[3-frash_cnt])-20]&0x7f);//顯示小數點

    }

    else

      duan = DS_BUF[buf_sm[3-frash_cnt]];//不顯示小數點

    

    wei = ~wei_buf;

    wei_buf <<=1;//顯示位左移一位

    frash_cnt++;

  }

  else

  {

    wei |=0xf0;//數碼管的消隱

    frash_cnt=0;

    wei_buf=0x10;//顯示位回到最右邊

  }

}

/*

數碼管自用延時

*/

void delay(uint i)

{

  uchar j;

  for(;i>0;i--)

  for(j=0;j<120;j++);

 

}

數碼管頭文件


#ifndef _shumaguan_h_

#define _shumaguan_h_

#include "math.h"

#include "reg52.h"

#define duan P0

#define wei P2

 

#define uchar unsigned char

#define uint unsigned int

  

extern uchar frash_cnt;

extern uchar wei_buf;

 

void calc_sm(float value);

void display();

void delay(uint i);

 

 

#endif

定時器配置及中斷服務函數


#include "reg52.h"

#include "timer.h"

#include "shumaguan.h"

 

 

float xdata value=0 , value_now = 0;

 

void timer_init()

{

  TMOD = 0x02;                    //set timer0 as mode1 (16-bit)

  TL0 = T1MS;                     //initial timer0 low byte

  TH0 = T1MS;                //initial timer0 high byte

  TR0 = 1;                        //timer0 start running

  ET0 = 1;                        //enable timer0 interrupt

  EA = 1;                         //open global interrupt switch

}

 

/* Timer0 interrupt routine */

void tm0_isr() interrupt 1 using 1

{

    if(value!=value_now)//檢測顯示值與當前值是否匹配

    {

      value=value_now;//刷新顯示值

      calc_sm(value_now);//重新計算顯示值的輸出緩沖區

    }

    display();//刷新數碼管顯示

 

}

定時器頭文件


#ifndef _timer_h_

#define _timer_h_

#include "reg52.h"

#define uchar unsigned char

#define uint unsigned int

  

//-----------------------------------------------


/* define constants */

//#define FOSC 11059200L

#define FOSC 12000000L

 

#define T1MS 0   //1ms timer calculation method in 12T mode

 

//-----------------------------------------------

 

extern float xdata value , value_now;

 

void timer_init();

 

#endif

關鍵字:C51  單片機  數碼管  動態顯示 引用地址:C51單片機數碼管動態顯示

上一篇:單片機控制LCD1602顯示英文句子
下一篇:基于單片機的電子琴設計和硬件平臺設計

推薦閱讀

機器人產業鏈在未來幾年會逐漸完整,高速增長依然會維持,尤其在核心零部件行業,會經歷量變到質變的改變,未來三到五年,各個產業鏈的環節會發生大規模的整合和洗牌,機會也會醞釀其中。 從投資角度,如何看待服務機器人的創業機會,現階段看產品,會要求其有明顯差異化,這不僅包括要有運動、智能、決策的獨到產品能力,還要能夠解決獨到的場景中的痛...
據報道,聯發科通過代子公司Gaintech Co. Limited發布了一個公告,將以每股約兩美元,共4000萬美元的價格認購本土PA龍頭唯捷創芯(Vacnchip)發行之普通股共19,098,449股。從國內的媒體反應來看,這看起來是一件無關緊要的交易。 但有行業內相關人士憂心忡忡地告訴半導體行業觀察記者,綜合考慮Vanchip的地位與國際和國內的射頻產業現狀,聯發科這次入股...
調研機構 Strategy Analytics 最新報告顯示,2020 年第一季度全球平板電腦出貨量達到 3220 萬臺,同比下降 12%。今年受到疫情對供應鏈及消費需求的影響,一季度平板電腦市場表現超出預期。 了解到,一季度平板電腦出貨量排名前五的品牌分別是蘋果、三星、華為、亞馬遜、聯想。雖然蘋果在 2020 年 Q1 季度同比有 3%的出貨量降幅,但出貨量仍然...
示波器最重要的單一特性,即帶寬在頻率域提供范圍標示。帶寬以Hz衡量,根據頻率決定信號范圍,以便能精確顯示及進行測試。帶寬不足,則示波器將不能顯示出實際信號的準確表現。例如,信號的幅度也許會不準確、邊緣也許會不平整、波形細節情況也許會丟失。帶寬是大多數工程師選擇示波器時首先考慮的技術指標。本應用指南將提供一些寶貴的訣竅,幫助您選擇出...

史海拾趣

問答坊 | AI 解惑

集成電路的檢測常識[轉帖]

檢測前要了解集成電路及其相關電路的工作原理。 檢查和修理集成電路前首先要熟悉所用集成電路的功能、內部電路、主要電氣參數、各引腳的作用以及引腳的正常電壓、波形與外圍元件組成電路的工作原理。如果具備以上條件,那么分析和檢查會容易許多。 ...…

查看全部問答∨

三星的2416驅動7寸屏AT070TN84的問題!!!!急!!!!

處理器是s3c2416   ,BSP是2450的(據說這兩個處理器類似), LCD是 7寸TFT屏AT070TN84!!!! 現在的現象是,我在OEMINIT中初始化LCD,并讓其顯示藍色,然后進入CE系統,但是,該顯示藍色的時候LCD顯示的就象屏被關掉沒上電一樣(類似 ...…

查看全部問答∨

有的筆記本按下顯示切換熱鍵能切換到LCD+CRT extended模式,是怎樣實現的??

有的筆記本按下顯示切換熱鍵能切換到LCD+CRT extended模式,是怎樣實現的?? 一般的顯示切換只會在LCD, CRT, LCD+CRT Clone三種模式下進行切換,但是有的notebook能切換到LCD+CRT extended模式,有誰知道這是怎樣實現的?是bios還是driver或者softw ...…

查看全部問答∨

EVC下如何根據文件名和擴展名查找文件

我利用FindFirstFile和FindNextFile 系統中已存在的文件,代碼如下:          CString cFileList[50];         int nFileTotalCount;         nFileTotalCount=0; &nb ...…

查看全部問答∨

請教,STM32的HardFault_Handler的問題

程序運行到sprintf時死機了,調式后發現進入了HardFault_Handler里死循環了。請問這個問題可能由啥原因引起的?還有貌似選了優化后,有時sprintf出來的數據會有錯誤?這個可能由啥原因引起的?謝謝!…

查看全部問答∨

LM3S6911 上拉3.3V與5V

   不知道LM3S6911 的JTAG口能否接5V上拉??      有客戶之前上拉到5V能正常燒錄,lay的板是上拉5V的,現在只能拉到3.3V才能工作。   求解!…

查看全部問答∨

電機控制 - TI旋轉電機_解決方案指南

本帖最后由 dontium 于 2015-1-23 13:09 編輯 TI旋轉電機:憑借自身在高級電機驅動和控制領域的深厚歷史積淀與門類寬泛的模擬和微控制器產品庫,TI可提供完整的電機系統解決方案,從而成為全球市場的領先者。TI將其在電機驅動和控制領域的豐富經驗 ...…

查看全部問答∨

誰能告訴我eefpga2.0+5v供電怎么接,受不了了

USB供電沒法保證共地啊。 筆記本都沒電了,才發現這個地方還有問題。蛋疼死了…

查看全部問答∨

中斷向量表寫入flash

void NVIC_Configuration_TIM5(void) {   NVIC_InitTypeDef NVIC_InitStructure;     NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000);   NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;   ...…

查看全部問答∨

TF卡的功耗問題,特別是經常使用TF卡的進來看看

也有很多對于使用TF卡的場合,功耗還是要講究的 那么不使用時功耗多大?讀或者寫的時候功耗又是多大?有做過實驗的么? 不同品牌的TF做過比較么? 不同的初始化方式例如使用SPI方式功耗又怎樣呢?…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 蒙阴县| 长子县| 平舆县| 五台县| 恩平市| 大安市| 慈利县| 普安县| 美姑县| 基隆市| 大关县| 浑源县| 于田县| 磴口县| 平舆县| 余江县| 舞钢市| 奉贤区| 惠安县| 河南省| 万宁市| 宁南县| 安顺市| 靖江市| 泰兴市| 五华县| 响水县| 衢州市| 贡嘎县| 阿瓦提县| 泰和县| 航空| 三原县| 武乡县| 朝阳县| 合水县| 城步| 登封市| 称多县| 景德镇市| 黄平县|