虚拟单片机实验系统的开发程序代码毕业论文附录.docx
- 文档编号:9369591
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:67
- 大小:26.08KB
虚拟单片机实验系统的开发程序代码毕业论文附录.docx
《虚拟单片机实验系统的开发程序代码毕业论文附录.docx》由会员分享,可在线阅读,更多相关《虚拟单片机实验系统的开发程序代码毕业论文附录.docx(67页珍藏版)》请在冰豆网上搜索。
虚拟单片机实验系统的开发程序代码毕业论文附录
附录
1.LED流水灯电路的C语言程序
//flowlightandbeep流水灯从上到下流一遍,蜂鸣器发出“嘟嘟”的声音
#include
#include
unsignedchara,b,k,j;
sbitbeep=P2^3;
voiddelay10ms()
{
for(a=100;a>0;a--)
for(b=225;b>0;b--);
}
voidmain()
{
k=0xfe;
while
(1)
{
delay10ms();
beep=0;
delay10ms();
beep=1;
j=_crol_(k,1);
k=j;
P1=j;
}
}
2.LCD字符显示电路C语言程序
/************************************************************
程序功能:
敲入式地显示一段语句,由于语句超过了16*2个字节,故采取了分屏显示的方式,共分为六屏先后显示。
************************************************************/
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitbeep=P2^3;
ucharcodetable[]="Iwanttobring";
ucharcodetable1[]="outthesecret";
ucharcodetable2[]="ofnatureand";
ucharcodetable3[]="applythemfor";
ucharcodetable4[]="thehappinessof";
ucharcodetable5[]="man.Idon'tknow";
ucharcodetable6[]="ofanybetters-";
ucharcodetable7[]="-ervicetooffer";
ucharcodetable8[]="fortheshortt-";
ucharcodetable9[]="-imewearein";
ucharcodetable10[]="theworld.";
ucharcodetable11[]="---ThomasEdison";
sbitlcden=P3^4;
sbitlcdrs=P3^5;
sbitdula=P2^6;
sbitwela=P2^7;
ucharnum;
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidwrite_com(ucharcom)
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidwrite_data(uchardate)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidinit()
{dula=0;
wela=0;
lcden=0;
write_com(0x38);
write_com(0x0e);
write_com(0x06);
write_com(0x01);
write_com(0x80);
}
voidmain()
{
init();
for(num=0;num<16;num++)//第一屏
{
beep=0;
write_data(table[num]);
delay(100);
beep=1;
delay(50);
}
write_com(0x80+0x40);
for(num=0;num<16;num++)
{
beep=0;
write_data(table1[num]);
delay(100);
beep=1;
delay(50);
}
write_com(0x01);//清屏
write_com(0x80);//设置字符显示位置指针于第一行
for(num=0;num<16;num++)//第二屏
{beep=0;
write_data(table2[num]);
delay(100);
beep=1;
delay(50);
}
write_com(0x80+0x40);//设置字符显示位置指针于第二行
for(num=0;num<16;num++)
{beep=0;
write_data(table3[num]);
delay(100);
beep=1;
delay(50);
}
write_com(0x80);
write_com(0x01);
for(num=0;num<16;num++)//第三屏
{beep=0;
write_data(table4[num]);
delay(100);
beep=1;
delay(50);
}
write_com(0x80+0x40);
for(num=0;num<16;num++)
{beep=0;
write_data(table5[num]);
delay(100);
beep=1;
delay(50);
}
write_com(0x01);
write_com(0x80);
for(num=0;num<16;num++)//第四屏
{beep=0;
write_data(table6[num]);
delay(100);
beep=1;
delay(50);
}
write_com(0x80+0x40);
for(num=0;num<16;num++)
{beep=0;
write_data(table7[num]);
delay(100);
beep=1;
delay(50);
}
write_com(0x01);
write_com(0x80);
for(num=0;num<16;num++)//第五屏
{beep=0;
write_data(table8[num]);
delay(100);
beep=1;
delay(50);
}
write_com(0x80+0x40);
for(num=0;num<16;num++)
{beep=0;
write_data(table9[num]);
delay(100);
beep=1;
delay(50);
}
write_com(0x01);
write_com(0x80);
for(num=0;num<16;num++)//第六屏
{beep=0;
write_data(table10[num]);
delay(100);
beep=1;
delay(50);
}
write_com(0x80+0x40);
for(num=0;num<16;num++)
{beep=0;
write_data(table11[num]);
delay(100);
beep=1;
delay(50);
}
while
(1);
}
3.数码管动态扫描电路C语言程序
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
uchartemp,aa,num;
sbitdula=P2^6;
sbitwela=P2^7;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
voiddelay(uintz);
voidmain()
{
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=table[0];
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)
num=0;
dula=1;
P0=table[num];
dula=0;
}*/
}
}
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(aa==40)
{
aa=0;
num++;
if(num==16)
num=0;
dula=1;
P0=table[num];
dula=0;
}
}
4.单键识别电路C语言程序
/***************************************************************
程序功能:
生活中常见一个按键随着按下次数不同对应不同功能,
本程序以s2键为例,模拟其具有2种功能,
一是点亮一个发光二极管,二是蜂鸣器发声
******************************************************************/
#include
#defineucharunsignedchar
ucharnum;
sbitbeep=P2^3;
sbitled=P1^0;
sbits2=P3^4;
voiddelay(uchari)
{
ucharj,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
voidmain()
{
while
(1)
{
if(s2==0)
{
delay(20);//消抖
if(s2==20)
{
while(!
s2);//等待按键松开
num++;
}
switch(num)
{
case1:
led=0;beep=1;break;
case2:
beep=0;led=1;num=0;break;
}
}
}
}
5.矩阵键盘电路C语言程序
//4*4键盘检测程序,按下键后相应的代码显示在数码管上
#include
sbitbeep=P2^3;
sbitdula=P2^6;
sbitwela=P2^7;
unsignedchari=100;
unsignedcharj,k,temp,key;
voiddelay(unsignedchari)
{
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
voiddisplay(unsignedcharnum)
{
P0=table[num];
//P0=0xff;
dula=1;
dula=0;
P0=0xc0;
wela=1;
wela=0;
}
voidmain()
{
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)
{
case0xee:
key=0;
break;
case0xde:
key=1;
break;
case0xbe:
key=2;
break;
case0x7e:
key=3;
break;
}
while(temp!
=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
display(key);
//P0=table[key];
/*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)
{
case0xed:
key=4;
break;
case0xdd:
key=5;
break;
case0xbd:
key=6;
break;
case0x7d:
key=7;
break;
}
while(temp!
=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
display(key);
/*P0=table[key];
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)
{
case0xeb:
key=8;
break;
case0xdb:
key=9;
break;
case0xbb:
key=10;
break;
case0x7b:
key=11;
break;
}
while(temp!
=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
display(key);
/*P0=table[key];
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)
{
case0xe7:
key=12;
break;
case0xd7:
key=13;
break;
case0xb7:
key=14;
break;
case0x77:
key=15;
break;
}
while(temp!
=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
display(key);
/*P0=table[key];
dula=1;
//while(100--);
dula=0;
P0=0xc0;
wela=1;
wela=0;
*/P1=0xf0;
}
}
}
}
6.AD转换电路C语言程序
//拧动电位器,会在数码管的前三位显示0-255之间的数值。
这就是把模拟电压转换成数字信号。
//有些拧动电位器后数码管数可能不会动态变化,请用户按下实验板上的S22复位按键可更新数据
//这种显象产生的原因是和AD芯片自身的一些特性有关。
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitadrd=P3^7;//IO口定义
sbitadwr=P3^6;
sbitdiola=P2^5;
sbitdula=P2^6;
sbitwela=P2^7;
unsignedcharj,k,adval;
voiddelay(unsignedchari)//延时程序
{
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,//数码管编码
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
voiddisplay(ucharbai_c,ucharsh_c,ucharg_c)//显示程序
{
P0=table[bai_c];//显示百位
dula=1;
dula=0;
P0=0xfe;
wela=1;
wela=0;
delay(5);
dula=0;
P0=table[sh_c];//显示十位
dula=1;
dula=0;
wela=0;
P0=0xfd;
wela=1;
wela=0;
delay(5);
P0=table[g_c];//显示个位
dula=1;
dula=0;
P0=0xfb;
wela=1;
wela=0;
delay(5);
}
voidmain()//主程序
{
uchara,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;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;//分出百,十,和个位
A2t=adval%100;
A2=A2t/10;
A3=A2t%10;
};
}
7.DA转换电路C语言程序
#include
sbitwela=P2^7;
sbitdula=P2^6;
sbitdawr=P3^6;
sbitcsda=P3^2;
unsignedchara,j,k;
voiddelay(unsignedchari)
{
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
voidmain()
{
wela=0;
dula=0;
csda=0;
a=0;
dawr=0;
while
(1)
{
P0=a;
//dawr=1;
delay(50);
//delay(200);
//delay(200);
//delay(200);
a++;
}
//wela=0;
//P0=0xff;
//wela=1;
//wela=0;
}
8.计时器电路C语言程序
//59秒自动计数器
#include
#defineucharunsignedchar
ucharj,k,i,a,A1,A2,second;
sbitdula=P2^6;
sbitwela=P2^7;
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
voiddelay(uchari)
{
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
voiddisplay(ucharsh_c,ucharg_c)
{
P0=0xff;
wela=1;
delay
(1);
wela=0;
P0=table[sh_c];
dul
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 虚拟 单片机 实验 系统 开发 程序代码 毕业论文 附录