首页 [34个单片机实例(包括框图和程序)]单片机实例20-26

[34个单片机实例(包括框图和程序)]单片机实例20-26

举报
开通vip

[34个单片机实例(包括框图和程序)]单片机实例20-2620. 数字钟﹝★﹞ 1. 实验任务 (1. 开机时,显示12:00:00的时间开始计时; (2. P0.0/AD0控制“秒”的调整,每按一次加1秒; (3. P0.1/AD1控制“分”的调整,每按一次加1分; (4. P0.2/AD2控制“时”的调整,每按一次加1个小时; 2. 电路原理图 图4.20.1 3. 系统板上硬件连线 (1. 把“单片机系统”区域中的P1.0-P1.7端口用8芯排线连接到“动态数码显示”区域中的A-H端口上; (2. 把“单片机系统:区域中的P...

[34个单片机实例(包括框图和程序)]单片机实例20-26
20. 数字钟﹝★﹞ 1. 实验任务 (1. 开机时,显示12:00:00的时间开始计时; (2. P0.0/AD0控制“秒”的调整,每按一次加1秒; (3. P0.1/AD1控制“分”的调整,每按一次加1分; (4. P0.2/AD2控制“时”的调整,每按一次加1个小时; 2. 电路原理图 图4.20.1 3. 系统板上硬件连线 (1. 把“单片机系统”区域中的P1.0-P1.7端口用8芯排线连接到“动态数码显示”区域中的A-H端口上; (2. 把“单片机系统:区域中的P3.0-P3.7端口用8芯排线连接到“动态数码显示”区域中的S1-S8端口上; (3. 把“单片机系统”区域中的P0.0/AD0、P0.1/AD1、P0.2/AD2端口分别用导线连接到“独立式键盘”区域中的SP3、SP2、SP1端口上; 4. 相关基本知识 (1. 动态数码显示的方法 (2. 独立式按键识别过程 (3. “时”,“分”,“秒”数据送出显示处理方法 5. 程序框图 7. C语言源程序 #include unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x00}; unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f}; unsigned char dispbuf[8]={0,0,16,0,0,16,0,0}; unsigned char dispbitcnt; unsigned char second; unsigned char minite; unsigned char hour; unsigned int tcnt; unsigned char mstcnt; unsigned char i,j; void main(void) { TMOD=0x02; TH0=0x06; TL0=0x06; TR0=1; ET0=1; EA=1; while(1) { if(P0_0==0) { for(i=5;i>0;i--) for(j=248;j>0;j--); if(P0_0==0) { second++; if(second==60) { second=0; } dispbuf[0]=second%10; dispbuf[1]=second/10; while(P0_0==0); } } if(P0_1==0) { for(i=5;i>0;i--) for(j=248;j>0;j--); if(P0_1==0) { minite++; if(minite==60) { minite=0; } dispbuf[3]=minite%10; dispbuf[4]=minite/10; while(P0_1==0); } } if(P0_2==0) { for(i=5;i>0;i--) for(j=248;j>0;j--); if(P0_2==0) { hour++; if(hour==24) { hour=0; } dispbuf[6]=hour%10; dispbuf[7]=hour/10; while(P0_2==0); } } } } void t0(void) interrupt 1 using 0 { mstcnt++; if(mstcnt==8) { mstcnt=0; P1=dispcode[dispbuf[dispbitcnt]]; P3=dispbitcode[dispbitcnt]; dispbitcnt++; if(dispbitcnt==8) { dispbitcnt=0; } } tcnt++; if(tcnt==4000) { tcnt=0; second++; if(second==60) { second=0; minite++; if(minite==60) { minite=0; hour++; if(hour==24) { hour=0; } } } dispbuf[0]=second%10; dispbuf[1]=second/10; dispbuf[3]=minite%10; dispbuf[4]=minite/10; dispbuf[6]=hour%10; dispbuf[7]=hour/10; } }   21. 拉幕式数码显示技术 1. 实验任务 用AT89S51单片机的P0.0/AD0-P0.7/AD7端口接数码管的a-h端,8位数码管的S1-S8通过74LS138译码器的Y0-Y7来控制选通每个数码管的位选端。AT89S51单片机的P1.0-P1.2控制74LS138的A,B,C端子。在8位数码管上从右向左循环显示“12345678”。能够比较平滑地看到拉幕的效果。 2. 电路原理图 图4.21.1 3. 系统板上硬件连线 (1. 把“单片机系统”区域中的P0.0/AD0-P0.7/AD7用8芯排线连接到“动态数码显示”区域中的a-h端口上; (2. 把“三八译码模块”区域中的Y0-Y7用8芯排线连接到“动态数码显示”区域中的S1-S8端口上; (3. 把“单片机系统”区域中的P1.0-P1.2端口用3根导线连接到“三八译码模块”区域中的A、B、C“端口上; 4. 程序设计方法 (1. 动态数码显示技术;如何进行动态扫描,由于一次只能让一个数码管显示,因此,要显示8位的数据,必须经过让数码管一个一个轮流显示才可以,同时每个数码管显示的时间大约在1ms到4ms之间,所以为了保证正确显示,我必须每隔1ms,就得刷新一个数码管。而这刷新时间我们采用单片机的定时/计数器T0来控制,每定时1ms对数码管刷新一次,T0采用方式2。 (2. 在进行数码显示的时候,要对显示单元开辟8个显示缓冲区,每个显示缓冲区装有显示的不同数据即可。 5. 程序框图 主程序框图 中断服务程序框图   图4.21.2 7. C语言源程序 #include unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x00}; unsigned char dispbitcode[]={0xf8,0xf9,0xfa,0xfb, 0xfc,0xfd,0xfe,0xff}; unsigned char dispbuf[8]={16,16,16,16,16,16,16,16}; unsigned char dispbitcnt; unsigned int t02scnt; unsigned char t5mscnt; unsigned char u; unsigned char i; void main(void) { TMOD=0x02; TH0=0x06; TL0=0x06; TR0=1; ET0=1; EA=1; while(1); } void t0(void) interrupt 1 using 0 { t5mscnt++; if(t5mscnt==4) { t5mscnt=0; P0=dispcode[dispbuf[dispbitcnt]]; P1=dispbitcode[dispbitcnt]; dispbitcnt++; if(dispbitcnt==8) { dispbitcnt=0; } } t02scnt++; if(t02scnt==1600) { t02scnt=0; u++; if(u==9) { u=0; } for(i=0;i<8;i++) { dispbuf[i]=16; } for(i=0;i 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 达的音乐。 2. 电路原理图 图4.22.1 3. 系统板硬件连线 (1. 把“单片机系统”区域中的P1.0端口用导线连接到“音频放大模块”区域中的SPK IN端口上; (2. 把“单片机系统“区域中的P3.0-P3.7端口用8芯排线连接到“4X4行列式键盘”区域中的C1-C4 R1-R4端口上; 4. 相关程序 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 (1. 4X4行列式键盘识别; (2. 音乐产生的方法; 一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。现在以单片机12MHZ晶振为例,例出高中低音符与单片机计数T0相关的计数值如下表所示 音符 频率(HZ) 简谱码(T值) 音符 频率(HZ) 简谱码(T值) 低1 DO 262 63628 # 4 FA# 740 #1 DO# 277 63731 中 5 SO 784 64898 低2 RE 294 63835 # 5 SO# 831 64934 #2 RE# 311 63928 中 6 LA 880 64968 低 3 M 330 64021 # 6 932 64994 低 4 FA 349 64103 中 7 SI 988 65030 # 4 FA# 370 64185 高 1 DO 1046 65058 低 5 SO 392 64260 # 1 DO# 1109 65085 # 5 SO# 415 64331 高 2 RE 1175 65110 低 6 LA 440 64400 # 2 RE# 1245 65134 # 6 466 64463 高 3 M 1318 65157 低 7 SI 494 64524 高 4 FA 1397 65178 中 1 DO 523 64580 # 4 FA# 1480 65198 # 1 DO# 554 64633 高 5 SO 1568 65217 中 2 RE 587 64684 # 5 SO# 1661 # 2 RE# 622 64732 高 6 LA 1760 65252 中 3 M 659 64777 # 6 1865 65268 中 4 FA 698 64820 高 7 SI 1967 65283 下面我们要为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据 低音0-19之间,中音在20-39之间,高音在40-59之间 TABLE: DW 0,63628,63835,64021,64103,64260,64400,64524,0,0 DW 0,63731,63928,0,64185,64331,64463,0,0,0 DW 0,64580,64684,64777,64820,64898,64968,65030,0,0 DW 0,64633,64732,0,64860,64934,64994,0,0,0 DW 0,65058,65110,65157,65178,65217,65252,65283,0,0 DW 0,65085,65134,0,65198,65235,65268,0,0,0 DW 0 2、音乐的音拍,一个节拍为单位(C调) 曲调值 DELAY 曲调值 DELAY 调4/4 125ms 调4/4 62ms 调3/4 187ms 调3/4 94ms 调2/4 250ms 调2/4 125ms 对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。 下面就用AT89S51单片机产生一首“生日快乐”歌曲来说明单片机如何产生的。 在这个程序中用到了两个定时/计数器来完成的。其中T0用来产生音符频率,T1用来产生音拍。 5. 程序框图 图4.22.2 7. C语言源程序 #include unsigned char temp; unsigned char key; unsigned char i,j; unsigned char STH0; unsigned char STL0; unsigned int code tab[]={64021,64103,64260,64400, 64524,64580,64684,64777, 64820,64898,64968,65030, 65058,65110,65157,65178}; void main(void) { TMOD=0x01; ET0=1; EA=1; while(1) { P3=0xff; //将P3口取出 P3_4=0; //使P3_4为低电平,这样可以判断第一竖排有没有键按下 temp=P3; temp=temp & 0x0f; if (temp!=0x0f) //有键按下 { for(i=50;i>0;i--) for(j=200;j>0;j--); //延时 temp=P3; temp=temp & 0x0f; if (temp!=0x0f) //再判断是否有键按下 { temp=P3; temp=temp & 0x0f; switch(temp) //判断是哪个键按下 { case 0x0e: key=0; break; case 0x0d: key=1; break; case 0x0b: key=2; break; case 0x07: key=3; break; } temp=P3; P1_0=~P1_0; P0=table[key]; STH0=tab[key]/256; //找出键对应的频率的时间,作为定时器中断初始值 STL0=tab[key]%256; TR0=1; temp=temp & 0x0f; while(temp!=0x0f) { temp=P3; temp=temp & 0x0f; } TR0=0; } } P3=0xff; P3_5=0; //跟上面差不多,现在是判断第二排的按键 temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { for(i=50;i>0;i--) for(j=200;j>0;j--); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { temp=P3; temp=temp & 0x0f; switch(temp) { case 0x0e: key=4; break; case 0x0d: key=5; break; case 0x0b: key=6; break; case 0x07: key=7; break; } temp=P3; P1_0=~P1_0; P0=table[key]; STH0=tab[key]/256; STL0=tab[key]%256; TR0=1; temp=temp & 0x0f; while(temp!=0x0f) { temp=P3; temp=temp & 0x0f; } TR0=0; } } P3=0xff; P3_6=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { for(i=50;i>0;i--) for(j=200;j>0;j--); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { temp=P3; temp=temp & 0x0f; switch(temp) { case 0x0e: key=8; break; case 0x0d: key=9; break; case 0x0b: key=10; break; case 0x07: key=11; break; } temp=P3; P1_0=~P1_0; P0=table[key]; STH0=tab[key]/256; STL0=tab[key]%256; TR0=1; temp=temp & 0x0f; while(temp!=0x0f) { temp=P3; temp=temp & 0x0f; } TR0=0; } } P3=0xff; P3_7=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { for(i=50;i>0;i--) for(j=200;j>0;j--); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { temp=P3; temp=temp & 0x0f; switch(temp) { case 0x0e: key=12; break; case 0x0d: key=13; break; case 0x0b: key=14; break; case 0x07: key=15; break; } temp=P3; P1_0=~P1_0; P0=table[key]; STH0=tab[key]/256; STL0=tab[key]%256; TR0=1; temp=temp & 0x0f; while(temp!=0x0f) { temp=P3; temp=temp & 0x0f; } TR0=0; } } } } void t0(void) interrupt 1 using 0 { TH0=STH0; TL0=STL0; P1_0=~P1_0; } 23. 模拟计算器数字输入及显示 1. 实验任务 (1. 开机时,显示“0” (2. 第一次按下时,显示“D1”;第二次按下时,显示“D1D2”;第三按下时,显示“D1D2D3”,8个全显示完毕,再按下按键下时,给出“嘀”提示音。 2. 电路原理图 图4.23.1 3. 系统板上硬件连线 (1. 把“单片机系统”区域中的P1.0端口用导线连接到“音频放大模块”区域中的SPK IN端口上; (2. 把“单片机系统“区域中的P3.0-P3.7端口用8芯排线连接到“4X4行列式键盘”区域中的C1-C4 R1-R4端口上; (3. 把“单片机系统”区域中的P0.0-P0.7端口用8芯排线连接到“动态数码显示”区域中的A-H端口上; (4. 把“单片机系统:区域中的P2.0-P2.7端口用8芯排线连接到“动态数码显示”区域中的S1-S8端口上; 4. 相关程序设计内容 (1. 行列式键盘输入及按键功能设定; (2. 动态数码显示; (3. 数码显示方式处理; 5. 汇编源程序 (略) 6. C语言源程序 #include unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char dispbuf[8]={0,16,16,16,16,16,16,16}; unsigned char dispbitcount; unsigned char temp; unsigned char i,j; unsigned char key; unsigned char keypos; bit alarmflag; void change(unsigned char *p,unsigned char count) { while(count>0) { *(p+count)=*(p+count-1); count--; } } void main(void) { TMOD=0x01; TH0=(65536-4000) / 256; TL0=(65536-4000) % 256; TR0=1; ET0=1; EA=1; while(1) { P3=0xff; P3_4=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { for(i=50;i>0;i--) for(j=200;j>0;j--); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { temp=P3; temp=temp & 0x0f; switch(temp) { case 0x0e: key=7; break; case 0x0d: key=8; break; case 0x0b: key=9; break; case 0x07: key=10; break; } if ((key>=0) && (key<10)) { keypos++; if(keypos<8) { change(dispbuf,keypos); dispbuf[0]=key; } else { keypos=8; alarmflag=1; } } temp=P3; P1_0=~P1_0; temp=temp & 0x0f; while(temp!=0x0f) { temp=P3; temp=temp & 0x0f; } alarmflag=0; } } P3=0xff; P3_5=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { for(i=50;i>0;i--) for(j=200;j>0;j--); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { temp=P3; temp=temp & 0x0f; switch(temp) { case 0x0e: key=4; break; case 0x0d: key=5; break; case 0x0b: key=6; break; case 0x07: key=11; break; } if ((key>=0) && (key<10)) { keypos++; if(keypos<8) { change(dispbuf,keypos); dispbuf[0]=key; } else { keypos=8; alarmflag=1; } } temp=P3; P1_0=~P1_0; temp=temp & 0x0f; while(temp!=0x0f) { temp=P3; temp=temp & 0x0f; } alarmflag=0; } } P3=0xff; P3_6=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { for(i=50;i>0;i--) for(j=200;j>0;j--); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { temp=P3; temp=temp & 0x0f; switch(temp) { case 0x0e: key=1; break; case 0x0d: key=2; break; case 0x0b: key=3; break; case 0x07: key=12; break; } if ((key>=0) && (key<10)) { keypos++; if(keypos<8) { change(dispbuf,keypos); dispbuf[0]=key; } else { keypos=8; alarmflag=1; } } temp=P3; P1_0=~P1_0; temp=temp & 0x0f; while(temp!=0x0f) { temp=P3; temp=temp & 0x0f; } alarmflag=0; } } P3=0xff; P3_7=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { for(i=50;i>0;i--) for(j=200;j>0;j--); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { temp=P3; temp=temp & 0x0f; switch(temp) { case 0x0e: key=0; break; case 0x0d: key=13; break; case 0x0b: key=14; break; case 0x07: key=15; break; } if ((key>=0) && (key<10)) { keypos++; if(keypos<8) { change(dispbuf,keypos); dispbuf[0]=key; } else { keypos=8; alarmflag=1; } } temp=P3; P1_0=~P1_0; temp=temp & 0x0f; while(temp!=0x0f) { temp=P3; temp=temp & 0x0f; } alarmflag=0; } } } } void t0(void) interrupt 1 using 0 { TH0=(65536-4000) / 256; TL0=(65536-4000) % 256; P0=dispcode[dispbuf[dispbitcount]]; P2=dispbitcode[dispbitcount]; dispbitcount++; if (dispbitcount==8) { dispbitcount=0; } if (alarmflag==1) { P1_1=~P1_1; } } 24. 8X8 LED点阵显示技术 1. 实验任务 在8X8 LED点阵上显示柱形,让其先从左到右平滑移动三次,其次从右到左平滑移动三次,再次从上到下平滑移动三次,最后从下到上平滑移动三次,如此循环下去。 2. 电路原理图 图4.24.1 3. 硬件电路连线 (1). 把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块”区域中的“DR1-DR8”端口上; (2). 把“单片机系统”区域中的P3端口用8芯排芯连接到“点阵模块”区域中的“DC1-DC8”端口上; 4. 程序设计内容 (1). 8X8 点阵LED工作原理说明 8X8点阵LED结构如下图所示 图4.24.2 从图4.24.2中可以看出,8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮;因此要实现一根柱形的亮法,如图49所示,对应的一列为一根竖柱,或者对应的一行为一根横柱,因此实现柱的亮的方法如下所述: 一根竖柱:对应的列置1,而行则采用扫描的方法来实现。 一根横柱:对应的行置0,而列则采用扫描的方法来实现。 6. C语言源程序 #include unsigned char code taba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char code tabb[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; void delay(void) { unsigned char i,j; for(i=10;i>0;i--) for(j=248;j>0;j--); } void delay1(void) { unsigned char i,j,k; for(k=10;k>0;k--) for(i=20;i>0;i--) for(j=248;j>0;j--); } void main(void) { unsigned char i,j; while(1) { for(j=0;j<3;j++)  //from left to right 3 time { for(i=0;i<8;i++) { P3=taba[i]; P1=0xff; delay1(); } } for(j=0;j<3;j++)  //from right to left 3 time { for(i=0;i<8;i++) { P3=taba[7-i]; P1=0xff; delay1(); } } for(j=0;j<3;j++)  //from top to bottom 3 time { for(i=0;i<8;i++) { P3=0x00; P1=tabb[7-i]; delay1(); } } for(j=0;j<3;j++)  //from bottom to top 3 time { for(i=0;i<8;i++) { P3=0x00; P1=tabb[i]; delay1(); } } } } 25. 点阵式LED“0-9”数字显示技术 1. 实验任务 利用8X8点阵显示数字0到9的数字。 2. 电路原理图 图4.25.1 3. 硬件系统连线 (1). 把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块”区域中的“DR1-DR8”端口上; (2). 把“单片机系统”区域中的P3端口用8芯排芯连接到“点阵模块”区域中的“DC1-DC8”端口上; 4. 程序设计内容 (1). 数字0-9点阵显示代码的形成 如下图所示,假设显示数字“0” 1 2 3 4 5 6 7 8                       ● ● ●         ●       ●       ●       ●       ●       ●       ●       ●       ●       ●         ● ● ●     00 00 3E 41 41 41 3E 00 因此,形成的列代码为 00H,00H,3EH,41H,41H,3EH,00H,00H;只要把这些代码分别送到相应的列线上面,即可实现“0”的数字显示。 送显示代码过程如下所示 送第一列线代码到P3端口,同时置第一行线为“0”,其它行线为“1”,延时2ms左右,送第二列线代码到P3端口,同时置第二行线为“0”,其它行线为“1”,延时2ms左右,如此下去,直到送完最后一列代码,又从头开始送。 数字“1”代码建立如下图所示 1 2 3 4 5 6 7 8                           ●             ● ●               ●               ●               ●               ●             ● ● ●   其显示代码为 00H,00H,00H,00H,21H,7FH,01H,00H 数字“2”代码建立如下图所示 1 2 3 4 5 6 7 8                       ● ● ●         ●       ●               ●               ●       ● ● ● ●         ●               ● ● ● ● ●   00H,00H,27H,45H,45H,45H,39H,00H 数字“3”代码建立如下图所示 1 2 3 4 5 6 7 8                       ● ● ●         ●       ●               ●         ● ● ●                 ●       ●       ●         ● ● ●     00H,00H,22H,49H,49H,49H,36H,00H 数字“4”代码建立如下图所示 1 2 3 4 5 6 7 8                           ●             ● ●           ●   ●         ●     ●         ● ● ● ● ●             ●               ●     00H,00H,0CH,14H,24H,7FH,04H,00H 数字“5”代码建立如下图所示 1 2 3 4 5 6 7 8                     ● ● ● ● ●       ●               ● ● ● ●                 ●               ●       ●       ●         ● ● ●     00H,00H,72H,51H,51H,51H,4EH,00H 数字“6”代码建立如下图所示 1 2 3 4 5 6 7 8                       ● ● ●         ●       ●       ●               ● ● ● ●         ●       ●       ●       ●         ● ● ●     00H,00H,3EH,49H,49H,49H,26H,00H 数字“7”代码建立如下图所示 1 2 3 4 5 6 7 8                     ● ● ● ● ●               ●               ●             ●               ●               ●               ●     00H,00H,40H,40H,40H,4FH,70H,00H 数字“8”代码建立如下图所示 1 2 3 4 5 6 7 8                       ● ● ●         ●       ●       ●       ●         ● ● ●         ●       ●       ●       ●         ● ● ●     00H,00H,36H,49H,49H,49H,36H,00H 数字“9”代码建立如下图所示 1 2 3 4 5 6 7 8                       ● ● ●         ●       ●       ●       ●         ● ● ● ●               ●       ●       ●         ● ● ●     00H,00H,32H,49H,49H,49H,3EH,00H 6. C语言源程序 #include unsigned char code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char code digittab[10][8]={   {0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00}, //0 {0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00}, //1 {0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00}, //2 {0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00}, //3 {0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00}, //4 {0x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00}, //5 {0x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00}, //6 {0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00}, //7 {0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00}, //8 {0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00} //9 }; unsigned int timecount; unsigned char cnta; unsigned char cntb; void main(void) { TMOD=0x01; TH0=(65536-3000)/256; TL0=(65536-3000)%256; TR0=1; ET0=1; EA=1; while(1) {; } } void t0(void) interrupt 1 using 0 { TH0=(65536-3000)/256; TL0=(65536-3000)%256; P3=tab[cnta]; P1=digittab[cntb][cnta]; cnta++; if(cnta==8) { cnta=0; } timecount++; if(timecount==333) { timecount=0; cntb++; if(cntb==10) { cntb=0; } } } 26. 点阵式LED简单图形显示技术 1. 实验任务 在8X8点阵式LED显示“★”、“●”和心形图,通过按键来选择要显示的图形。 2. 电路原理图 图4.26.1 3. 硬件系统连线 (1). 把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块”区域中的“DR1-DR8”端口上; (2). 把“单片机系统”区域中的P3端口用8芯排芯连接到“点阵模块”区域中的“DC1-DC8”端口上; (3). 把“单片机系统”区域中的P2.0/A8端子用导线连接到“独立式键盘”区域中的SP1端子上; 4. 程序设计内容 (1). “★”在8X8LED点阵上显示图如下图所示   1 2 3 4 5  6 7 8       ●               ●             ● ● ●       ● ● ● ● ● ● ●       ● ● ●         ● ●   ● ●     ●           ●                   12H,14H,3CH,48H,3CH,14H,12H,00H (2). “●”在8X8LED点阵上显示图如下图所示 1 2 3 4 5  6 7 8                       ● ● ●         ●       ●       ●       ●       ●       ●         ● ● ●                                     00H,00H,38H,44H,44H,44H,38H,00H (3). 心形图在8X8LED点阵上显示图如下图所示 1 2 3 4 5  6 7 8                   ● ●   ● ●     ●     ●     ●   ●           ●     ●       ●         ●   ●             ●                         30H,48H,44H,22H,44H,48H,30H,00H 6. C语言源程序 #include unsigned char code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char code graph[3][8]={{0x12,0x14,0x3c,0x48,0x3c,0x14,0x12,0x00}, {0x00,0x00,0x38,0x44,0x44,0x44,0x38,0x00}, {0x30,0x48,0x44,0x22,0x44,0x48,0x30,0x00} }; unsigned char count; unsigned char cnta; void main(void) { unsigned char i,j; TMOD=0x01; TH0=(65536-4000)/256; TL0=(65536-4000)%256; TR0=1; ET0=1; EA=1; while(1) { if(P2_0==0) { for(i=5;i>0;i--) for(j=248;j>0;j--); if(P2_0==0) { count++; if(count==3) { count=0; } while(P2_0==0); } } } } void t0(void) interrupt 1 using 0 { TH0=(65536-4000)/256; TL0=(65536-4000)%256; P3=tab[cnta]; P1=graph[count][cnta]; cnta++; if(cnta==8) { cnta=0; } }
本文档为【[34个单片机实例(包括框图和程序)]单片机实例20-26】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_804831
暂无简介~
格式:doc
大小:536KB
软件:Word
页数:40
分类:互联网
上传时间:2018-09-06
浏览量:26