编程序.docx
- 文档编号:23289921
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:24
- 大小:22.23KB
编程序.docx
《编程序.docx》由会员分享,可在线阅读,更多相关《编程序.docx(24页珍藏版)》请在冰豆网上搜索。
编程序
┏━┓┏━┓
P1.0 ┫1┗┛40┣ Vcc
P1.1 ┫2 39┣ P0.0 编程软件:
Keil3
P1.2 ┫3 38┣ P0.1 下载软件:
STC-ISP4.88
P1.3 ┫4 37┣ P0.2 (已上传至协会群空间
P1.4 ┫5 36┣ P0.3 群号:
121622701)
P1.5 ┫6 35┣ P0.4 必备书籍:
P1.6 ┫7 34┣ P0.5 《C语言程序设计》
P1.7 ┫8 33┣ P0.6 《单片机原理及应用》
RST/Vpd ┫9 32┣ P0.7
RXDP3.0┫10 31┣ -EA/Vpp
TXDP3.1┫11 30┣ ALE/-P
-INT0P3.2 ┫12 29┣ -PSEN 以下例程流水灯、数码管、蜂鸣器
-INT1P3.3 ┫13 28┣ P2.7 代码已在开发板上实现,
T0 P3.4 ┫14 27┣ P2.6 由于时间关系不能一一调试,
T1 P3.5 ┫15 26┣ P2.5 其余代码仅供参考,一些IO口
-WRP3.6 ┫16 25┣ P2.4 还需要对应设置才能使用
-RDP3.7 ┫17 24┣ P2.3
XTAL2 ┫18 23┣ P2.2
XTAL1 ┫19 22┣ P2.1 DS18B20、MAX232、74HC595等芯片资料
GND ┫20 21┣ P2.0 可上以下网站查询
┗━━━━┛
引脚说明:
①电源引脚
Vcc(40脚):
典型值+5V。
Vss(20脚):
接低电平。
②外部晶振
X1、X2分别与晶体两端相连接。
当采用外部时钟信号时,X2接振荡信号,X1接地。
③输入输出口引脚:
P0口:
I/O双向口。
作输入口时,应先软件置“1”。
P1口:
I/O双向口。
作输入口时,应先软件置“1”。
P2口:
I/O双向口。
作输入口时,应先软件置“1”。
P3口:
I/O双向口。
作输入口时,应先软件置“1”。
④控制引脚:
RST/Vpd、ALE/-PROG、-PSEN、-EA/Vpp组成了MSC-51的控制总线。
RST/Vpd(9脚):
复位信号输入端(高电平有效)。
第二功能:
加+5V备用电源,可以实现掉电保护RAM信息不丢失。
ALE/-PROG(30脚):
地址锁存信号输出端。
第二功能:
编程脉冲输入。
-PSEN(29脚):
外部程序存储器读选通信号。
-EA/Vpp(31脚):
外部程序存储器使能端。
第二功能:
编程电压输入端(+21V)。
实验例程:
流水灯:
#include
unsignedchari;
unsignedchartemp;
voiddelay(void);
voidmain(void)//主程序
{
temp=0xfe;
while
(1)
{
for(i=0;i<8;i++)
{
P2=temp<
delay();
}
}
}
voiddelay(void)//延时子程序
{
unsignedcharm,n,t;
for(m=200;m>0;m--)
for(n=200;n>0;n--);
for(t=200;t>0;t--);
}
数码管时钟及按键中断:
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitSI=P2^7;
sbitRCK=P2^6;
sbitSCK=P2^5;
sbitON=P1^4;
sbitKEY0=P3^2;
sbitKEY1=P3^3;
sbitKEY2=P3^4;
sbitKEY3=P3^5;
ucharcodeTAB[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
ucharidataTAB2[4]={0,0,0,0},F=0,M=0,s=20;
voiddelay(uintz)
{uintx,y;
for(x=z;x>0;x--)
{
for(y=110;y>0;y--);
}
}
voidKEY()
{
if(KEY1==0)
{
delay(100);
if(KEY1==0){if(TAB2[1]<5)TAB2[1]++;elseTAB2[1]=0;}
}
if(KEY0==0){
delay(100);
if(KEY0==0){if(TAB2[2]<9)TAB2[2]++;elseTAB2[2]=0;}
}
if(KEY3==0)
{
delay(100);
if(KEY3==0){if(TAB2[3]<5)TAB2[3]++;elseTAB2[3]=0;}
}
if(KEY2==0){
delay(100);
if(KEY2==0){if(TAB2[0]<9)TAB2[0]++;elseTAB2[0]=0;}
}
}
voidsubmit()
{uchari=8,j=0,c=0,d=0x80;
RCK=0;
for(;j<4;j++)
{RCK=0;
for(i=8;i>0;i--)
{SCK=0;
c=TAB2[j];
if((TAB[c]&d)==0)
SI=0;
elseSI=1;
d=d>>1;
SCK=1;
}
RCK=1;
d=0x80;
if(j<3)
{P1=(P1<<1)+1;ON=1;}
elseP1=0xfE;
//delay
(2)delay
(1);
}
P1=0xfe;
}
voidtimer()interrupt1using0
{TL0=0xb0;
TH0=0x3c;
while(--s==0)
{s=20;
if(TAB2[2]<9)
{
TAB2[2]++;
}
elseif((TAB2[1]<5)&&(TAB2[2]==9))
{
TAB2[2]=0;TAB2[1]++;
}
elseif((TAB2[0]<9)&&(TAB2[1]==5)&&(TAB2[2]==9))
{
TAB2[0]++;TAB2[2]=0;TAB2[1]=0;
}
elseif((TAB2[3]<5)&&(TAB2[0]==9)&&(TAB2[1]==5)&&(TAB2[2]==9))
{
TAB2[0]=0;TAB2[2]=0;TAB2[1]=0;TAB2[3]++;
}
else{TAB2[0]=0;TAB2[2]=0;TAB2[1]=0;TAB2[3]=0;}
}
}
voidmain()
{P1=0XFE;
TL0=0xb0;
TH0=0x3c;
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
while
(1){KEY();
submit();
}
}
用矩阵式键盘控制显示器
ORG00H;
START:
MOVR4,#00H;
L1:
MOVR3,#0F7H;扫描初值(P3.3=0)
MOVR1,#00H;取码指针
L2:
MOVA,R3;开始扫描
MOVP3,A;将扫描值输出至P3
MOVA,P3;读入P3值,判断有无按下
MOVR4,A;存入R4,以判断是否放开
SETBC;C=1
MOVR5,#04H;扫描P3.4~P3.7
L3:
RLCA;将按键值左移一位
JNCKEY;有键按下C=0,跳至KEY
INCR1;C=1没键按下,指针值加1
DJNZR5,L3;4列扫描完毕了?
MOVA,R3;扫描值载入
SETBC;C=RRCA
MOVR3,A;存回扫描寄存器
JCL2;C=1,程序转到L2处
JMPL1;C=0则4行已扫描完毕
KEY:
ACALLDELAY;调延时子程序
D1:
MOVA,P3;读入P3值
XRLA,R4;与上次读入值作比较
JZD1;A=0,表示按键未放
MOVA,R1;按键已放开,指针载入A
ACALLDISP;调用显示子程序
JMPL1;
DISP:
MOVDPTR,#TABLE;数据指针指到TABLE
MOVCA,@A+DPTR;恢罷ABLE取码
MOVP0,A;输出
RET;子程序返回
DELAY:
MOVR7,#60;
MOVR6,#248;
DLY1:
DJNZR6,$;
DJNZR7,DLY1;
RET;
TABLE:
DB0C0H,0F9H,0A4H,0B0H;
DB99H,92H,82H,0F8H;
DB80H,90H,88H,83H;
DB0C6H,0A1H,86H,8EH;
END;
蜂鸣器唱歌
C源文件:
#include
#include"SoundPlay.h"
voidDelay1ms(unsignedintcount)
{
unsignedinti,j;
for(i=0;i for(j=0;j<120;j++); } //*****************************Music******************************************* //同一首歌 unsignedcharcodeMusic_Same[]={0x0F,0x01,0x15,0x02,0x16,0x02,0x17,0x66,0x18,0x03, 0x17,0x02,0x15,0x02,0x16,0x01,0x15,0x02,0x10,0x02, 0x15,0x00,0x0F,0x01,0x15,0x02,0x16,0x02,0x17,0x02, 0x17,0x03,0x18,0x03,0x19,0x02,0x15,0x02,0x18,0x66, 0x17,0x03,0x19,0x02,0x16,0x03,0x17,0x03,0x16,0x00, 0x17,0x01,0x19,0x02,0x1B,0x02,0x1B,0x70,0x1A,0x03, 0x1A,0x01,0x19,0x02,0x19,0x03,0x1A,0x03,0x1B,0x02, 0x1A,0x0D,0x19,0x03,0x17,0x00,0x18,0x66,0x18,0x03, 0x19,0x02,0x1A,0x02,0x19,0x0C,0x18,0x0D,0x17,0x03, 0x16,0x01,0x11,0x02,0x11,0x03,0x10,0x03,0x0F,0x0C, 0x10,0x02,0x15,0x00,0x1F,0x01,0x1A,0x01,0x18,0x66, 0x19,0x03,0x1A,0x01,0x1B,0x02,0x1B,0x03,0x1B,0x03, 0x1B,0x0C,0x1A,0x0D,0x19,0x03,0x17,0x00,0x1F,0x01, 0x1A,0x01,0x18,0x66,0x19,0x03,0x1A,0x01,0x10,0x02, 0x10,0x03,0x10,0x03,0x1A,0x0C,0x18,0x0D,0x17,0x03, 0x16,0x00,0x0F,0x01,0x15,0x02,0x16,0x02,0x17,0x70, 0x18,0x03,0x17,0x02,0x15,0x03,0x15,0x03,0x16,0x66, 0x16,0x03,0x16,0x02,0x16,0x03,0x15,0x03,0x10,0x02, 0x10,0x01,0x11,0x01,0x11,0x66,0x10,0x03,0x0F,0x0C, 0x1A,0x02,0x19,0x02,0x16,0x03,0x16,0x03,0x18,0x66, 0x18,0x03,0x18,0x02,0x17,0x03,0x16,0x03,0x19,0x00, 0x00,0x00}; //两只蝴蝶 unsignedcharcodeMusic_Two[]={0x17,0x03,0x16,0x03,0x17,0x01,0x16,0x03,0x17,0x03, 0x16,0x03,0x15,0x01,0x10,0x03,0x15,0x03,0x16,0x02, 0x16,0x0D,0x17,0x03,0x16,0x03,0x15,0x03,0x10,0x03, 0x10,0x0E,0x15,0x04,0x0F,0x01,0x17,0x03,0x16,0x03, 0x17,0x01,0x16,0x03,0x17,0x03,0x16,0x03,0x15,0x01, 0x10,0x03,0x15,0x03,0x16,0x02,0x16,0x0D,0x17,0x03, 0x16,0x03,0x15,0x03,0x10,0x03,0x15,0x03,0x16,0x01, 0x17,0x03,0x16,0x03,0x17,0x01,0x16,0x03,0x17,0x03, 0x16,0x03,0x15,0x01,0x10,0x03,0x15,0x03,0x16,0x02, 0x16,0x0D,0x17,0x03,0x16,0x03,0x15,0x03,0x10,0x03, 0x10,0x0E,0x15,0x04,0x0F,0x01,0x17,0x03,0x19,0x03, 0x19,0x01,0x19,0x03,0x1A,0x03,0x19,0x03,0x17,0x01, 0x16,0x03,0x16,0x03,0x16,0x02,0x16,0x0D,0x17,0x03, 0x16,0x03,0x15,0x03,0x10,0x03,0x10,0x0D,0x15,0x00, 0x19,0x03,0x19,0x03,0x1A,0x03,0x1F,0x03,0x1B,0x03, 0x1B,0x03,0x1A,0x03,0x17,0x0D,0x16,0x03,0x16,0x03, 0x16,0x0D,0x17,0x01,0x17,0x03,0x17,0x03,0x19,0x03, 0x1A,0x02,0x1A,0x02,0x10,0x03,0x17,0x0D,0x16,0x03, 0x16,0x01,0x17,0x03,0x19,0x03,0x19,0x03,0x17,0x03, 0x19,0x02,0x1F,0x02,0x1B,0x03,0x1A,0x03,0x1A,0x0E, 0x1B,0x04,0x17,0x02,0x1A,0x03,0x1A,0x03,0x1A,0x0E, 0x1B,0x04,0x1A,0x03,0x19,0x03,0x17,0x03,0x16,0x03, 0x17,0x0D,0x16,0x03,0x17,0x03,0x19,0x01,0x19,0x03, 0x19,0x03,0x1A,0x03,0x1F,0x03,0x1B,0x03,0x1B,0x03, 0x1A,0x03,0x17,0x0D,0x16,0x03,0x16,0x03,0x16,0x03, 0x17,0x01,0x17,0x03,0x17,0x03,0x19,0x03,0x1A,0x02, 0x1A,0x02,0x10,0x03,0x17,0x0D,0x16,0x03,0x16,0x01, 0x17,0x03,0x19,0x03,0x19,0x03,0x17,0x03,0x19,0x03, 0x1F,0x02,0x1B,0x03,0x1A,0x03,0x1A,0x0E,0x1B,0x04, 0x17,0x02,0x1A,0x03,0x1A,0x03,0x1A,0x0E,0x1B,0x04, 0x17,0x16,0x1A,0x03,0x1A,0x03,0x1A,0x0E,0x1B,0x04, 0x1A,0x03,0x19,0x03,0x17,0x03,0x16,0x03,0x0F,0x02, 0x10,0x03,0x15,0x00,0x00,0x00}; //***************************************************************************** main() { InitialSound(); while (1) { Play(Music_Same,0,3,360); Delay1ms(500); Play(Music_Two,0,3,360); Delay1ms(500); } } C头文件: SoundPlay.h /*说明************************************************************************** 曲谱存贮格式unsignedcharcodeMusicName{音高,音长,音高,音长....,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-有符点 调用演奏子程序的格式 Play(乐曲名,调号,升降八度,演奏速度); |乐曲名: 要播放的乐曲指针,结尾以(0,0)结束; |调号(0-11): 是指乐曲升多少个半音演奏; |升降八度(1-3): 1: 降八度,2: 不升不降,3: 升八度; |演奏速度(1-12000): 值越大速度越快; ***************************************************************************/ #ifndef__SOUNDPLAY_H_REVISION_FIRST__ #define__SOUNDPLAY_H_REVISION_FIRST__ //************************************************************************** #defineSYSTEM_OSC12000000//定义晶振频率12000000HZ #defineSOUND_SPACE4/5//定义普通音符演奏的长度分率,//每4分音符间隔 sbitBeepIO=P1^5;//定义输出管脚 unsignedintcodeFreTab[12]={262,277,294,311,330,349,369,392,415,440,466,494};//原始频率表 unsignedcharcodeSignTab[7]={0,2,4,5,7,9,11};//1~7在频率表中的位置 unsignedcharcodeLengthTab[7]={1,2,4,8,16,32,64}; unsignedcharSound_Temp_TH0,Sound_Temp_TL0;//音符定时器初值暂存 unsignedcharSound_Temp_TH1,Sound_Temp_TL1;//音长定时器初值暂存 //************************************************************************** voidInitialSound(void) { BeepIO=0; Sound_Temp_TH1=(65535-(1/1200)*SYSTEM_OSC)/256;//计算TL1应装入的初值(10ms的初装值) Sound_Temp_TL1=(65535-(1/1200)*SYSTEM_OSC)%256;//计算TH1应装入的初值 TH1=Sound_Temp_TH1; TL1=Sound_Temp_TL1; TMOD|=0x11; ET0=1; ET1=0; TR0=0; TR1=0; EA=1; } voidBeepTime
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)