搜档网
当前位置:搜档网 › RDA5820和51单片机制作的FM数字收音机源代码及电路原理图

RDA5820和51单片机制作的FM数字收音机源代码及电路原理图

RDA5820和51单片机制作的FM数字收音机源代码及电路原理图
RDA5820和51单片机制作的FM数字收音机源代码及电路原理图

* 晶振:8M

*/

#include

#include

#define ChannelCount 50 //最多支持多少个台,因为常驻内存,多了RAM放不下#define uchar unsigned char

#define uint unsigned int

typedef struct

{

uchar Freq;

uchar Rssi;

}ChannelInfo;

sbit SDA = P2^0;

sbit SCL = P2^1;

sbit key1 = P3^4;

sbit key2 = P2^7;

sbit key3 = P2^6;

sbit key4 = P2^5; // P3^7;

sbit LcdEn = P3^4;

sbit LcdRs = P3^5;

uchar Channel = 0;

uchar FreqTune = 0;

const uint MinFreq = 870; //起始频率* 100KHz

const uint MaxFreq = 1080; //最高频率* 100KHz

const uchar FmAddr = 0×22; //FM模块IIC 地址

const uchar EpAddr = 0xA0; //24C02 EPPRom 的地址

uchar RSSI = 0; //信号强度

uchar ChannelTune[ChannelCount];

uchar code LevlChar[5][8] =

{{0x1F,0×11,0x0A,0×04,0×04,0×04,0×04,0×04},

{0×00,0×00,0×00,0×00,0×00,0×00,0×06,0x1E},

{0×00,0×00,0×00,0×00,0×06,0x1E,0x1E,0x1E}, //显示型号强度的自定义字符

{0×00,0×00,0×06,0x1E,0x1E,0x1E,0x1E,0x1E},

{0×06,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E}};

uchar vol = 0×8; //音量0~0xF

uchar Func = 0×0; //当前功能号

bit AutoScan = 0; //标记当前是不是在自动搜台

bit Mute = 0; //标记是否被静音

uchar KeyNumber = 0;

void OpenIIC();

void CloseIIC();

void IICWrite(uchar uaddr, uchar romaddr, uint rdata,bit _i6b);

void IICWriteByte( uchar byte );

uint IICRead(uchar uaddr, uchar romaddr,bit _i6b);

uchar IICReadByte(bit next);

void FM_SetFreq();

void FM_SetVolume();

uint FM_ReadReg(uchar regAddr); //读取FM模块的寄存器void FM_WriteReg(uchar regAddr,uint dat); //写FM模块的寄存器uchar FM_GetRSSI(); //获取当前的信号强大

void Delay(uint c);

bit KeyScan();

void BeginScan();

void Lcd_DispNumber(uint number);

void Lcd_Init();

void Lcd_Comm(uchar cmd);

void Lcd_Data(uchar dat);

void Lcd_String(char* dat);

void Lcd_DispRssi();

void Lcd_DispFreq();

void Lcd_Refresh();

void Lcd_DispDiscript();

void Eprom_LoadInitData();

uint Eprom_Read(uchar addr,bit _16bit);

void Eprom_Write(uchar addr,uint dat,bit _16bit);

void main()

{

P3 = 0xff;

P2 = 0xff;

Delay(10000); //延时,等待外部FM模块的启动

Eprom_LoadInitData(); //从EppRom 加载频道音量等信息 FM_WriteReg(2,0xd281); //启动FM模块

FM_SetVolume(); //设置启动音量

FM_SetFreq(); //设置默认频道的频率

Lcd_Init();

Lcd_Refresh();

while(1)

{

if( KeyScan())

{

Lcd_Refresh();

}

}

}

void Eprom_LoadInitData()

