新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 數碼管拉幕顯示計數(C語言)

        數碼管拉幕顯示計數(C語言)

        作者: 時間:2016-11-29 來源:網絡 收藏
        /*數碼管拉幕顯示計數我以前初學數碼管時就聽說,

        但是那時候因為基礎不太好,一時沒有想出來,今天
        看到工廠樣品室的恒溫烙鐵上面的(溫度計)數碼管
        就是開機拉幕顯示,感覺挺不錯的,我就想了一下它程序

        本文引用地址:http://www.104case.com/article/201611/323380.htm

        原理,然后真的就寫出了我想要的效果,其實蠻簡單的

        ,只要將要顯示的數或運算一下就搞定了,哈

        !數碼管硬件顯示原理我就不介紹了,下面將我寫得

        代碼及實際視頻效果分享一下,請大家指教!*/

        一、視頻效果參見以下地址:

        http://www.tudou.com/programs/view/U89zcpfoUYk/

        完整代碼下載地址:http://www.51hei.com/f/lmsmg.rar

        二、具體程序:

        #include//頭文件
        #define uint unsigned int//整型宏定義
        #define uchar unsigned char//字符型宏定義
        uchar BUF[2];//兩個緩存數組
        sbit ge=P2^0;//數碼管位選端個位控制IO口
        sbit shi=P2^1;//數碼管位選端十位控制IO口
        uchar code table[]={
        0xc0,0xf9,0xa4,0xb0,0x99,
        0x92,0x82,0xf8,0x80,0x90,
        0x88,0x83,0xc6,0xa1,0x86,
        0x8e
        };//數碼管0--9數組代碼
        uchar code table1[]={
        0xfe,0x9c,0x88,0x80
        };//數碼管拉幕方式代碼,一共分4次
        /**********************************/
        /************延時子函數************/
        /**********************************/
        void delay(uchar z)
        {
        uchar x,y;//兩個局部變量
        for(x=50;x>0;x--)//外循環
        for(y=z;y>0;y--);//內循環
        }
        /**********************************/
        /************顯示子函數************/
        /**********************************/
        void xian()
        {
        uchar i,y;//循環變量
        uchar num;//計數變量
        for(y=0;y<4;y++)//循環4次形成上下拉幕
        {
        for(i=0;i<100;i++)//每次顯示完后停留的時間
        {
        BUF[0]=table[num/10];//得到個位數,然后存在緩存數據BUF[0]
        P0=BUF[0]|table1[y];/***將緩存數與table1[y]中的數或,從而形成拉幕的關鍵****/
        ge=0;//開個位顯示
        delay(2);
        ge=1;
        BUF[1]=table[num%10];//得到十位數,然后存在緩存數據BUF[1]
        P0=BUF[1]|table1[y];/***將緩存數與table1[y]中的數或,從而形成拉幕的關鍵****/
        shi=0;//開十位顯示
        delay(2);
        shi=1;
        }
        }

        for(i=0;i<250;i++)//拉幕完成后,將剛拉幕完的數停留一段時間
        {
        P0=BUF[0];//送數碼管個位數
        ge=0;
        delay(2);
        ge=1;
        P0=BUF[1];//送數碼管十位數
        shi=0;
        delay(2);
        shi=1;
        }
        num++;//將計數器數加1
        if(num>60)//如果計數變量大于60就清0,重新開始計數
        num=0;
        }
        /**********************************/
        /*****************主函數***********/
        /**********************************/
        void main()
        {
        while(1)
        {
        xian();//調用顯示子函數
        }
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 长垣县| 太谷县| 龙岩市| 济源市| 桓台县| 阿克苏市| 玉树县| 南康市| 开封市| 湘乡市| 静宁县| 贵德县| 盐津县| 陆川县| 彭州市| 腾冲县| 南靖县| 德惠市| 察哈| 措勤县| 永城市| 新绛县| 马公市| 莱州市| 卓资县| 锡林郭勒盟| 波密县| 桂东县| 盖州市| 金阳县| 沽源县| 开平市| 拜城县| 曲阜市| 余庆县| 米脂县| 伊金霍洛旗| 绥阳县| 泽库县| 岑巩县| 雷波县|