虚拟单片机实验系统的开发程序代码毕业论文附录_第1页
虚拟单片机实验系统的开发程序代码毕业论文附录_第2页
虚拟单片机实验系统的开发程序代码毕业论文附录_第3页
虚拟单片机实验系统的开发程序代码毕业论文附录_第4页
虚拟单片机实验系统的开发程序代码毕业论文附录_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

1、附 录1. LED流水灯电路的C语言程序/flow light and beep 流水灯从上到下流一遍,蜂鸣器发出“嘟嘟”的声音#include <reg51.h>#include <intrins.h>unsigned char a,b,k,j;sbit beep=P23;void delay10ms() for(a=100;a>0;a-) for(b=225;b>0;b-); void main() k=0xfe; while(1) delay10ms(); beep=0; delay10ms(); beep=1; j=_crol_(k,1); k=j;

2、 P1=j; 2. LCD字符显示电路C语言程序/*程序功能:敲入式地显示一段语句,由于语句超过了16*2个字节,故采取了分屏显示的方式,共分为六屏先后显示。*/#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit beep=P23;uchar code table ="I want to bring "uchar code table1="out the secret "uchar code table2="of nature and &

3、quot;uchar code table3="apply them for "uchar code table4="the happiness of"uchar code table5="man.I don't know"uchar code table6="of any better s-"uchar code table7="-ervice to offer"uchar code table8="for the short t-"uchar code table

4、9="-ime we are in "uchar code table10="the world. "uchar code table11="-Thomas Edison"sbit lcden=P34;sbit lcdrs=P35;sbit dula=P26;sbit wela=P27;uchar num;void delay(uint z)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);void write_com(uchar com)lcdrs=0;P0=com;delay(5);l

5、cden=1;delay(5);lcden=0;void write_data(uchar date)lcdrs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;void init()dula=0; wela=0;lcden=0;write_com(0x38);write_com(0x0e);write_com(0x06);write_com(0x01);write_com(0x80);void main()init();for(num=0;num<16;num+) /第一屏beep=0;write_data(tablenum);delay(100

6、);beep=1;delay(50);write_com(0x80+0x40);for(num=0;num<16;num+)beep=0;write_data(table1num);delay(100);beep=1;delay(50);write_com(0x01); /清屏 write_com(0x80); /设置字符显示位置指针于第一行for(num=0;num<16;num+) / 第二屏beep=0;write_data(table2num);delay(100);beep=1;delay(50);write_com(0x80+0x40); /设置字符显示位置指针于第二行

7、for(num=0;num<16;num+)beep=0;write_data(table3num);delay(100);beep=1;delay(50); write_com(0x80);write_com(0x01);for(num=0;num<16;num+) /第三屏beep=0;write_data(table4num);delay(100);beep=1;delay(50);write_com(0x80+0x40);for(num=0;num<16;num+)beep=0;write_data(table5num);delay(100);beep=1;delay

8、(50);write_com(0x01); write_com(0x80);for(num=0;num<16;num+) /第四屏beep=0;write_data(table6num);delay(100);beep=1;delay(50);write_com(0x80+0x40);for(num=0;num<16;num+)beep=0;write_data(table7num);delay(100);beep=1;delay(50);write_com(0x01); write_com(0x80);for(num=0;num<16;num+) /第五屏beep=0;wr

9、ite_data(table8num);delay(100);beep=1;delay(50);write_com(0x80+0x40);for(num=0;num<16;num+)beep=0;write_data(table9num);delay(100);beep=1;delay(50);write_com(0x01); write_com(0x80); for(num=0;num<16;num+) /第六屏beep=0;write_data(table10num);delay(100);beep=1;delay(50);write_com(0x80+0x40);for(nu

10、m=0;num<16;num+)beep=0;write_data(table11num);delay(100);beep=1;delay(50);while(1);3. 数码管动态扫描电路C语言程序#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charuchar temp,aa,num;sbit dula=P26;sbit wela=P27;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d

