51单片机数码管显示程序设计
- 格式:ppt
- 大小:133.00 KB
- 文档页数:18


目录
一、设计目的……………………………………………………4
二、设计要求……………………………………………………4
三、设计电路图…………………………………………………4
四、设计说明……………………………………………………5
1、数码管的显示原理………………………………………………5
2、晶振的作用………………………………………………………5
五、参考程序框图:……………………………………………6
六、参考代码…………………………………………………7-9
七、设计时使用的主要参考书及手册…………………………9
八、设计心得:…………………………………………………9
单片机课程设计
- 2 - 两位数码管计数
一、设计目的:
1. 学习外部中断技术的基本使用方法。
2. 学习中断处理程序的编程方法。
3. 学习51单片机内部计数器的使用和编程方法。
4. 学习使用数码管的显示原理以及应用。
二、 设计要求:
按开关开始,在按开关停止计秒,计秒从0开始,讲到99,再从0开始计秒。按下复位键开关,数码管就会显示0.
三、 设计电路连线:
单片机课程设计
- 3 -
四、 设计说明:
1、 数码管的显示原理:
@ 单片机系统扩展LED数码管时多用共阳LED:
共阳数码管每个段笔画是用低电平(“0”)点亮的,要求驱动功率很小;而共阴数码管段笔画是用高电平(“0”)点亮的,要求驱动功率较大。
@ 通常每个段笔画要串一个数百欧姆的降压电阻。
字形 0 1 2 3 4 5 6 7 8 9 黑
共阳 0C0 0F9 0A4 0B0 99 92 82 0F8 80 90 0FF
共阴 FC 60 da F2 66 B6 BE E0 FE F6 00
计时计算:
fosc = 12MHz 则:
(振荡周期)1Tc=1/12MHz
(机器周期)1Tm=12Tc=12/12MHz=1S
1 / 5
51单片机应用:8只数码管同时显示多个不同字符
设计要求
单片机控制8只数码管,同时显示8个字符。例如,从左至右显示“”,接着显示“”,在接着显示“”,„„“”,“”,
分析及方案设计:
本题可以采用扩展I/O口或直接用单片机自身的I/O口的方法实现。为节省硬件设施并使电路连线尽量简单,采用直接使用单片机自身I/O口的方式,8个数码管同时显示数字则需采用动态显示方法,初步设定以P0口给出数码管显示字段,P1口选中某一时刻动态点亮的数码管。
软件设计可以有以下几种方案:
a)将全部显示状态列出,放在主程序中不断循环
b)将显示状态放入8个数组中,每个状态循环一次后主程序重新开始循环
c)只设置两个数组,其中一个取值不变,为正序的从1到8的共阳极数码管段码,另一个数组中的数值不断被修改,即每次显示状态改变的时候都相应改变一次,如从的段码改为的段码。
从上述方案可以看出,若设置太多的数组或列出所有显示状态,程序虽然清晰易懂但占用程序存储空间明显较大,且用delay()函数延时的话会不断占用CPU;用两个数组和两个定时器虽然算法略复杂,但程序可以达到最简化。
详细的方案说明:
1)采用数码管动态显示方法。
2)8个数码管由P3控制位选,即决定某一时刻哪一个数码管亮,由P0发出的总线控制显示的段码。
3)定时器T0和T1同时工作,定时时间均为
0."5毫秒,采用方式1定时,每次溢出后由软件重装初值。
2 / 5
4)设置中间变量temp,用于不断左移并给P3赋值;数组display[]为code即取之不变的数组,数组show[]中的取值变化。
5)每次T0计数溢出时,temp左移一次,相应的P3左移一次,数码管由第i个点亮变为第i+1个点亮,与此同时赋给P0口的值由show[i]变为show[i+1],达到动态显示的效果。
6)定时器T1也是每
0."5毫秒计数溢出一次,但只有到1秒时才执行定时器1中断中修改数组show[]取值的程序,用变量t记录T1溢出的次数,达到200次时数组show[]中的内容开始进行修改并且t清零。假设showp[0]到show[7]中的取值分别为共阳极数码管显示
单片机 C 语言程序设计:8 只数码管滚动显示数字、字
符
/* 名称:8 只数码管滚动显示单个数字
说明:数码管从左到右依次滚动显示
0~7,程序通过每次仅循环选通一只数码
管
*/
#includereg51.h
#includeintrins.h
#define uchar unsigned char
#define uint unsigned int
uchar code
DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//延时
void DelayMS(uint x)
{
uchar t;
while(x--) for(t=0;t120;t++);
}
//主程序
void main()
{
51 单片机+74HC595 驱动数码管程序
这里是电路图:完整的源码和图纸下载地址:51hei/bbs/dpj-20392-1.html
下面是 51 单片机驱动 74hc595 芯片的程序:#include //包含 51 单片机的头文
件#include #define uint unsigned int#define uchar unsigned char//sbit sin_595
=P1;//sbit rclk_595 =P1 ;//sb it sclk_595 =P1 ;//sbit s_clr =P1 ;sb it a_cp_595 =P2 ;
//串行移位时钟脉冲 sh_cp_595sbit b_cp_595 =P2 ; //输出锁存器控制脉冲
st_cp_595//sbit _oe_595 =P1 ; //8 位并行输出使能/禁止(高阻态)sbit ds_595
=P2 ; //串行数据输入 extern uchar datas[6]; //存放 6 个数码管的显示数字 uchar
ledcode[]={0xC0,// 00xF9,// 10xA4,// 20xB0,// 30x99,// 40x92,// 50x82,// 60xF8,//
70x80,// 80x90,// 90x88,// A0x83,// B0xC6,// C0xA1,// D0x86,// E0x8E// F};void
delay(uint z){uint t1,y;for(t1=z;t1>0;t1--)for(y=110;y>0;y--);}void
led_display(void){ uchar i,j; bit testb; uchar bdata movebit[6]; uchar bdata test;
//_oe_595=0; //选中数码管 for(i=0;i<6;i++) movebit[i]=ledcode[datas[i]]; // P1=0;