1. 程式人生 > >流水燈&數碼管&定時器中斷

流水燈&數碼管&定時器中斷

根據郭天祥老師定時器流水燈課件作業。
利用動態掃描和定時器1在數碼管上顯示出從765432開始以1/10秒的速度往下遞減直至765398並保持顯示此數,與此同時利用定時器0以500MS速度進行流水燈從上至下移動,當數碼管上數減到停止時,實驗板上流水燈也停止然後全部開始閃爍,3秒後(用T0定時)流水燈全部關閉、數碼管上顯示出“HELLO”。到此保持住。

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uint temp=0xfe,num=432
,time; sbit dula=P2^6; sbit wela=P2^7; uchar code table_du[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar code table_we[]={ 0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; void delay(uint z); void disply(); void init(); void disply_hello(); void main() { int mark=0; init(); while(1
) { if(num>398) { disply(); P1=temp; } else if(num==398&&mark!=3) { mark++; while(time<20) { disply(); P1=0x0; } while(time>=20
&&time<=40) { wela=1; P0=0xff; wela=0; dula=1; P0=0xff; dula=0; P1=0xff; if(time==40) time=0; } } else if(mark==3) { while(1) disply_hello(); } } } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void time0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; time++; if(num>398) if(time==4||time==8||time==12||time==16||time==20) { if(time==20) { temp=_crol_(temp,1); time=0; } num--; if(num==398) time=0; } } void init() { num=432; TMOD=1; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; } void disply() { uint a,b,c; a=num/100; b=num/10%10; c=num%10; P0=0x0; wela=1; P0=table_we[0]; wela=0; P0=0x0; dula=1; P0=table_du[7]; dula=0; delay(1); P0=0x0; wela=1; P0=table_we[1]; wela=0; P0=0x0; dula=1; P0=table_du[6]; dula=0; delay(1); P0=0x0; wela=1; P0=table_we[2]; wela=0; P0=0x0; dula=1; P0=table_du[5]; dula=0; delay(1); P0=0x0; wela=1; P0=table_we[3]; wela=0; P0=0x0; dula=1; P0=table_du[a]; dula=0; delay(1); P0=0x0; wela=1; P0=table_we[4]; wela=0; P0=0x0; dula=1; P0=table_du[b]; dula=0; delay(1); P0=0x0; wela=1; P0=table_we[5]; wela=0; P0=0x0; dula=1; P0=table_du[c]; dula=0; delay(1); } void disply_hello() { P0=0x0; wela=1; P0=table_we[0]; wela=0; P0=0x0; dula=1; P0=0x76; dula=0; delay(1); P0=0x0; wela=1; P0=table_we[1]; wela=0; P0=0x0; dula=1; P0=0x79; dula=0; delay(1); P0=0x0; wela=1; P0=table_we[2]; wela=0; P0=0x0; dula=1; P0=0x38; dula=0; delay(1); P0=0x0; wela=1; P0=table_we[3]; wela=0; P0=0x0; dula=1; P0=0x38; dula=0; delay(1); P0=0x0; wela=1; P0=table_we[4]; wela=0; P0=0x0; dula=1; P0=0x3f; dula=0; delay(1); P0=0x0; wela=1; P0=table_we[5]; wela=0; P0=0x0; dula=1; P0=0x0; dula=0; delay(1); }

相關推薦

流水&數碼&定時中斷

根據郭天祥老師定時器流水燈課件作業。 利用動態掃描和定時器1在數碼管上顯示出從765432開始以1/10秒的速度往下遞減直至765398並保持顯示此數,與此同時利用定時器0以500MS速度進行流水燈從上至下移動,當數碼管上數減到停止時,實驗板上流水燈也停止然後

C51--點亮LED(for迴圈、while迴圈、定時中斷迴圈)

第一步:開啟keil4,建立工程,at89c52。 1.點亮第一個LED燈 #include<reg52.h> sbit led=P2^0; void main() { led=0;//低電平亮 } 2.利用延時來使LED 1秒閃爍,500ms變

51微控制器定時中斷控制1S亮的程式

#include   <AT89X51.H>unsigned char i=0,j=0; void main(){ TMOD=0X01; TH0=0X4c; TL0=0X00; TR0=1;ET0=1;EA=1;P0_3=1;  while(1)   {};} t

Stm32定時中斷使LED閃爍

知識點: Stm32共有11個定時器: 1.兩個高階定時器:TIM1、TIM8-------------------------APB2 2.四個通用定時器:TIM2~TIM5-------------------------APB1 3.兩個基本定時器:TIM6、TIM7

stm32-定時中斷

cmd open 兩個 typedef clock 數據手冊 濾波 重裝 fin 由於現在是在學用庫函數操作,我的目標是知道用到的每個函數的作用,需要的時候可以加以更改使用,所以關鍵是要怎麽知道stm32各函數的作用 雖然從名字上也能知道個大概,但是細節還是要查stm3

TI CC2530 學習筆記-7-NewBit-CC2530-Interrupt-定時中斷

TI CC2530 學習筆記-目錄 TI CC2530 學習筆記-7-NewBit-CC2530-Interrupt-定時器中斷 設定CC2530定時器4每1ms中斷一次,在中斷裡對溢位進行計數,當計數達到1000次(1秒)時小燈狀態改變。 配置定時器和LED

51微控制器使用定時中斷模擬PWM控制埠電壓

  最近應實驗室需求寫一篇51微控制器產生PWM的文章供參考.   微控制器晶片STC89C52,晶振12MHz,編譯環境Keil5.   分析:若使微控制器埠為高電平, 則微控制器輸出電壓為恆值5V. 反之低電平輸出電壓為0V. 但是我們如果在週期為T的時間內

[STM32F103]定時中斷

l 使能定時器時鐘。   RCC_APB1PeriphClockCmd(); l 初始化定時器,配置ARR,PSC。   TIM_TimeBaseInit(); l 開啟定時器中斷,配置NVIC。   void TIM_ITConfig();   NVIC_Init(

微控制器MSP430 - Timer_A 定時中斷程式

一、利用定時器定時功能,實現定時器單個溢位中斷,實現 P3.0 方波輸出 #include "cc430x613x.h" void main() { WDTCTL = WDTPW + WDTHOLD; // 停止看門狗定時器 P3DIR |=

stm32f103定時中斷

stm32為我們提供了8個定時器,分為:通用是定時器(TIM2~TIM5),高階定時器(TIM1和TIM8),基本定時器(TIM6和TIM7)。 至於三者之間的區別可以參考以下部落格:https://blog.csdn.net/dukai392/article/details/72058041

ZYNQ-7000私有定時中斷

  轉自:https://blog.csdn.net/RZJMPB/article/details/50812579 本片文章將在ZYNQ的純PS裡實現私有定時器中斷。每個一秒中斷一次,在中斷函式裡計數加1,通過串列埠列印輸出。 *本文所使用的開發板是Miz702(相容zedb

C6678定時中斷學習180614

第一次寫部落格,希望能夠在兩年內記錄一下自己的學習歷程。目前剛開始接觸DSP,所以在學習DSP上會對多寫點,如果有不對的地方 希望大家能夠不吝賜教! 話不多說,接觸的6678板子,所以先從6678的中斷部分開始寫起,之前寫了一個GPIO的,但是樓主發現腦子短路了,因為沒有外部中斷GPIO

51微控制器定時中斷程式

程式執行開始,A燈先亮5秒,然後滅了到B燈亮5秒,B再滅再到C燈亮5秒,C滅,程式結束,不再執行。這程式該怎麼寫?用定時器精確定時……晶振11.092MHZ。 #include "REG52.H" /* * */ sbit LED_A = P1^0; sbit

STM32F107的通用定時中斷實驗總結

1.     STM32F107的通用定時器是指:  TIM2、TIM3、TIM4、TIM5、 STM32F107的高階定時器是指:  TIM1、TIM8 STM32F107的基本定時器是指:  TIM6、TIM7 2.     STM32F107的通用定時器(TIM2、T

[HAL庫學習之路]7.定時中斷

記錄自己的STM32的HAL庫的學習之路,不定期更新… 一、Pinout 二、Clock Configuration 三、Configuration 定時器溢位時

微控制器的定時中斷以及使用的一般步驟(51為例)

51微控制器共有兩個16位可程式設計的定時器/計數器,即定時器T0和定時器T1。它們既有定時功能又有計數功能,通過設定一些相關的特殊功能暫存器就可以選擇啟用哪一個功能。定時器系統是微控制器內部一個獨立硬體部分,與CPU和晶振之間通過內部某些控制線連線並相互作用,

STM32CubeMX學習教程之四:定時中斷

完整原始碼下載:https://github.com/simonliu009/STM32CubeMX-TIM1-Interrupt軟體:STM32CubeMX V4.25.0  System Workbench V2.4韌體庫版本:STM32Cube FW_F1 V1.6.1

Arduino—定時中斷的簡單實現

實驗中使用到的Arduino開發板型號為Mega 2560。Mega 2560的工作電壓為5V,其標明的推薦電壓為7~12V,在開發專案的時候,一般要用到變壓器。其供電型別有3.3V和5V兩種。這裡進行中斷實驗時,沒這麼麻煩,只需將這塊板子和電腦用USB線連線起來即可。首先,

用連結串列+函式指標+定時中斷實現的一個軟體定時(試用於所有微控制器)

因為需要移植nrf51822的程式到普通微控制器上,於是分析了協議棧裡的軟體定時器,用連結串列+函式指標+定時器中斷的方法實現了軟體定時器的功能。 下面介紹程式碼和使用方法 1、函式指標和連結串列初始化 typedef void (*app_timer_timeout_

STM32之定時中斷控制LED閃爍

上篇部落格我們是用延時函式實現了LED的閃爍,今天我們使用STM32的定時器來使LED閃爍。 關於32的定時器的種類,今天我在這先不做過多的說明,有時間我會再另寫一篇部落格來專門介紹32的定時器。今天我們使用32的定時器3來產生中斷,以實現LED的閃爍。 今