11、,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delay(uint z);void main()num=0;aa=0;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;temp=0xfe;P1=temp;dula=1;P0=table0;dula=0;wela=1;P0=0xc0;wela=0;while(1)delay(1000);temp=_crol_(temp,1);P1=temp;/*if(aa=40)aa=0;num+;if(num=16

12、)num=0;dula=1;P0=tablenum;dula=0;*/void delay(uint z)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);void timer0() interrupt 1 TH0=(65536-50000)/256;TL0=(65536-50000)%256;aa+;if(aa=40)aa=0;num+;if(num=16)num=0;dula=1;P0=tablenum;dula=0;4单键识别电路C语言程序/*程序功能: 生活中常见一个按键随着按下次数不同对应不同功能, 本程序以s2键为例,模拟其具有2种功能

13、, 一是点亮一个发光二极管,二是蜂鸣器发声*/#include<reg52.h>#define uchar unsigned char uchar num;sbit beep=P23;sbit led=P10;sbit s2=P34;void delay(uchar i)uchar j,k;for(j=i;j>0;j-)for(k=125;k>0;k-);void main()while(1)if(s2=0)delay(20); /消抖if(s2=20)while(!s2); /等待按键松开num+;switch(num)case 1: led=0;beep=1; br

14、eak;case 2: beep=0;led=1;num=0; break;5矩阵键盘电路C语言程序/4*4键盘检测程序,按下键后相应的代码显示在数码管上#include<reg51.h>sbit 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;j>0;j-) for(k=125;k>0;k-);unsigned char code table=0x3f,0x06,0x5b,0x

15、4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void 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) ca

16、se 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=0x

17、c5; 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; disp

18、lay(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; whil

19、e(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=1

20、3; 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; 6.AD转换电路C语言程序/拧动电位器,会在数码管的前三位显示0-255之间的数值。这就是把模拟电压转换成数字信号。/有些拧动电位器后数码管数可能不会动态

21、变化,请用户按下实验板上的S22复位按键可更新数据/这种显象产生的原因是和AD芯片自身的一些特性有关。#include<reg51.h>#include <intrins.h>#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;j>

22、0;j-) for(k=125;k>0;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; wel

23、a=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的片选发生

24、变化 for(a=20;a>0;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;/分出百

25、,十,和个位 A2t=adval%100; A2=A2t/10; A3=A2t%10; ;7DA转换电路C语言程序#include<reg51.h>sbit wela=P27;sbit dula=P26;sbit dawr=P36;sbit csda=P32;unsigned char a,j,k;void delay(unsigned char i) for(j=i;j>0;j-) for(k=125;k>0;k-);void main() wela=0; dula=0; csda=0; a=0; dawr=0; while(1) P0=a; / dawr=1; de

26、lay(50); / delay(200); / delay(200); / delay(200); a+; /wela=0; /P0=0xff; /wela=1; / wela=0;8计时器电路C语言程序/59秒自动计数器#include<reg51.h>#define uchar unsigned char uchar j,k,i,a,A1,A2,second;sbit dula=P26;sbit wela=P27;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39

27、,0x5e,0x79,0x71;void delay(uchar i) for(j=i;j>0;j-) for(k=125;k>0;k-);void display(uchar sh_c,uchar g_c) P0=0xff; wela=1; delay(1); wela=0; P0=tablesh_c; dula=1; dula=0; P0=0xfe; wela=1; wela=0; delay(5); P0=0xff; wela=1; delay(1); wela=0; P0=tableg_c; dula=1; dula=0; P0=0xfd; wela=1; wela=0;

28、delay(5);void main() while(1) second+; if(second=60) second=0; A1=second/10; A2=second%10; for(a=50;a>0;a-) display(A1,A2); 91602液晶显示时钟电路C语言程序#include<reg52.h>#define uchar unsigned char #define uint unsigned intsbit dula=P26;sbit wela=P27;sbit rs=P35;sbit lcden=P34;sbit s1=P30;sbit s2=P31;

29、sbit s3=P32;sbit rd=P37;uchar count,s1num;char miao,shi,fen;uchar code table=" 2013-6-1 MON"uchar code table1=" 00:00:00"void delay(uint z)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);void write_com(uchar com)rs=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;void write_dat

30、e(uchar date)rs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;void init()uchar num;dula=0;wela=0;lcden=0;/fen=59;/miao=53;/shi=23;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num<15;num+)write_date(tablenum);delay(5);write_com(0x80+0x40);for(num=

31、0;num<12;num+)write_date(table1num);delay(5);TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;void write_sfm(uchar add,uchar date)uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);void keyscan()rd=0;if(s1=0)delay(5);if(s1=0

32、)s1num+;while(!s1);if(s1num=1)TR0=0;write_com(0x80+0x40+10);write_com(0x0f);if(s1num=2)write_com(0x80+0x40+7);if(s1num=3)write_com(0x80+0x40+4);if(s1num=4)s1num=0;write_com(0x0c);TR0=1;if(s1num!=0)if(s2=0)delay(5);if(s2=0)while(!s2);if(s1num=1)miao+;if(miao=60)miao=0;write_sfm(10,miao);write_com(0x8

33、0+0x40+10);if(s1num=2)fen+;if(fen=60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+7);if(s1num=3)shi+;if(shi=24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+4);if(s3=0)delay(5);if(s3=0)while(!s3);if(s1num=1)/*if(miao=0)miao=59;write_sfm(10,miao);write_com(0x80+0x40+10);*/miao-;if(miao=-1)miao=59;write_sf

