51单片机C语言应用程序实例精讲Word文件下载.docx
《51单片机C语言应用程序实例精讲Word文件下载.docx》由会员分享,可在线阅读,更多相关《51单片机C语言应用程序实例精讲Word文件下载.docx(138页珍藏版)》请在冰豆网上搜索。
digbit=0x01;
//从第一位数码管开始
wordbuf[3]=4;
wordbuf[2]=3;
wordbuf[1]=2;
wordbuf[0]=1;
while
(1);
}
/*定时器0中断服务子程序,定时动态扫描显示*/
voidtime0_int(void)interrupt1
display();
/*根据共阴极字型编码表获取0~9,A~B字型代码*/
uchargetcode(uchari)
ucharp;
switch(i)
{
case0:
p=0x3f;
break;
/*0*/
case1:
p=0x06;
/*1*/
case2:
p=0x5B;
/*2*/
case3:
p=0x4F;
/*3*/
case4:
p=0x66;
/*4*/
case5:
p=0x6D;
/*5*/
case6:
p=0x7D;
/*6*/
case7:
p=0x07;
/*7*/
case8:
p=0x7F;
/*8*/
case9:
p=0x67;
/*9*/
case10:
p=0x77;
/*A*/
case11:
p=0x7C;
/*B*/
case12:
p=0x39;
/*C*/
case13:
p=0x5E;
/*D*/
case14:
p=0x79;
/*E*/
case15:
p=0x71;
/*F*/
default:
break;
}
return(p);
/*显示函数*/
voiddisplay(void)
uchari;
switch(digbit)
i=0;
break;
i=1;
i=2;
i=3;
break;
WORDPORT=getcode(wordbuf[i]);
//送字型码
DIGPORT=digbit;
//送字位码
if(digbit<
0x08)
digbit=digbit*2;
else
/*****************************************/
/*Copyright(c)2005,通信工程学院*/
戴佳*/
#ifndef_7LEDSHOW_H//防止7LEDShow.h被重复引用
#define_7LEDSHOW_H
#include<
reg52.h>
//引用标准库的头文件
absacc.h>
stdio.h>
math.h>
#defineucharunsignedchar
#defineuintunsignedint
#defineDIGPORTXBYTE[0x0200]//定义字位口
#defineWORDPORTXBYTE[0x0100]//定义字型口
#definefosc11.0592//晶振频率
#definetime02000//定时2000us
uchardigbit;
//字位
ucharwordbuf[4];
//字型码缓冲区
uintidatatime0_tmp;
//临时变量,用于计算定时
uchargetcode(uchari);
//根据共阴极字型编码表获取字型代码函数
voiddisplay(void);
//显示函数
#endif
戴佳*/
8DigitShow.h"
/*延时t毫秒*/
voiddelay(uintt)
uinti;
while(t--)
/*对于12M时钟,约延时1ms*/
for(i=0;
i<
125;
i++)
{}
/*向MAX7219写入字节(8位)*/
voidSendChar(ucharch)
uchari,temp;
_nop_();
for(i=0;
8;
temp=ch&
0x80;
ch=ch<
<
1;
if(temp)
DIN=1;
CLK=0;
CLK=1;
DIN=0;
/*向MAX7219写入字(16位)*/
voidWriteWord(ucharaddr,ucharnum)
LOAD=0;
SendChar(addr);
SendChar(num);
LOAD=1;
//锁存进相应寄存器
/*MAX7219初始化*/
voidInitDisplay(void)
WriteWord(ScanLimit,ScanDigit);
//设置扫描界限
WriteWord(DecodeMode,DecodeDigit);
//设置译码模式
WriteWord(Intensity,IntensityGrade);
//设置亮度
WriteWord(ShutDown,NormalOperation);
//设置为正常工作模式
/*主函数*/
voidmain(void)
InitDisplay();
//MAX7219初始化
WriteWord(DisplayTest,TestMode);
//开始显示测试,点亮所有LED
delay(3000);
//延时约3s
WriteWord(DisplayTest,TextEnd);
//退出显示测试模式
while
(1)
{
uchari,j;
/*8个数码管以相同间隔时间2s同时变化显示0~9的数字*/
=9;
delay(2000);
//间隔约2s
InitDisplay();
for(j=0;
j<
=7;
j++)
DisBuffer[j]=i;
WriteWord(Digit0,DisBuffer[0]);
WriteWord(Digit1,DisBuffer[1]);
WriteWord(Digit2,DisBuffer[2]);
WriteWord(Digit3,DisBuffer[3]);
WriteWord(Digit4,DisBuffer[4]);
WriteWord(Digit5,DisBuffer[5]);
WriteWord(Digit6,DisBuffer[6]);
WriteWord(Digit7,DisBuffer[7]);
#ifndef_8DIGITSHOW_H//防止8DigitShow.h被重复引用
#define_8DIGITSHOW_H
//引用标准库的头文件
intrins.h>
sbitDIN=P1^0;
//串行数据输入
sbitCLK=P1^1;
//串行时钟
sbitLOAD=P1^2;
//显示数据锁存控制
#defineNoOp0x00//空操作寄存器
#defineDigit00x01//数码管1寄存器
#defineDigit10x02//数码管2寄存器
#defineDigit20x03//数码管3寄存器
#defineDigit30x04//数码管4寄存器
#defineDigit40x05//数码管5寄存器
#defineDigit50x06//数码管6寄存器
#defineDigit60x07//数码管7寄存器
#defineDigit70x08//数码管8寄存器
#defineDecodeMode0x09//译码模式寄存器
#defineIntensity0x0a//亮度寄存器
#defineSca