蓝桥杯之动态数码管快捷编写

这篇博客详细介绍了如何为蓝桥杯准备动态数码管程序。从打开C程序、修改晶振频率到添加头文件,再到修改点亮灯的方式,作者一步步指导读者操作。文章还提供了正确的段码,并给出了完整的源代码,帮助读者理解并实践动态数码管显示01234567的过程。
摘要由CSDN通过智能技术生成



1、参加蓝桥杯的同学一定能看懂,按我的步骤打开,我的是2017年的版本,你们根据自己需要自己找合适的吧






2、打开C程序、点击复制代码、粘贴到keil4






3、复制代码后、你需要修改这三处






在【1】处加头文件:#include "intrins.h"

在【2】处修改晶振:18432000L  改成  11059200L

在【3】处修改点亮灯的方式为:P2 = 0x80; P0 = ~P0; P2 = 0;



4、修改好的程序如下,你们检查自己的是否正确




5、修改完成无误后,烧写看到现象:【8个led开始亮灭,周期1s】



6、上一个步骤只是一个测试程序,接下来教你怎样写:动态数码管



7、自己先拿电脑上的画板把共阳极的段码自己画一遍,正确的段码为:0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90



8、修改程序如下







9、我这里给出源代码、但是你们一定要先按照的我的步骤【自己写一遍】,这样才有效果!!!


/*------------------------------------------------------------------*/
/* --- STC MCU Limited ---------------------------------------------*/
/* --- STC89-90xx Series 16-bit Timer Demo -------------------------*/
/* --- Mobile: (86)13922805190 -------------------------------------*/
/* --- Fax: 86-755-82905966 ----------------------------------------*/
/* --- Tel: 86-755-82948412 ----------------------------------------*/
/* --- Web: www.STCMCU.com -----------------------------------------*/
/* If you want to use the program or the program referenced in the  */
/* article, please specify in which data and procedures from STC    */
/*------------------------------------------------------------------*/


#include "reg51.h"
#include "intrins.h"


typedef unsigned char BYTE;
typedef unsigned int WORD;


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


/* define constants */
#define FOSC 11059200L


#define T1MS (65536-FOSC/12/1000)   //1ms timer calculation method in 12T mode


/* define SFR */
sbit TEST_LED = P1^0;               //work LED, flash once per second


/* define variables */
WORD count;                         //1000 times counter


BYTE T_display[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
BYTE T_buff[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};


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


/* Timer0 interrupt routine */


void tm0_isr() interrupt 1 using 1
{
    static BYTE i = 0;
TL0 = T1MS;                     //reload timer0 low byte
    TH0 = T1MS >> 8;                //reload timer0 high byte
    if (count-- == 0)               //1ms * 1 -> 1ms
    {
        count = 1;               //reset counter
        P2 = 0xE0;P0 = T_display[i]; P2 = 0;  //duan_xuan
P2 = 0xC0;P0 = T_buff[i]; P2 = 0; //wei_xuan
if(++i == 8) i = 0;


    }
}


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


/* main program */
void main()
{
P2 = 0x80;P0 = 0xFF; P2 = 0;
P2 = 0xA0;P0 = 0x00; P2 = 0;    


TMOD = 0x01;                    //set timer0 as mode1 (16-bit)
    TL0 = T1MS;                     //initial timer0 low byte
    TH0 = T1MS >> 8;                //initial timer0 high byte
    TR0 = 1;                        //timer0 start running
    ET0 = 1;                        //enable timer0 interrupt
    EA = 1;                         //open global interrupt switch
    count = 0;                      //initial counter


    while (1);                      //loop
}

10、执行成功后,你们将看到动态数码管的显示效果(01234567)了,我这种方法也是视频里老师教的(谢谢老师,老师莫生气哦),只不过我把内容细化了一下,哈哈,大家一起学习嘛!共同进步!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值