日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

基于AT89C52数码管循环移位显示

發(fā)布時(shí)間:2023/12/29 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于AT89C52数码管循环移位显示 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言
本文章主要介紹利用矩陣鍵盤(pán)隨意輸入0~9數(shù)值,循環(huán)移位顯示。
電路設(shè)計(jì)
這是一個(gè)相對(duì)比較簡(jiǎn)單的電路設(shè)計(jì)起來(lái)也是比較容易的,主要用到一個(gè)八位數(shù)碼管和按鍵、單片機(jī)一個(gè)。下圖所示就是博主在Proteus仿真軟件中設(shè)計(jì)的一個(gè)簡(jiǎn)易的電路圖。

電路原理
系統(tǒng)實(shí)現(xiàn)顯示通過(guò)矩陣按鍵輸入數(shù)值到單片機(jī)后顯示到數(shù)碼管上,隨著矩陣按鍵值得輸入數(shù)碼管也進(jìn)行移位顯示。

數(shù)碼管移位循環(huán)顯示原理
其實(shí)數(shù)碼管的移位循環(huán)顯示還是通過(guò)一位一位的顯示,循環(huán)顯示的主要特點(diǎn)就是所有數(shù)碼管的段選線并聯(lián)到一起,由位控制線控制哪一位數(shù)碼管有效。循環(huán)顯示其實(shí)說(shuō)的就是單片機(jī)輪流向各位數(shù)碼管送出相應(yīng)的字形碼與相應(yīng)的位選嗎。利用發(fā)光管得余輝和視覺(jué)暫留作用,使人們感覺(jué)所有數(shù)碼管都是在同時(shí)顯示。循環(huán)顯示的亮度效果會(huì)比靜態(tài)數(shù)碼管顯示的亮度暗一些,所以在選擇限流電阻的過(guò)程中阻值應(yīng)小于靜態(tài)數(shù)碼管的阻值。

程序設(shè)計(jì)
程序設(shè)計(jì)相對(duì)來(lái)說(shuō)還是比較簡(jiǎn)單的,主要是一個(gè)數(shù)碼管的顯示子程序和一個(gè)按鍵處理程序。相關(guān)程序如下所示。

#include <reg52.h> //定義相關(guān)頭文件 #include <intrins.h> #include <stdio.h>typedef uchar unsigned char; //定義數(shù)據(jù)類型 typedef uint unsigned int;#define DPIO_KEY P1 //定義矩陣按鍵IO口 #define ledw P2 //定義數(shù)碼管位選端口 #define ledd P0 //定義數(shù)碼管段選端口uchar down=0; //循環(huán)移位標(biāo)志位 uchar a[]={0,0,0,0,0,0,0,0}; //數(shù)據(jù)緩存 uchar num;uchar code smgd[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //定義數(shù)字0~F段碼void delay(uint i) //軟件延時(shí)子程序 {while(i--); }uchar keycan() //帶返回值得按鍵處理子程序 {uchar a; //判斷按鍵松開(kāi)標(biāo)志位DPIO_KEY=0x0f; //數(shù)碼管掃描方式利用行列掃描方式if(DPIO_KEY!=0x0f){delay(100);DPIO_KEY=0x0f;if(DPIO_KEY!=0x0f){switch(DPIO_KEY){case 0x07: num=0;break;case 0x0b: num=1;break;case 0x0d: num=2;break;case 0x0e: num=3;break;}DPIO_KEY=0xf0;switch(DPIO_KEY){case 0x70: num=num;break;case 0xb0: num=num+4;break;case 0xd0: num=num+8;break;case 0xe0: num=num+12;break;}while((a<0)&&(DPIO_KEY!=0xf0)){delay(100);a++;}}down=1; //移位標(biāo)志置1,后續(xù)需要}return num; //數(shù)字返回 }void main() //主程序 {uchar temp,i,j;temp=0x7f; //數(shù)碼管位賦值,最高位為0ledw=temp; //將數(shù)碼管位等于的值賦給數(shù)碼管位選端口while(1){keycan(); //調(diào)用按鍵處理程序a[0]=num; //存值if(down==1) //判斷數(shù)碼管唯一標(biāo)志{for(j=8;j>0;j--) //數(shù)值位移{a[j]=a[j-1]; //將低位移到高位}down=0; //復(fù)位移位標(biāo)志}for(i=0;i<100;i++) //動(dòng)態(tài)掃描{for(j=8;j>0;j--) //數(shù)碼管位循環(huán)顯示{ledw=_cror_(temp,j-1); //數(shù)碼管位選位移ledd=0xff; //消隱ledd=smgd[a[j]]; //數(shù)碼管顯示delay(100);}}} }

學(xué)習(xí)使人快樂(lè),學(xué)習(xí)勇無(wú)止境,日常分享自己的學(xué)習(xí)心得。

總結(jié)

以上是生活随笔為你收集整理的基于AT89C52数码管循环移位显示的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。