赞
踩
掌握STC89C52RC单片机最小系统构成,最小系统由单片机芯片、时钟电路及复位电路组成。
掌握STC89C52RC单片机开发板与数码管的原理图、控制方式。
掌握对单片机I/O的复杂控制
熟练掌握C语言的设计和调试方法。
一套STC89C52RC开发板套件,包括STC89C52RC开发板,以及USB烧录线。
使用STC89C52RC的I/O控制、调配数码管,使得数码管能够在相应的位置显示出99累减。
通过观察原理图使用I/O口进行数据的控制,通过段码与位码分别控制数码管的数字、以及控制哪个数码管进行数字显示,最后通过循环函数实现99累减的功能,在预计的数码管上显示。
单片机数码管上数字从99开始递减直至00。
- #include <reg52.h>
-
- #define DataPort P0 //定义数据端口
- sbit LATCH1 = P2 ^ 6; //定义锁存使能端口 段锁存
- sbit LATCH2 = P2 ^ 7; // 定义锁存使能端口 位锁存
-
- unsigned char code DuanMa[] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管段码表
-
- unsigned char code WeiMa[] = { 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位码表
-
- unsigned char TempData[8]; //用来存放数码管数据
- void Delay(unsigned int t); //延迟函数
- void Display(unsigned char FirstBit, unsigned char Num); //数码管显示函数
- main()
- {
- unsigned char num = 99; //设置初始数字为99
- unsigned int j = 0; //设置初始变量j用于计数,与累减器数字变化的时间相关
- while (1)
- {
- j++;
- if (j == 500) //这个数字与数码管数字变化时间有关
- {
- j = 0;
- if (num > 0)
- {
- num--; //控制累减器数字递减
- }
- else
- {
- num = 99; //当数字为00时,数字重置为99
- }
- }
- TempData[0] = DuanMa[num / 10]; //取十位数
- TempData[1] = DuanMa[num % 10]; //取个位数
-
- Display(2, 2);
- }
- }
-
- void Delay(unsigned int t)
- {
- while (t--)
- {
-
- }
- }
- void Display(unsigned char FirstBit, unsigned char Num)
- {
- unsigned char i;
- for (i = 0; i < Num; i++)
- {
- DataPort = 0; //清空数据,防止有交替重影
- LATCH1 = 1;
- LATCH1 = 0;
-
- DataPort = WeiMa[i + FirstBit]; //取位码
- LATCH2 = 1; //位锁存
- LATCH2 = 0;
-
- DataPort = TempData[i]; //取显示数据,段码
- LATCH1 = 1; //段锁存
- LATCH1 = 0;
-
- Delay(200); //扫描间隙延时,时间太长会闪烁
- //太短会造成重影
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。