功能:按鍵查詢控制數碼管顯示的資料,定時器中斷控制數碼管掃瞄顯示
所用器件:stc12c5a32s2
#include "config.h"
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
#define key2 p3_5
#define key3 p3_6
int num; // 顯示資料
int frontdot; // 個位顯示
int behinddot; // 小數顯示
int xms;
int x = 0;
int leddata0[10] = ;
int leddata1[10] = ;
// 延時約(0.001 * n)秒
void delay(unsigned int n)
ulong msnum = 923; // 指令迴圈923次為一秒
do while (--n != 0);
定時器0中斷函式
功能:每過一秒掃瞄數碼管顯示
void timer0() interrupt 1
th0 = 0xfc; // 重要!!第一次計數滿後會從0開始計數,應該在中斷程式中重設計數初值
tl0 = 0x65;
xms++;
if(xms == 10){
if(x++ > 100) x = 0;
switch(x%2){
case 0:
p0_4 = 0;
p2 = leddata0[behinddot];
p0_3 = 1;
break;
case 1:
p0_3 = 0;
p2 = leddata1[frontdot];
p0_4 = 1;
break;
xms = 0;
// 定時器0初始化
void timer0_init()
tmod = 0x01; // 設定定時器0為工作方式1,中斷只需一次設定
th0 = 0xfc; // 設定計數初值
tl0 = 0x65;
ea = 1; // 開總中斷
et0 = 1; // 開定時中斷0
tr0 = 1; // 啟動定時器0,計數滿後執行中斷服務程式timer0()
// 主程式入口
void main(void)
int x = 0; // 控制每次重新整理哪位數字
num = 0;
xms = 0;
frontdot = 0;
behinddot = 0;
p0_0 = 0;
p0_1 = 0;
p0_2 = 0;
p0_3 = 0;
p0_4 = 0;
key2 = 1;
key3 = 1;
timer0_init();
for(;;){
if(key2 == 0) {
delay(1);
if (key2 == 0){
num++;
if (num > 99) num = 99;
frontdot = num / 10;
behinddot = num % 10;
while (!key2);
delay(1);
if(key3 == 0) {
delay(1);
if (key3 == 0){
num--;
if (num < 0) num = 0;
frontdot = num / 10;
behinddot = num % 10;
while (!key3);
delay(1);
數碼管用定時中斷掃瞄顯示比較穩定,如果按鍵中斷,按鍵之後程式會去處理中斷而不管顯示
按鍵控制數碼管
按key1加一,按key2減一,按key3清零 include reg52.h 此檔案中定義了微控制器的一些特殊功能暫存器 typedef unsigned int u16 對資料型別進行宣告定義 typedef unsigned char u8 sbit lsa p2 2 sbit lsb p2 ...
三菱PLC數碼管顯示及按鍵控制實驗
日常工程中,有時需要顯示乙個溫度或是乙個計數,或是修改乙個按鍵值,使用觸屏是乙個不錯的選擇,但有時不想那麼複雜,可以使用數碼管嗎?當然可以,風哥來分享一款自己設計的plc能控制數碼管的顯示,並且來控制按鍵,程式設計簡單,只需不超過20步即可以實現數值顯示,清屏,亮度調整等功能。首先來看看這款數碼管按...
關於按鍵消抖以及LED燈控制的乙個例項
要求 1.未按建則所有led全黑 2.按k1按鈕,則用前8個led燈二進位制顯示25 3.按k2按鈕,則12只led合併顯示流水燈效果,3個led點亮並向右流水。注 是hr 240b fpga 創新實驗系統,其核心板的核心晶元為 epm240t100c5n 分析 led是共陰極,所以點亮led需要高...