基于Proteus的多功能单片机仿真开发板(内含多个程序模块).doc_第1页
基于Proteus的多功能单片机仿真开发板(内含多个程序模块).doc_第2页
基于Proteus的多功能单片机仿真开发板(内含多个程序模块).doc_第3页
基于Proteus的多功能单片机仿真开发板(内含多个程序模块).doc_第4页
基于Proteus的多功能单片机仿真开发板(内含多个程序模块).doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1. 流水灯同数码管报警实验程序:#include #include #define uint unsigned int #define uchar unsigned char uchar tt,num,temp; sbit dula=p26; sbit wela=p27; sbit beep = p23; /蜂鸣器控制端口p2.3 uchar code table= 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71 ; void xu(uint z);void delay(unsigned int cnt)/延时 while(-cnt);void beep()/蜂鸣器响一声函数 unsigned char i; for (i=0;i0;x-)for(y=110;y0;y-); void time() interrupt 1 th0=(65536-50000)/256;tl0=(65536-50000)%256;tt+;if(tt=10)tt=0; num+;if(num=16)num=0;dula=1;p0=tablenum;dula=0; 2. 矩阵键盘检测/4*4键盘检测程序,按下键后相应的代码显示在数码管上#includesbit beep=p23;sbit dula=p26;sbit wela=p27; unsigned char i=100;unsigned char j,k,temp,key;void delay(unsigned char i) for(j=i;j0;j-) for(k=125;k0;k-);unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;display(unsigned char num) p0=tablenum; / p0=0xff; dula=1; dula=0; p0=0xc0; wela=1; wela=0;void main() dula=0; wela=0; while(1) p3=0xfe; temp=p3; temp=temp&0xf0; if(temp!=0xf0) delay(10); if(temp!=0xf0) temp=p3; switch(temp) case 0xee: key=0; break; case 0xde: key=1; break; case 0xbe: key=2; break; case 0x7e: key=3; break; while(temp!=0xf0) temp=p3; temp=temp&0xf0; beep=0; beep=1; display(key); / p0=tablekey; /* p0=0xff; dula=1; while(i-); dula=0; p0=0xc0; wela=1; wela=0; dula=0; wela=0; p0=0xff; dula=1; dula=0; p0=0xc5; wela=1; wela=0; */ p1=0xfe; p3=0xfd; temp=p3; temp=temp&0xf0; if(temp!=0xf0) delay(10); if(temp!=0xf0) temp=p3; switch(temp) case 0xed: key=4; break; case 0xdd: key=5; break; case 0xbd: key=6; break; case 0x7d: key=7; break; while(temp!=0xf0) temp=p3; temp=temp&0xf0; beep=0; beep=1; display(key);/* p0=tablekey; dula=1; / while(100-); dula=0; p0=0xc0; wela=1; wela=0; */ p1=0xfc; p3=0xfb; temp=p3; temp=temp&0xf0; if(temp!=0xf0) delay(10); if(temp!=0xf0) temp=p3; switch(temp) case 0xeb: key=8; break; case 0xdb: key=9; break; case 0xbb: key=10; break; case 0x7b: key=11; break; while(temp!=0xf0) temp=p3; temp=temp&0xf0; beep=0; beep=1; display(key); /* p0=tablekey; dula=1; / while(100-); dula=0; p0=0xc0; wela=1; wela=0; */ p1=0xf8; p3=0xf7; temp=p3; temp=temp&0xf0; if(temp!=0xf0) delay(10); if(temp!=0xf0) temp=p3; switch(temp) case 0xe7: key=12; break; case 0xd7: key=13; break; case 0xb7: key=14; break; case 0x77: key=15; break; while(temp!=0xf0) temp=p3; temp=temp&0xf0; beep=0; beep=1; display(key); /* p0=tablekey; dula=1; / while(100-); dula=0; p0=0xc0; wela=1; wela=0; */ p1=0xf0; 3. adc模数试验/拧动电位器,会在数码管的前三位显示0-255之间的数值。这就是把模拟电压转换成数字信号。/有些拧动电位器后数码管数可能不会动态变化,请用户按下实验板上的s22复位按键可更新数据/这种显象产生的原因是和ad芯片自身的一些特性有关。#include#include #define uint unsigned int#define uchar unsigned charsbit adrd=p37; /io口定义sbit adwr=p36;sbit diola=p25;sbit dula=p26;sbit wela=p27;unsigned char j,k,adval;void delay(unsigned char i)/延时程序 for(j=i;j0;j-) for(k=125;k0;k-);uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,/数码管编码 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void display(uchar bai_c,uchar sh_c,uchar g_c)/显示程序 p0=tablebai_c;/显示百位 dula=1; dula=0; p0=0xfe; wela=1; wela=0; delay(5); dula=0; p0=tablesh_c;/显示十位 dula=1; dula=0; wela=0; p0=0xfd; wela=1; wela=0; delay(5); p0=tableg_c;/显示个位 dula=1; dula=0; p0=0xfb; wela=1; wela=0; delay(5);void main()/主程序 uchar a,a1,a2,a2t,a3; while(1) wela=1; p0=0; /选通adcs adwr=0;/ad写入(随便写个什么都行,主要是为了启动ad转换) _nop_(); adwr=1; p0=0xff; /关闭adcs delay(10); wela=0; /关闭有ad片选信号锁存器的锁存端以防止在操作数码管时使ad的片选发生变化 for(a=20;a0;a-) /需要注意的是adc0804在写和读之间的时间间隔要足够长否则无法读出数据 /这里把显示部分放这里的原因也是为了增加写读之间的时间间隔 display(a1,a2,a3); /送去显示各位。 wela=1; /重新打开有ad片选信号锁存器的锁存端 p1=0xff; /读取p1口之前先给其写全1 p0=0; /选通adcs adrd=0; /ad读使能 adval=p1;/ad数据读取赋给p1口 adrd=1; p0=0xff; /关闭adcs adwr=0; p1=adval; /同时把ad的值送八个发光二极显示 a1=adval/100;/分出百,十,和个位 a2t=adval%100; a2=a2t/10; a3=a2t%10; ;4. 步进电机数码管显示控制试验/* 1、本程序用于测试4相步进电机常规驱动 2、hj-3g红色的线接到j6右边第1脚vcc上 3、速度不可以调节的过快,不然就没有力矩转动了 4、hj-1g红色的线接到j6第一脚上,vcc,共5条线,请不要接反了。 5、s1为换向健,s2为增大健,s3为减少健,可以能过数码管显出大小。*/#include #define uchar unsigned char sbit p30=p30;sbit dula=p26;sbit wela=p27;sbit jia_key=p36;sbit jian_key=p37;sbit zf_key=p35;bit flag=0;uchar num=0,show_num=2,maichong=4,table_begin=0;uchar code table1=0x01,0x02,0x04,0x08,0x08,0x04,0x02,0x01;/uchar code table1=0x09,0x03,0x06,0x0c,0x08,0x04,0x02,0x01;/uchar code table1=0x01,0x04,0x02,0x08,0x08,0x02,0x04,0x01;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delay(uchar i) uchar j,k; for(j=i;j0;j-) for(k=125;k0;k-);void display() dula=0; p0=tableshow_num; dula=1; dula=0; wela=0; p0=0xfe; wela=1; wela=0; delay(5); p0=table0; dula=1; dula=0; p0=0xfd; wela=1; wela=0; delay(5); void key ()p30=0; if(jia_key=0) delay(5); if(jia_key=0) num+; if(num=4) num=3; while(jia_key=0); if(jian_key=0) delay(5); if(jian_key=0) if(num!=0) num-; else num=0; while(jian_key=0); if(zf_key=0) delay(5); if(zf_key=0) flag=flag; while(zf_key=0); void dispose() switch(num) case 0: show_num=2; maichong=5; break;case 1: show_num=4; maichong=4;break;case 2: show_num=6; maichong=3;break;case 3: show_num=8; maichong=2;break; if(flag=0) table_begin=0; else table_begin=4;void qudong() uchar i,j; for(j=0+table_begin;j4+table_begin;j+) p1=table1j; for(i=0;imaichong;i+) display(); void main() while(1) key(); dispose(); qudong(); 5. 红外接收lcd1602显示试验/lcd1602对比度已调试好,可以直接使用。/操作方法如下:/1.正确安装液晶1602,请查看使用手册目录下的液晶安装方法。/2.下载本程序/该程序使用lcd1602显示/注意:数码管锁存源码还没有写好,现在接收信号时数码管会有发光。还有继电器会响,这是正常的#include#include#include sbit dula=p26;sbit wela=p27;sbit jd=p06;sbit fm=p23;/#define uchar unsigned char/#define uint unsigned int/#define ture 1#define false 0/sbit ir=p33;/红外接口标志sbit rs = p35;/pin4sbit rw = p36; /pin5sbit e = p34;/pin6sbit jdc = p06;/#define data p0 /数据端口void ioin() /io口继电器、数码管锁存函数 wela=1; p0 = 1; jd = 0; wela=0; dula=1; p0=0; dula=0; unsigned int hour,minute,second,count;char code tab16=0123456789abcdef;char data timenum= ;char data test1= ;/unsigned char irtime;/红外用全局变量bit irpro_ok,irok;unsigned char ircord4;unsigned char irdata33;void showstring (unsigned char line,char *ptr);/void delay(unsigned char ms);void ir_work(void);void ircordpro(void);/void delay(unsigned char ms)/delay ms unsigned char us,usn; while(ms!=0) usn = 4; while(usn!=0) us=0xf0; while (us!=0) us-; usn-; ms-; /* / / void tim0_isr (void) interrupt 1 using 1/定时器0中断服务函数 irtime+;/void ex0_isr (void) interrupt 0 using 0/外部中断0服务函数 static unsigned char i; static bit startflag; if(startflag) if(irtime=33)/引导码 tc9012的头码 i=0; irdatai=irtime; irtime=0; i+; if(i=33) irok=1; i=0; elseirtime=0;startflag=1;/void tim0init(void)/定时器0初始化 tmod=0x02;/定时器0工作方式2,th0是重装值,tl0是初值 th0=0x00;/reload value tl0=0x00;/initial value et0=1;/开中断 tr0=1;/void ex0init(void) it0 = 1; / configure interrupt 0 for falling edge on /int0 (p3.2) ex0 = 1; / enable ex0 interrupt ea = 1; /*/*/ void ir_work(void)/红外键值散转程序 timenum5 = tabircord0/16; timenum6 = tabircord0%16; timenum8 = tabircord1/16; timenum9 = tabircord1%16; timenum11 = tabircord2/16; timenum12 = tabircord2%16; timenum14 = tabircord3/16; timenum15 = tabircord3%16; showstring(1,timenum); irpro_ok=0; /*/void ircordpro(void)/红外码值处理函数 unsigned char i, j, k; unsigned char cord,value; k=1; for(i=0;i4;i+)/处理4个字节 for(j=1;j7)/大于某值为1 value=value|0x80; else value=value; if(j1; k+; ircordi=value; value=0; irpro_ok=1;/处理完毕标志位置1 /*/void delayus(unsigned char us)/delay us unsigned char uscnt; uscnt=us1;/* crystal frequency in 12mhz*/ while(-uscnt);/*/void delayms(unsigned char ms)/delay ms while(-ms) delayus(250); delayus(250); delayus(250); delayus(250); void writecommand(unsigned char c) delayms(5);/short delay before operation e=0; rs=0; rw=0; _nop_(); e=1; data=c; e=0;/*/void writedata(unsigned char c) delayms(5); /short delay before operation e=0; rs=1; rw=0; _nop_(); e=1; data=c; e=0; rs=0;/*/void showchar(unsigned char po

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论