当前位置:首页 > 《单片机原理及应用(C51)》
4:如下图,编程实现LED循环显示字符:“H” →“L” →“E”。 #include
char led_ mod[]={0x76,0x38,0x79}; //LED显示字模 void delay( unsigned int time) { unsigned int j = 0; for(; time>0;time--) for( j=0;j<200;j++); }
void main(void) { char i=0; while(1)
{for(i=0;i<=2;i++) { P0=led_mod[i]; delay(500); } }}
5、开机时LED全熄,然后根据按键动作使相应灯亮,并将亮灯保持到按压其它键时为止。 #include
R5R6R7R8void main() {
U1 char key = 0; P2=0; while(1){
key = ~P0 & 0x0f; //读取按键状态 R1D1 if (key != 0) P2 = key; //显示到led R2D2 }
R3D3}
R4D4
6、在P0口连接一个共阴极数码管,使之循环显示0~9数字。 #include
7、设计一个开关控制报警器:用K1开关控制报警器,程序控制P1.0输出两种不同频率的声音,模拟很逼真的报警效果.
C2C1#include
22uF193930pF#define uchar unsigned char XTAL1P0.0/AD038X1P0.1/AD137CRYSTALP0.2/AD2C31836sbit SPK=P1^0; XTAL2P0.3/AD335R1P0.4/AD4341kP0.5/AD53330pFsbit K1=P1^7; P0.6/AD6932RSTP0.7/AD721void Alarm(uchar t) //发声函数 P2.0/A822P2.1/A923P2.2/A10U12924{ uchar i,j; PSENP2.3/A113025ALEP2.4/A12312680C51EAP2.5/A1327 for(i=0;i<200;i++) //循环次数控制音频的持续时间 P2.6/A1428P2.7/A15LS1110 { SPK=~SPK; P1.0P3.0/RXD211P1.1P3.1/TXD312P1.2P3.2/INT0413 for(j=0;j void main() { SPK=0; while(1) { if(K1==1) { Alarm(90); Alarm(150); } } } 8、设单片机的fosc=12MHz,采用T0定时方式1在P1.0脚上输出周期为2ms的方波。 分析:1ms定时的计数初值应为: a = 216 – t* fos / 12 = 216 – 1000* 12/ 12 = 64536 = 0xfc18 TH0 = 0xfc TL0 = 0x18 ① 查询法: U?#include timer0 () interrupt 1 //T0中断函数 { P1_0 = !P1_0; //P1.0取反 TH0 = 0xfc; //装载计数初值 18 TL0 = 0x18; } main () { TMOD = 0x01; //T0定时方式1 TH0 = 0xfc; //装载计数初值 TL0 = 0x18; EA=1; //开总中断 ET0=1; //开T0中断 TR0=1; //启动T0 while(1); } 9、使用T1,分别用工作方式1、方式2 、方式0实现1s延时函数,晶振频率为12M. 19 C130pFX1CRYSTALC310uFR110k10、程序运行开始时先显示“00”,随后显示数值逐渐增大。待计数到59后,自动从“00”开始。 //定时中断方式实现的电子秒表 #include unsigned char t=0; //定义中断次数计数器 unsigned char second=0; //定义秒计数器 unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; timer0() interrupt 1{ //定时器0中断函数 TR0=0; TH0 =0x3c; //初值重装载 TL0 =0xb0; t++; //中断次数增1 if(t==20){ //若中断20次,相当于1秒 t=0; //中断次数计数器清零 second++; //秒计数器清零 } if(second==60) second=0; //若秒计数器=60,清零 P0=table[second/10]; //P0口输出显示 P2=table[second]; //P2口输出显示 TR0=1; } main(){ TMOD=0x01; //定义T0定时方式1 TH0 =0x3c; //50ms溢出初值 TL0 =0xb0; P0=table[second/10]; //P0口输出显示 P2=table[second]; //P2口输出显示 TR0=1; //启动定时器 ET0=1; //打开定时器0中断 EA=1; //打开总中断 while(1){} //主程序循环 } C1C2C2 30pF30pFX1U1R2-R7/1kR2 U11939XTAL1P0.0/AD038220P0.1/AD137P0.2/AD2CRYSTAL 1836XTAL2P0.3/AD335P0.4/AD434P0.5/AD5C3 33P0.6/AD6932RSTP0.7/AD7 2110uFR1P2.0/A822P2.1/A92310kP2.2/A10 2924PSENP2.3/A113025ALEP2.4/A123126EAP2.5/A13 27P2.6/A1428P2.7/A15 110P1.0P3.0/RXD211P1.1P3.1/TXDLED1LED2312P1.2P3.2/INT0 413P1.3P3.3/INT1514P1.4P3.4/T0615P1.5P3.5/T1 716P1.6P3.6/WR817P1.7P3.7/RD 80C51第10题图 第11题图 30pF19XTAL118XTAL29RSTP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7393837363534333221222324252627281011121314151617P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.0P0.1P0.2P0.3P0.4P0.5P0.6PULLUP293031PSENALEEAP2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P2.0P2.1P2.2P2.3P2.4P2.5P2.6P0.0P0.1P0.2P0.3P0.4P0.5P0.6P2.0P2.1P2.2P2.3P2.4P2.5P2.612345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD80C51D1LED-YELLOW 20
共分享92篇相关文档