34、m(10,miao);write_com(0x80+0x40+10);if(s1num=2)fen-;if(fen=-1)fen=59;write_sfm(7,fen);write_com(0x80+0x40+7);if(s1num=3)shi-;if(shi=-1)shi=23;write_sfm(4,shi);write_com(0x80+0x40+4);void main()init();while(1)keyscan();/while(1);void timer0() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;coun

35、t+;if(count=18)count=0;miao+;if(miao=60)miao=0;fen+;if(fen=60)fen=0;shi+;if(shi=24)shi=0;write_sfm(4,shi);write_sfm(7,fen);write_sfm(10,miao);10DS18B20温度传感器电路C语言程序#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit DS=P22; /define interfaceuint temp; / variable of temper

36、atureuchar flag1; / sign of the result positive or negativesbit dula=P26;sbit wela=P27;unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;unsigned char code table1=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd, 0x87,0xff,0xef;void delay(uint count) /delay

37、uint i; while(count) i=200; while(i>0) i-; count-; /功能:串口初始化,波特率9600,方式1/void Init_Com(void) TMOD = 0x20; PCON = 0x00; SCON = 0x50; TH1 = 0xFd; TL1 = 0xFd; TR1 = 1;void dsreset(void) /send reset and initialization command uint i; DS=0; i=103; while(i>0)i-; DS=1; i=4; while(i>0)i-;bit tmprea

38、dbit(void) /read a bit uint i; bit dat; DS=0;i+; /i+ for delay DS=1;i+;i+; dat=DS; i=8;while(i>0)i-; return (dat);uchar tmpread(void) /read a byte date uchar i,j,dat; dat=0; for(i=1;i<=8;i+) j=tmpreadbit(); dat=(j<<7)|(dat>>1); /读出的数据最低位在最前面,这样刚好一个字节在DAT里 return(dat);void tmpwriteb

39、yte(uchar dat) /write a byte to ds18b20 uint i; uchar j; bit testb; for(j=1;j<=8;j+) testb=dat&0x01; dat=dat>>1; if(testb) /write 1 DS=0; i+;i+; DS=1; i=8;while(i>0)i-; else DS=0; /write 0 i=8;while(i>0)i-; DS=1; i+;i+; void tmpchange(void) /DS18B20 begin change dsreset(); delay(1); tmpwritebyte(0xcc); / address all drivers on bus tmpwr

温馨提示

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

评论

0/150

提交评论