{

uint result = 0;

int i=0;

result =Eprom_Read(0,0);

if(result>0){ vol = (uchar)result –1;}

result =Eprom_Read(1,0);

Channel = (uchar)result;

for(i=0;i

{

result =Eprom_Read(i * 2 + 2,1);

ChannelTune[i] = result;

}

FreqTune = ChannelTune[Channel];

}

void Eprom_Write(uchar addr,uint dat,bit _16bit) {

IICWrite(EpAddr,addr,dat,_16bit);

}

uint Eprom_Read(uchar addr,bit _16bit)

{

return IICRead(EpAddr,addr,_16bit);

}

uint FM_ReadReg(uchar regAddr)

{

return IICRead(FmAddr,regAddr,1);

}

void FM_WriteReg(uchar regAddr,uint dat) {

IICWrite(FmAddr,regAddr,dat,1);

}

void FM_SetFreq()

{

FM_WriteReg(3,(FreqTune<<6) | 0×10);

}

void FM_SetVolume()

{

uint reg2H;

if(vol>0)

{

if(Mute)

{

reg2H = FM_ReadReg(2);

reg2H |= 0×4000;

FM_WriteReg(2,reg2H);

}

FM_WriteReg(5,vol);

}

else

{

Mute = 1;

reg2H = FM_ReadReg(2);

reg2H &= 0xBFFF;

FM_WriteReg(2,reg2H);

}

Eprom_Write(0,vol+1,0);

}

void Lcd_Init()

{

uchar CGRamAddr = 0×40;

int i,j;

LcdEn = 0;

Lcd_Comm(0×38);

Lcd_Comm(0x0c);

Lcd_Comm(0×06);

Lcd_Comm(0×01);

for(j=0;j<5;j++){

Lcd_Comm(CGRamAddr + 8 * j); //建立自定义字符(显示信号强度的) for(i=0;i<8;i++)

{

Lcd_Data(LevlChar[j][i]);

Delay(510);

}

}

}

void Lcd_Comm(uchar cmd)

{

LcdRs =0;

P0 = cmd;

Delay(50);

LcdEn = 1;

Delay(50);

LcdEn = 0;

}

void Lcd_Data(uchar dat)

{

LcdRs = 1;

P0 = dat;

LcdEn = 1;

Delay(50);

LcdEn = 0;

}

void Lcd_String(char* dat)

{

char *p;

int j, i=strlen(dat);

for(j=0;j

{

p=dat + j;

Lcd_Data(*p);

}

}

void Lcd_DispRssi()

{

int i;

Lcd_Comm(0×80);

for(i=0;i<5;i++)

{

Lcd_Data(‘‘);

}

RSSI = FM_GetRSSI();

Lcd_Comm(0×80);

Lcd_Data(0×00);

if(RSSI>=1) Lcd_Data(0×01);

if(RSSI>=2) Lcd_Data(0×02);

if(RSSI>=3) Lcd_Data(0×03);

if(RSSI>=4) Lcd_Data(0×04);

}

void Lcd_DispFreq()

{

uint curFreq = MinFreq + FreqTune;

int i;

Lcd_Comm(0×85);

for(i=5;i<16;i++)

{

Lcd_Data(‘‘);

}

Lcd_Comm(0×80+6);

if(curFreq>=1000)Lcd_Data(48 +curFreq /1000 % 10); Lcd_Data(48 +curFreq /100 % 10);

Lcd_Data(48 +curFreq /10 % 10);

Lcd_Data(‘.’);

Lcd_Data(48 + curFreq % 10);

Lcd_Data(‘M’);

Lcd_Data(‘H’);

Lcd_Data(‘Z’);

}

void Lcd_DispDiscript()

{

int i;

Lcd_Comm(0×80+0×40);

for(i=0;i<15;i++)

{

Lcd_Data(‘‘);

}

Lcd_Comm(0×80+0×40);

switch(Func)

{

case 0:

Lcd_String(“Channel:”);

Lcd_DispNumber(Channel+1);

break;

case 1:

Lcd_String(“Volume:”);

Lcd_DispNumber(vol);

break;

case 2:

Lcd_String(“Tune”);

break;

case 3:

Lcd_String(“Auto Scan”);

}

}

void Lcd_Refresh()

{

Lcd_DispRssi();

Lcd_DispFreq();

Lcd_DispDiscript();

}

void Lcd_DispNumber(uint number)

{

int i=0,len;

char str[6]={‘\0′,’\0′,’\0′,’\0′,’\0′,’\0′}; char temp;

do

str[i++] = ’0′+ (number % 10); number /= 10;

}while(number) ;

len = strlen(str);

for(i=0;i

{

temp = str[i];

str[i] = str[len-i-1];

str[len-i-1] = temp;

}

Lcd_String(str);

}

bit KeyScan()

{

bit keyRel = 0; //按键释放检测

char value=0;

int i;

uint temp;

if(AutoScan) return 0;

if(KeyNumber==0)

{

if(key3==0)

{

Delay(50);

if(key3==0)

{

KeyNumber =3;

}

}

if(key4==0)

{

Delay(50);

if(key4==0)

{

KeyNumber=4;

}

}

if(key2==0)

{

Delay(50);

if(key2==0)

KeyNumber=2;

}

}

return 0;

}

else

{

switch(KeyNumber)

{

case 1:

if(key1==1)keyRel = 1; break;

case 2:

if(key2==1)keyRel = 1; break;

case 3:

if(key3==1)keyRel = 1; break;

case 4:

if(key4==1)keyRel = 1; break;

}

if(keyRel)

{

switch(KeyNumber)

{

case 2:

Func++;

if(Func>3) Func = 0;

break;

case 3:

value = -1;

break;

case 4:

value = 1;

break;

}

if(KeyNumber>2)

{

if(Func==0)

{

if((value > 0 && Channel 0)) {

Channel+=value;

FreqTune= ChannelTune[Channel];

FM_SetFreq();

Eprom_Write(1,Channel, 0);

}

else if(Func==1)

{

if((value > 0 && vol<0xF) || (value<0 && vol > 0))

{

vol+=value;

FM_SetVolume();

}

}

else if(Func==2)

{

if((value > 0 && FreqTune<0xd2) || (value<0 && FreqTune > 0)) {

FreqTune+=value;

ChannelTune[Channel] = FreqTune;

FM_SetFreq();

Eprom_Write(Channel * 2 + 2 ,FreqTune,1);

}

}

else if(Func==3) //开始自动扫描

{

AutoScan = 1;

BeginScan();

AutoScan = 0;

Channel = 0;

FreqTune = ChannelTune[0];

Func = 0;

FM_SetFreq();

//覆盖EppRom中的所有的频道

for(i=0;i

{

temp = ChannelTune[i];

Eprom_Write(i * 2+2,temp,1);

}

Eprom_Write(0×01,0,0); //重置EPPROM中的频道号为0

}

}

KeyNumber=0;

}

return keyRel;

}

}

//全自动搜索

{

uint state;

int i=0,count=0;

bit cmp = 0;

uint seekth = 0×8; //灵敏度0~127,默认为8 灵敏度越低越可能搜索到假台,高了可能一些信号弱一点的频道被跳过。

uint reg5H;

uint tempTune = 0;

for(i=0;i

{

ChannelTune[i]=0;

}

reg5H = FM_ReadReg(0×05);

reg5H = (reg5H & 0x80FF) | (seekth<<7);

FM_WriteReg(0×05,reg5H);

for(i=0;i<=MaxFreq –MinFreq;i++)

{

FreqTune = i;

FM_SetFreq();

Lcd_DispFreq();

do

{

state = FM_ReadReg(0x0B);

cmp = (state>> 7 ) & 0×1;

}while(!cmp);

Delay(100);

state = FM_ReadReg(0x0B);

cmp = (state >> 8 ) & 0×1;

if(cmp)

{

ChannelTune[count]=i;

count++;

}

if(count>=ChannelCount){ break; }

}

}

uchar FM_GetRSSI()

{

uint regVal =FM_ReadReg(0x0b);

regVal = regV al>>9;

return (uchar)(regVal/16);

}

{

int i=0;

for(i=0;i

}

uint IICRead(uchar uaddr, uchar ramAddr,bit _16b) {

uint buf;

OpenIIC();

IICWriteByte(uaddr);

IICWriteByte(ramAddr);

OpenIIC();

IICWriteByte(uaddr | 0×01);

if(_16b)

{

buf = IICReadByte(1);

buf = buf<<8;

buf =buf | IICReadByte(0);

}

else

{

buf = IICReadByte(0);

}

CloseIIC();

return buf;

}

uchar IICReadByte(bit next)

{

uchar buf =0,i=0;

for(i=0;i<8;i++)

{

buf <<=1;

SCL = 1;

buf |= SDA;

Delay(5);

SCL = 0;

Delay(5);

}

if(next)

{

SDA = 0;

SCL = 1;

Delay(5);

SCL = 0;

Delay(5);

SDA = 1;

}

else

{

SDA = 1;

SCL = 1;

Delay(5);

SCL = 0;

Delay(5);

SDA=0;

}

return buf;

}

void IICWrite(uchar uaddr, uchar romaddr, uint rdata,bit _16b) {

uchar temp;

OpenIIC();

IICWriteByte(uaddr);

IICWriteByte(romaddr);

if(_16b)

{

temp =(uchar)((rdata>>8) & 0x00ff) ;

IICWriteByte(temp);

}

temp = (uchar) (rdata & 0xff);

IICWriteByte(temp);

CloseIIC();

}

void IICWriteByte( uchar byte )

{

uchar i=0;

int f=30000;

bit bitdata;

for(i=0;i<8;i++)

{

bitdata =byte>>(7-i) & 1;

SDA = bitdata;

SCL =1;

Delay(5);

SCL = 0;

Delay(5);

}

SCL = 1;

while(SDA && –f);

Delay(5);

SCL = 0;

Delay(5);

}

void CloseIIC()

{

SDA = 0 ;

SCL = 1;

Delay(5);

SDA = 1;

Delay(5);

SCL = 1;

SDA = 1;

Delay(150); //防止过快的读取造成EPPROM 来不及反应

}

void OpenIIC()

{

SDA = 1;

SCL = 1;

Delay(5);

SDA = 0;

Delay(5);

SCL = 0;

Delay(5);

}

/****************************************************************************** **********************************/

基于51单片机两种音乐编码的比较及用法

基于51单片机的两种音乐编码方法的比较及用法 (建议对这方面有兴趣的朋友们要先看懂了解音乐简谱,包括高音、中音、低音,节拍、延时,及各个音调的频率,网上有很多资料) 1方法:用51单片机音乐编码器软件(Music encode) 输出十六进制数表示: 曲谱存贮格式unsigned char code MusicName{音高,音长,音高,音长...., 0,0}; 末尾:0,0 表示结束(Important) (其实软件“关于”里的源代码有使用方法的介绍) 音高由三位数字组成: 个位是表示1~7 这七个音符 十位是表示音符所在的音区:1-低音,2-中音,3-高音; 百位表示这个音符是否要升半音: 0-不升,1-升半音。 音长最多由三位数字组成: 个位表示音符的时值,其对应关系是: |数值(n): |0 |1 |2 |3 | 4 | 5 | 6 |几分音符: |1 |2 |4 |8 |16 |32 |64 音符=2^n 十位表示音符的演奏效果(0-2): 0-普通,1-连音,2-顿音 百位是符点位: 0-无符点,1-有符点 2方法:编码为十六进制(高四位表示音调编码,低四位表示节拍编码)(各音调频率及初值计算定时器初值网上有,在此不叙说) do re mi fa so la si分别编码为1~7,重音do编为8,重音re编为9,停顿编为0。 如0x24,表示低音LA、1拍。以此类推 表4.4简谱对应的简谱码、T值、节拍数 简谱发音简谱码T值节拍码节拍数 5 低音SO 1 64260 1 1/4拍 6 低音LA 2 64400 2 2/4拍 7 低音TI 3 64524 3 3/4拍 1 中音DO 4 64580 4 1拍 2 中音RE 5 64684 5 1又1/4拍 3 中音MI 6 64777 6 1又1/2拍 4 中音FA 7 64820 8 2拍 5 中音SO 8 64898 A 2又1/2拍 6 中音LA 9 64968 C 3拍 7 中音TI A 65030 F 3又3/4拍 1 高音DO B 65058 2 高音RE C 65110 3 高音MI D 65157 4 高音FA E 65178 5 高音SO F 65217

基于51单片机的音乐播放器

基于51单片机的音乐播放器 余子健、刘胤、宋亮 摘要:本大作业是基于sst89e52rd2单片机制作的wav音乐播放器。该播放器可以播放存在sd卡中的音乐,通过对sd卡的读取并将数字信号送入单片机中,借助8位DA转换器TLC5620 变成模拟信号,经过放大器TDA2822放大交给扬声器发出最初读取的音频信号,实现音乐播放的功能。 关键词:SD卡,WAV文件,DA,音频放大 1背景 音乐随身听产品经过几年的发展,已经变得相当成熟。市场上可以购买到各类不同的音乐播放器,产品线涵盖了高中低不同档次。作为学习与研究,本作品尝试利用STI51开发板板载资源以及外搭的功率放大电路制作一台音乐播放器,能够播放通过计算机拷贝在SD卡(或MMC卡、TF卡)的根目录中的某一个WAV 文件。 2硬件设计 该音乐播放器硬件组成如下 本音乐播放器使用容量为2G的SD作为外部存储器 主控制器采用SST公司生产的SST89E58RDA,其40引脚封装的芯片功能模块如图1所示。芯片主要特想如下: ?兼容80C51系列,内置超级FLASH存储器的单片机 ?工作电压VDD=4.5~5V,5V工作电压时0-40MHz频率范围 ?1KB的内部RAM ?两块超级FLASH EEPROM,32KB的基本存储卡和8KB的二级存储块(扇区大小为128字节),二级存储块可用于存放掉电后要保存的数据,放在内部具有极强的抗干扰性?最大片外程序/数据地址空间为64KB ?全双工增强型UART,帧错误检测,自动地址识别 ?9个中断源,4个中端优先级 ?降低EMI模式(通过AUXR SFR不允许ALE输出时钟),确保了单片机的高抗干扰性?双DPTR指针(查表,寻址更方便)

AT89C51单片机设计的音乐倒数计数器

塔里木大学《单片机原理与外围电路》课程论文基于单片机设计的音乐倒数计数器 姓名:古再丽努尔·阿卜来提 学号: 5021212125 班级:通信工程16-1

摘要:单片机技术是一门不可或缺的技术,对我们将来的工作以及生活和学习都有很密切的联系。近年来,随着电子技术和微机计算机的迅速发展,单片机的档次不断提高,其应用领域也在不断的扩大,已在工业控制、尖端科学、智能仪器仪表、日用家电、汽车电子系统、办公自动化设备、个人信息终端及通信产品中得到了广泛的应用,成为现代电子系统中最重要的智能化的核心部件。 单片机由CPU、一定容量的RAM和ROM构成,定时、计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。这次课程设计通过对它的学习、应用,从而达到学习、设计、开发软、硬的能力。 本设计利用AT89C51单片机结合字符型LCD显示器设计一个简易的倒数计数器。用4个按键操作来设置当前想要倒计数的时间。做一小段时间倒计数,当倒计数为0时,则发出一段音乐声响,通知倒计数终了,该做应当做的事。应用Proteus的ISIS软件和Keil uVision3来实现该计数器的设计与仿真。该方法仿真效果真实、准确,节省了硬件资源。 该多功能计数器可以应用于一般的生活和工作中,也可以通过改装,提高性能,增加新功能,从而给人们的生活和工作带来更多的方便。 关键词:AT89C51,计数器,键盘控制,LCD显示,protues,Keil 。

目录 1绪论 (4) 1.1课题背景及研究意义 (4) 1.2国内外现状 (4) 1.3课题的设计目的 (4) 1.4课题的主要工作 (4) 2系统概述 (5) 2.1方案论证 (5) 2.2系统设计原理 (5) 3系统硬件设计 (5) 3.1主控电路设计 (5) 3.2LCD液晶显示器接口电路设计 (6) 4系统软件设计 (6) 4.1主程序设计 (6) 4.2硬件调试 (8) 4.3仿真结果 (16) 结论 (16) 参考文献 (17) 系统整体电路.......................................................................................... 错误!未定义书签。全部程序清单. (8) - III -

51单片机实例程100讲全集

目录 目录 (1) 函数的使用和熟悉 (4) 实例3:用单片机控制第一个灯亮 (4) 实例4:用单片机控制一个灯闪烁:认识单片机的工作频率 (4) 实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能 (5) 实例6:使用P3口流水点亮8位LED (5) 实例7:通过对P3口地址的操作流水点亮8位LED (6) 实例8:用不同数据类型控制灯闪烁时间 (7) 实例9:用P0口、P1 口分别显示加法和减法运算结果 (8) 实例10:用P0、P1口显示乘法运算结果 (9) 实例11:用P1、P0口显示除法运算结果 (9) 实例12:用自增运算控制P0口8位LED流水花样 (10) 实例13:用P0口显示逻辑"与"运算结果 (10) 实例14:用P0口显示条件运算结果 (11) 实例15:用P0口显示按位"异或"运算结果 (11) 实例16:用P0显示左移运算结果 (11) 实例17:"万能逻辑电路"实验 (11) 实例18:用右移运算流水点亮P1口8位LED (12) 实例19:用if语句控制P0口8位LED的流水方向 (13) 实例20:用swtich语句的控制P0口8位LED的点亮状态 (13) 实例21:用for语句控制蜂鸣器鸣笛次数 (14) 实例22:用while语句控制LED (15) 实例23:用do-while语句控制P0口8位LED流水点亮 (16) 实例24:用字符型数组控制P0口8位LED流水点亮 (17) 实例25:用P0口显示字符串常量 (18) 实例26:用P0 口显示指针运算结果 (19) 实例27:用指针数组控制P0口8位LED流水点亮 (19) 实例28:用数组的指针控制P0 口8 位LED流水点亮 (20) 实例29:用P0 、P1口显示整型函数返回值 (21) 实例30:用有参函数控制P0口8位LED流水速度 (22) 实例31:用数组作函数参数控制流水花样 (22) 实例32:用指针作函数参数控制P0口8位LED流水点亮 (23) 实例33:用函数型指针控制P1口灯花样 (25) 实例34:用指针数组作为函数的参数显示多个字符串 (26) 实例35:字符函数ctype.h应用举例 (27) 实例36:内部函数intrins.h应用举例 (27) 实例37:标准函数stdlib.h应用举例 (28) 实例38:字符串函数string.h应用举例 (29) 实例39:宏定义应用举例2 (29) 实例40:宏定义应用举例2 (29) 实例41:宏定义应用举例3 (30)

51单片机蜂鸣器播放音乐代码

/*生日快乐歌曲*/ #include <> #define uint unsigned int #define uchar unsigned char sbit beep = P1^5; uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159, 212,212,106,126,159,169,190,119,119,126,159,142,159,0}; uchar code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24, 9,3,12,12,12,12,12,9,3,12,12,12,24,0}; //延时 void DelayMS(uint x) { uchar t; while(x--) for(t=0;t<120;t++); } void PlayMusic() { uint i=0,j,k; while(SONG_LONG[i]!=0||SONG_TONE[i]!=0) { //播放各个音符,SONG_LONG 为拍子长度 for(j=0;j // 这是单片机音乐代码生成器生成的代码 #define uchar unsigned char sbit beepIO=P1^5; // 输出为可以修改成其它 IO 口uchar m,n;

51单片机新手入门实例详解

51单片机新手入门实例详解 1.硬件和软件准备 ●实验系统:EL89C单片机学习开发系统一套 ●电脑:具有标准串口的台式机或笔记本电脑,如果没有串口也可购 买一条USB转串口线代替 ●工具软件:Keil uVision2(用于编写和编译源程序、仿真调试); 光盘上非安装烧写软件,路径 \单片机EL89C\EL89C光盘\STC52单片机下载程序\stc-isp-v4.79-not-setup\STC_ISP_V483.exe (EL89C的编程控制烧写软件) 2.源程序编写和编译 EL89C的8个发光二极管负极通过限流电阻接入单片机的P1.0~P1.7端口,下面的范例程序可以使这8个发光二极管轮流点亮,形成流水灯效果。 我们使用的开发工具是Keil C51,是目前世界上最优秀、最强大的51单片机应用平台之一,它集编辑、编译、仿真调试于一体,支持汇编、C语言以及混合编程。同时具备功能强大的软件仿真和硬件仿真功能。 下面以一个简单的流水灯程序为例子来介绍Keil C51的使用方法: 2.1首先在硬盘上建立一个文件夹,命名为ledtest(当然可以是其他名字), 为方便程序的编写和调试,我们将调试过程中产生的文件都将放在这个目录中。 2.2启动Keil软件,点击菜单project,选择new project,然后选择你要保 存的路径,输入工程文件的名字,我们现在保存到刚才建立的ledtest目录中,工程文件命名为ledtest,然后点击保存。 2.3这时会弹出下面的对话框Select Device for Target,要求你为刚才的项 目选择一个CPU。我们选择Atmel的AT89C52,如图所示,选择AT89C52之后,右边一栏是对这个单片机的基本的说明,然后点击确定。

51单片机实现的音乐闹钟程序代码

功能描述:产品可以显示时间和日期,时间格式为 hh mm ss 日期格式为 yy.mm.dd 时间和日期轮流显示。时间显示5S 日期显示3S。 可以设置5个闹铃,闹铃音乐可以设置两种:毛驴和童年。 三个按键对时间和闹铃进行设置,六个LED进行显示。 计时采用DS1307。继电时间不丢失,设置过的闹铃也不丢失。 闹铃音乐由单片机的两个定时器去产生频率实现。 部分程序如下: //************************************************* //************************************************ //*********************************************** //程序名:DS1307 时钟程序 //功能描述:用六个八段LED 轮流显示时间 // 和日期。有6个闹钟。上电时从DS1307中读出 // 当前时间、日期、闹钟。 // // // // // #include #include #define uchar unsigned char #define uint unsigned int #define LED P2 #define LEDBit P0 #define nop _nop_(>

#define LightCount 40 #define LightMax 80 sbit SCL=P3^1。 sbit SDA=P3^0。 sbit ModeKey=P1^0。 sbit UpKey=P1^1。 sbit DownKey=P1^2。 sbit Speak=P3^6。 code uchar LCD_NUM[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09}。 //0x25, //uchar Clock[]={0x88,0x88,0x88}。 code uint Music_Sound_Long1[]={4,8,4,8,8,4,8,4,4,4, /*童年*/ 8,4,8,4,4,4,4,4,16,4, 4,8,4,4,4,4,4,8,4,4, 4,8,4,4,4,4,4,4,16,4, 4,8,4,4,4,4,4,8,4,4, 4,8,4,4,4,4,4,4,16,4, 8,4,8,4,4,4,8,8,4,4, 4,4,4,4,4,4,4,4,4,16, 4,8,4,8,8,4,8,4,4,4, 8,4,8,4,4,4,4,4,16,4, 8,4,8,8,4,8,4,4,4,8, 4,8,4,4,4,4,4,16,0}, Music_Sound_Long2[]={4,4,4,4,4,4,4,4,4,4, /*小毛驴*/ 4,4,16,4,4,4,4,4,4 ,4, 4,4,4,4,4,8,4,4,4,4, 4,4,4,4,4,4,4,4,4,16, 4,4,4,4,2,2,2,2,4,4, 4,4,4,4,16,0}, Music_Sound_Tone1[]={379,379,379,379,425,477,477,477,425,477, 568,637,637,637,568,637, 425,379,477,719, 637,63 7,719,637,568,568,506,568,568,568, 637,477,477,477,477,568,477,568,637,719, 637,637,719,637,568,568,506,568,568,568, 637,477,477,477,477,568,568,477,851,318,

用51单片机演奏音乐

单片机演奏音乐 一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音。因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和“节拍”。音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。 在音乐中所谓“音调”,其实就是我们常说的“音高”。在音乐中常把五线谱中央C 上方的A 音定为标准音高,其频率f=440Hz。当两个声音信号的频率相差一倍时,也即f2=2f1时,则称f2比f1 高一个倍频程, 在音乐中1与.1(1前面的点应在1的上面),2与 .2……正好相差一个倍频程,在音乐学中称它相差一个八度音。在一个八度音内,有12个半音。以1—i 八音区为例,12 个半音是:1—#1、#1—2、2—#2、#2—3、3—4、4—#4,#4—5、5 一#5、#5—6、6—#6、#6—7、7—i。其中“#”表示半音,用于升高或降低半个音。这12 个音阶的分度基本上是以对数关系来划分的。如果我们只要知道了这十二个音符的音高,也就是其基本音调的频率,我们就可根据倍频程的关系得到其他音符基本音调的频率。 知道了一个音符的频率后,常采用的方法就是通过一个延时程序,延时对应频率周期的二分之一周期(即t=1/2f)后,将单片机上连接蜂鸣器的I/O (P3.7)口来回取反,或者说来回清零,置位,从而让蜂鸣器发出声音,为了让单片机发出不同频率的声音,我们只需将不同的延时时间值t赋给延时程序即可实现。例:我门以440Hz的声音频率来计算,其对应的时间 t=1/2f=1/2*440=1136us 但在实际程序中常采用查表的方式来取的t 值,而为了节约存储器空间则将t值以字节来进行存储,由于大部分t值都大于256。所以,需将t值除以一个常数(t/x)使其小于256。那么,在查表取得t 值后就要再乘上该常数后再赋给延时程序。 以下为常用音符对应的频率和二分之一周期值t :

(完整版)基于51单片机的自动音乐播放器设计毕业设计

本科毕业论文(设计) 题目: 基于51单片机的自动音乐播放 器设计 院系:电子与通信工程学院 专业:通信工程 姓名:张志顺 指导教师:陈冬云 教师职称:助教

填写日期:2014年4月20日 摘要 为了人们在快节奏的日常生活,优化工厂、事业单位、公司等的计时系统,采用了依靠单片机为基础设计了一种的自动音乐播放器。本设计利用单片机89C58RD+的计数和定时功能,来完成对时间的定时和显示功能。并且,通过对定时器初值的设定来产生不同频率的声音,利用定时器中断来对音乐节拍长度的控制。通过LM386N1音频功率放大器的音频放大功能,将单片机控制输出的信号放大,然后通过扩音器播放乐曲。通过MAX232型芯片,可以转换PC机上的电压和单片机的电源电压,再通过相应串口接入PC机,这样就能从PC机上将用C语言编写的程序代码下载到单片机上。最后可以在数码管上显示时间,当到达之前设定的时间之后,

扩音系统就会自动播放一段连续而美妙动听的音乐。此设计规避了传统闹钟的难听并且刺耳声音,而变成的是美妙动听的音乐,能给处于当前快节奏生活的人们的日常生活提供精确的计时,且因为成本较低,值得推广。 关键词:单片机;自动音乐播放;音频转换;时间显示;LM386N1音频功率放大器。 Abstract

To people in the fast pace of daily life, optimization of factories, institutions, companies such as timing system, based on microcomputer was adopted to design a kind of automatic music player. This design using the single chip microcomputer 89 c58rd + count and timing functions, to complete the regular and display function of time. And, through to the setting of the initial value of timer to generate different frequencies of sound, using a timer interrupt to control of the beat of the music length. Through the audio amplifier function LM386N1 audio power amplifier, the single-chip microcomputer control output signal amplification, and then through loudspeakers. Through MAX232 chip, can convert the voltage of power supply voltage of PC and microcontroller, again through the corresponding access PC serial port, so you can from the PC to download program code written in C language to the single chip microcomputer. Last time can be displayed on the digital tube, when, after arriving in setting the time before the public address system will automatically play a continuous and delightful music. This design to avoid the traditional alarm clock ugly and give in the fast-paced life of the People's Daily life to provide accurate timing, and because of lower cost, is worth promoting. Key words: single chip microcomputer; Automatic music playback; Audio conversion; Time display; LM386N1 audio power amplifier.

基于51单片机的音乐播放器设计

题目:音乐播放器 课程设计(论文)任务书

摘要 随着电子技术的发展和计算机越来越普遍的使用,单片机作为这两项技术的有机结合也得到了广泛的应用,在某些领域具有不可替代的作用。音乐播放功能随处都会用到,如,在开发儿童智力的玩具中,等等。目前,基于单片机实现音乐播放,其体积小、价格低、编程灵活等特点在这一领域独领风骚。 单片机的英文名称为single chip microcomputer,最早出现在20世纪70年代,国际上现在已逐渐被微控制器(Microcontroller Unit 或MCU)一词所取代。它体积小,集成度高,运算速度快,运行可靠,功耗低,价格廉,因此在数据采集、智能化仪表、通讯设备等方面得到了广泛应用。而8051单片机在小到中型应用场合很常见,已成为单片机领域的实际标准。随着硬件的发展,8051单片机系列的软件工具也有了C级编译器和实时多任务操作系统RTOS,为单片机编程使用C语言提供了便利的条件;并针对单片机常用的接口芯片编制通用的驱动函数,可针对常用的功能模块,算法等编制相应的函数;C语言模块化程序结构特点,可以使程序模块大家共享,不断丰富,这样就使得单片机的的程序设计更简单可靠,实时性强,效率高。作为测控技术与仪器的学生,掌握8051单片机硬件基础及其相关软件操作,将其应用于现代电子产品中是必要而且重要的,这次课程设计我们的题目是用单片机实验箱系统制作音乐播放器。 本次课程设计主要内容是通过单片机C51语言进行编程,以产生乐曲音符和节拍,把乐谱翻译成计算机语言(音符转换诚成相对应的方波频率即定时器装载初值,节拍转换成相对应的延长时间),并将其预先存储到单片机里,然后根据按键调用再由单片机进行信息处理,在经过信号放大,由喇叭放出乐曲声,实现音乐播放的功能。其主要表现在可以播放十首歌曲,可以用十个数字键控制播放的歌曲,并且能在LCD液晶屏显

51单片机C语言编程基础与实例

基础知识:51单片机编程基础 单片机的外部结构: 1. DIP40双列直插; 2. P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3. 电源VCC(PIN40)和地线GND(PIN20); 4. 高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5. 内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6. 程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7. P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1. 四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2. 两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3. 一个串行通信接口;(SCON,SBUF) 4. 一个中断控制器;(IE,IP) 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。 C语言编程基础: 1. 十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2. 如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3. ++var表示对变量var先增一;var—表示对变量后减一。 4. x |= 0x0f;表示为 x = x | 0x0f; 5. TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。 6. While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;} 在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚) 代码

51单片机音乐播放器程序

#include //包含51单片机寄存器定义的头文件 sbit sound=P3^6; //将sound位定义为P3.6 unsigned int C; //储存定时器的定时常数 //以下是C调低音的音频宏定义 #define l_dao 262 //将"l_dao"宏定义为低音"1"的频率262Hz #define l_re 286 //将"l_re"宏定义为低音"2"的频率286Hz #define l_mi 311 //将"l_mi"宏定义为低音"3"的频率311Hz #define l_fa 349 //将"l_fa"宏定义为低音"4"的频率349Hz #define l_sao 392 //将"l_sao"宏定义为低音"5"的频率392Hz #define l_la 440 //将"l_a"宏定义为低音"6"的频率440Hz #define l_xi 494 //将"l_xi"宏定义为低音"7"的频率494Hz //以下是C调中音的音频宏定义 #define dao 523 //将"dao"宏定义为中音"1"的频率523Hz #define re 587 //将"re"宏定义为中音"2"的频率587Hz #define mi 659 //将"mi"宏定义为中音"3"的频率659Hz #define fa 698 //将"fa"宏定义为中音"4"的频率698Hz #define sao 784 //将"sao"宏定义为中音"5"的频率784Hz #define la 880 //将"la"宏定义为中音"6"的频率880Hz #define xi 987 //将"xi"宏定义为中音"7"的频率523H //以下是C调高音的音频宏定义 #define h_dao 1046 //将"h_dao"宏定义为高音"1"的频率1046Hz #define h_re 1174 //将"h_re"宏定义为高音"2"的频率1174Hz #define h_mi 1318 //将"h_mi"宏定义为高音"3"的频率1318Hz #define h_fa 1396 //将"h_fa"宏定义为高音"4"的频率1396Hz #define h_sao 1567 //将"h_sao"宏定义为高音"5"的频率1567Hz #define h_la 1760 //将"h_la"宏定义为高音"6"的频率1760Hz #define h_xi 1975 //将"h_xi"宏定义为高音"7"的频率1975Hz /******************************************* 函数功能:1个延时单位,延时300ms ******************************************/ void delay() { unsigned char i,j; for(i=0;i<300;i++) for(j=0;j<300;j++) ; } /******************************************* 函数功能:主函数 ******************************************/ void main(void) { unsigned char i,j; //以下是《知足》的一段简谱

51单片机实例(含详细代码说明)

1.闪烁灯 1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢?下面具体介绍其原理:

如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时, 延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管 的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平, 即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0 端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5.程序框图 如图4.1.2所示

STC89C51单片机的数字音乐盒设计(含代码)

HEFEI UNIVERSITY FPGA综述报告 系别电子信息与电气工程系任课教师汪济洲 班级 姓名 成绩 日期

数字音乐盒设计 摘要:本设计是一个基于STC89C51系列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能音乐盒。该音乐盒主要由按键电路、复位电路、时钟电路以及蜂鸣器组成。使用两个按键控制音乐盒,一个用来切换歌曲,另一个用来切换8路LED的变化花样,本音乐盒共有两首歌曲,花样灯花样共计4种。播放歌曲时,蜂鸣器发出某个音调,与之对应的LED亮起。本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,配合PROTEUS仿真软件对硬件进行仿真调试,节约了设计时间。 关键字:音乐盒 STC89C51单片机 KEIL PROTEUS 音调

目录 1概述 (3) 1.1设计方案 (3) 1.2研究内容 (3) 1.3音乐盒的功能结构图 (3) 2硬件设计 (4) 2.1总体设计框图 (4) 2.2各部分硬件设计及其原理 (4) 2.2.1 STC89C51简介 (4) 2.2.2 LED显示电路设计与原理 (5) 2.2.3 时钟振荡电路 (5) 2.3硬件电路图及功能 (6) 3软件设计 (7) 3.1音调、节拍以及编码的确定方法 (7) 4.1.1 音调的确定 (7) 4.1.2 节拍的确定 (8) 4.1.3 编码 (9) 4.2软件程序设计 (10) 4.2.1 程序流程图及相应代码块 (10) 4.2.2 程序源代码(见附录A) (14) 5调试 (14) 5.1检查硬件连接 (14) 5.2检查软件系统 (14) 5.3测试结果 (14) 5.3.1.总体运行图 (14) 5.3.2.花样灯4种花样图 (15) 参考文献 (16) 附录A 程序源代码及注释 (16)

51单片机50个实例代码

51单片机50个例程代码程序里有中断,串口等驱动,直接复制即可使用1-IO输出-点亮1个LED灯方法1 /*----------------------------------------------- 名称:IO口高低电平控制 论坛:https://www.sodocs.net/doc/0d17125274.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的一个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 sbit LED=P1^0;// 用sbit 关键字定义LED到P1.0端口, //LED是自己任意定义且容易记忆的符号 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { //此方法使用bit位对单个端口赋值 LED=1; //将P1.0口赋值1,对外输出高电平 LED=0; //将P1.0口赋值0,对外输出低电平 while (1) //主循环 { //主循环中添加其他需要一直工作的程序 } } 2-IO输出-点亮1个LED灯方法2 /*-----------------------------------------------

名称:IO口高低电平控制 论坛:https://www.sodocs.net/doc/0d17125274.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的一个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { //此方法使用1个字节对单个端口赋值 P1 = 0xFF; //P1口全部为高电平,对应的LED灯全灭掉, //ff换算成二进制是1111 1111 P1 = 0xfe; //P1口的最低位点亮,可以更改数值是其他的灯点亮 //0xfe是16进制,0x开头表示16进制数, //fe换算成二进制是1111 1110 while (1) //主循环 { //主循环中添加其他需要一直工作的程序 } } 3-IO输出-点亮多个LED灯方法1 /*----------------------------------------------- 名称:IO口高低电平控制 论坛:https://www.sodocs.net/doc/0d17125274.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的多个LED灯

单片机控制音乐播放-外文翻译

毕业设计(论文)外文翻译 题目: __ 单片机控制音乐播放_ __ 英文题目: Single chip microcomputer to control the music player 系 : _ 信息工程系_ __ 专业: _ _ __ 电子信息工程___ ___ 班级: ___ _ __ 09电信本________ _ 学号: ___ _____8110109053___ ______ 姓名: ________ 张亚峰 ______ _____ 指导老师: _________王乐平_________ ____ 填表日期 _ __ ___2012.11.16_____ ____

基于51单片机的音乐播放器设计 作者:Bob brown 来源:《SCM》 摘要:本音乐播放器是利用STC89C51单片机结合内部定时系统及数码管显示设计一个简易的微电脑音乐盒。本文分析了基于51单片机的音乐播放器的硬件电路和软件的设计的具体过程包括数据处理子程序的设计、显示子程序的设计最后针对仿真过程遇到的现象进行了具体的分析与说明。 关键词:播放;单片机; STC89C51 随着人们物质生活水平的提高,人们越来越注重精神生活的满足,热衷于在消费中寻求快乐和娱乐体验。音乐作为人类娱乐生活的重要组成元素,一直以来都备受关注。而人类进入工业社会以来,将音乐播放与工业产品结合发展出了一系列的音乐播放产品,并随着技术的革新和消费者需求的变化而不断更新,为人类的娱乐生活提供了时尚便利的道具。前两年造型时尚、小巧便携、可免费下载歌曲的MP3播放器的流行更是使音乐播放产品空前繁荣。但是在繁荣过后,主流音乐播放产品MP3播放器在造型和系统的设计上似乎走进了一个瓶颈,新产品和旧产品比起来只是固件上的更新和硬件的更迭,而没有内容和实质的跳跃,因此在同样具有便携性特点和音乐播放功能的音乐手机出现的时候,MP3原有的功能优势不再,市场继而被迅速挤压,地位收到空前的威胁。纵观音乐播放产品的发展史,每一次音乐播放产品的革新都是概念的突破或理念的创新的结果。如从收音机到唱片机实现了收听方式从“被动收听”到“自主选择”的变革,从唱片机到Walkman实现了固定到便携的飞跃。因此,如何在理念上、概念上进行创新和突破,找到音乐播放产品的新发展方向,适应消费者的新需求,是目前产品设计师急需解决的问题。本文首先简单回顾了音乐播放产品发展史,并分析了目前音乐播放产品现状,提出寻找新概念突破点的重要性;其次,通过对当前经济环境和社会群体环境的分析,以及目前音乐产业的发展现状和趋势的分析,从中总结出当前消费者的消费需求趋势;最后,根据总结的消费需求和市场现有的一些音乐播放产品的引导,提出未来音乐播放产品的发展方向以及相应的一些概念设想。 STC89C51单片机设计的一个音乐播放器通过单片机音乐播放器系统设计和研究,对于切实掌握单片机相关知识具有重要的理论和实际意义。这次课程设计的音乐播放器是软件和硬件的结合,不同音符表现形式就是不同频率地声音。通STC89C51过单片机产生不同的频率的脉冲信号,通过放大电路,由蜂鸣器放出,就产生了美妙和谐优美动听的乐曲。根据节拍给出该音阶持续的时间,最终实现播放简单歌曲的功能。为人们生活的改善提供了可靠,方面,廉价的方法。 单片机STC89C51作为硬件核心控制部件,结合三极管作为放大器,数码管构成典型的显示电路,按键作为输入部分以及其他外围设备组成的音乐播放系统。根据音乐演奏控制器所要实现的显示与选曲及音乐产生功能原理,系统包括演奏扬声器、选曲、播放和显示几部

51单片机蜂鸣器播放单音节音乐

51单片机的唱歌实验 晶振:11.0592MHZ 程序: #include #define uchar unsigned char bit flag; //标志音乐输出脚电平的高低 uchar ptr = 0x00; //取音符 uchar high; //计数器高位 uchar low; //计数器低位 // 本曲谱为"新年好",前两个十六进制表示发声频率,后一个表示发声时间,0xFF,0xFF 表示休止符 // 0x00 表示结束 // 1 _ 1_ 1 .5 uchar code music[] = { 0xFC,0x44,0x7F, 0xFC,0x44,0x7F, 0xFC,0x44,0xFF, 0xFA,0x68,0xFF, // 3 _ 3_ 3 1 0xFD,0x23,0x7F, 0xFD,0x23,0x7F, 0xFD,0x23,0xFF, 0xFC,0x44,0xFF, // 1_ 3_ 5 5 0xFC,0x44,0x7F, 0xFD,0x23,0x7F, 0xFD,0x82,0xFF, 0xFD,0x82,0xFF, // 4_ 3_ 2 - 0xFD,0x23,0x7F, 0xFD,0x23,0x7F, 0xFC,0xAC,0xFF, 0xFF,0xFF,0xFF, // 2_ 3_ 4 4 0xFC,0xAC,0x7F, 0xFD,0x23,0x7F, 0xFD,0x34,0xFF, 0xFD,0x34,0xFF, // 3_ 2_ 3 1 0xFD,0x23,0x7F, 0xFC,0xAC,0x7F, 0xFD,0x23,0xFF, 0xFC,0x44,0xFF, // 1_ 3_ 2 .5 0xFC,0x44,0x7F, 0xFD,0x23,0x7F, 0xFC,0xAC,0xFF, 0xFA,0x68,0xFF, // .7_ 2_ 1 - 0xFC,0x0C,0x7F, 0xFC,0xAC,0x7F, 0xFC,0x44,0xFF, 0xFF,0xFF,0xFF, 0x00//结束 }; void Init(void); //初始化函数 void DelayMs(unsigned int time); //毫秒级延时函数 void main() { uchar time; Init(); TH0 = high; TL0 = low; while (1) {

相关主题