毕业论文-基于at89c51单片机的声光控制开关的设计内容摘要:

0=table[shi]。 西北民族大学学士学位论文 —————————————————————————————————————————————— 14 delay(1)。 P2=0xfd。 P0=table[ge]。 delay(1)。 P2=0xfc。 } AD 转换程序 uchar adc0832(unsigned char ch) //AD 转换,返回结果。 { uchar i=0。 uchar j。 uint dat1=0。 uchar dat2=0。 if(ch==0)ch=2。 if(ch==1)ch=3。 adDI=1。 _nop_()。 _nop_()。 adCS=0。 //拉低 CS 端。 _nop_()。 _nop_()。 adCLK=1。 //拉高 CLK 端。 _nop_()。 _nop_()。 adCLK=0。 //拉低 CLK 端 ,形成下降沿 1。 _nop_()。 _nop_()。 adCLK=1。 //拉高 CLK 端。 adDI=champ。 0x1。 _nop_()。 _nop_()。 adCLK=0。 //拉低 CLK 端 ,形成下降沿 2。 _nop_()。 _nop_()。 adCLK=1。 //拉高 CLK 端。 adDI=(ch1)amp。 0x1。 _nop_()。 _nop_()。 adCLK=0。 //拉低 CLK 端 ,形成下降沿 3。 adDI=1。 //控制命令结束。 _nop_()。 西北民族大学学士学位论文 —————————————————————————————————————————————— 15 _nop_()。 dat1=0。 for(i=0。 i8。 i++) { dat1|=adDO。 //收数据。 adCLK=1。 _nop_()。 _nop_()。 adCLK=0。 //形成一次时钟脉冲。 _nop_()。 _nop_()。 dat1=1。 if(i==7)dat1|=adDO。 } for(i=0。 i8。 i++) { j=0。 j=j|adDO。 //收数据。 adCLK=1。 _nop_()。 _nop_()。 adCLK=0。 //形成一次时钟脉冲。 _nop_()。 _nop_()。 j=j7。 dat2=dat2|j。 if(i7)dat2=1。 } adCS=1。 //拉低 CS 端。 adCLK=0。 //拉低 CLK 端。 adDO=1。 //拉 高数据端 ,回到初始状态。 dat1=8。 dat1|=dat2。 return(dat1)。 } 总程序 include include define uint unsigned int define uchar unsigned char uchar temp,aa,bai,shi,ge,tt。 西北民族大学学士学位论文 —————————————————————————————————————————————— 16 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}。 // //数码管段定义; uchar code table1[]={0xfb,0xfd,0xfe}。 //数码管位定义; sbit open=P3^7。 sbit key1=P1^0。 sbit key2=P1^1。 sbit key3=P1^2。 sbit light=P3^2。 //ADC0832 的引脚。 sbit adCS =P3^1。 //ADC0832 片选。 sbit adDI =P3^3。 //ADC0832 通道选择和初始化输入。 sbit adDO =P3^3。 //ADC0832 的数据输出。 sbit adCLK =P3^0。 //ADC0832 时钟信号。 uchar getdat。 //获取 ADC 转换回来的值。 void display(uchar shi,uchar ge)。 void delay(uint z)。 void keyscan()。 void init()。 uchar adc0832(unsigned char channel)。 //主程序 ; void main() { init()。 //初始化子程序 ; keyscan()。 while(1) { light=1。 //光线初始化为 0。 if(light==0) { getdat=adc0832(1)。 display(temp/10,temp%10)。 //显示数字; if (getdat120) //声音超过 后灯亮。 { shi=temp/10。 //取出十位数字; ge=temp%10。 //取出个位数字; display(shi,ge)。 //显示数字; TR0=1。 //启动定时器 0; if(aa==16) { open=0。 //开启照明灯; aa=0。 temp。 //倒计时; if(temp==1) { 西北民族大学学士学位论文 —————————————————————————————————————————————— 17 temp=0。 open=1。 //关闭照明灯; } } } } } } //延时函数; void delay(uint z) { uint x,y。 for(x=z。 x0。 x) for(y=125。 y0。 y)。 } //显示数码管内容; void display(uchar shi,uchar ge) { P2=0xfe。 P0=table[shi]。 delay(1)。 P2=0xfd。 P0=table[ge]。 delay(1)。 P2=0xfc。 } void init() { TMOD=0x01。 TH0=(6553650000)/256。 //给定时器 T0 的高 8 位赋初值; TL0=(6553650000)%256。 //给定时器 T0 的低 8 位赋初值; EA=1。 //开 cpu 总中断; ET0=1。 //开 T0 中断; TR0=0。 //关闭定时器 0; IE0=1。 //外中断 0 初始化。 IT0=1。 //下降沿触发。 EX0=1。 light=1。 //光线初始化为 0。 } //T0 中断函数。 void timer0() interrupt 1 { 西北民族大学学士学位论文 —————————————————————————————————————————————— 18 TH0=(6553650000)/256。 //赋初值; TL0=(6553650000)%256。 aa++。 } //外中断 0 函数。 void int0() interrupt 0 { light=0。 } //键盘扫描函数。 void keyscan() { if(key1==0) { delay(5)。 //消抖; if(key1==0) //按下 key1 灯亮时间为 10s; { temp=10。 //10s 延时; } } if(key2==0) { delay(5)。 //消抖; if(key2==0) //按下 key2 灯亮时间为 20s; { temp=20。 } } if(key3==0) { delay(5)。 //消抖; if(key3==0) //按下 key3 灯亮时间为 30s; { temp=30。 } } } uchar adc0832(unsigned char ch) //AD 转换,返回结果。 { uchar i=0。 uchar j。 uint dat1=0。 uchar dat2=0。 if(ch==0)ch=2。 西北民族大学学士学位论文 —————————————————————————————————————————————— 19 if(ch==1)ch=3。 adDI=1。 _nop_()。 _nop_()。 adCS=0。 //拉低 CS 端。 _nop_()。 _nop_()。 adCLK=1。 //拉高 CLK 端。 _nop_()。 _nop_()。 adCLK=0。 //拉低 CLK 端 ,形成下降沿 1。 _nop_()。 _nop_()。 adCLK=1。 //拉高 CLK 端。 adDI=champ。 0x1。 _nop_()。 _nop_()。 adCLK=0。 //拉低 CLK 端 ,形成下降沿 2。 _nop_()。 _nop_()。 adCLK=1。 //拉高 CLK 端。 adDI=(ch1)amp。 0x1。 _nop_()。 _nop_()。 adCLK=0。 //拉低 CLK 端 ,形成下降沿 3。 adDI=1。 //控制命令结束。 _nop_()。 _nop_()。 dat1=0。 for(i=0。 i8。 i++) { dat1|=adDO。 //收数据。 adCLK=1。 _nop_()。 _nop_()。 adCLK=0。 //形成一次时钟脉冲。 _nop_()。 _nop_()。 dat1=1。 if(i==7)dat1|=adDO。 } for(i=0。 i8。 i++) { j=0。 西北民族大学学士学位论文 —————————————————————————————————————————————— 20 j=j|adDO。 //收数据。 adCLK=1。 _nop_()。 _nop_()。 adCLK=0。 //形成一次时钟脉冲。 _nop_()。 _nop_()。 j=j7。 dat2=dat2|j。 if(i7)dat2=1。 } adCS=1。 //拉低 CS 端。 adCLK=0。 //拉低 CLK 端。 adDO=1。 //拉高数据端 ,回到初始状态。 dat1=8。 dat1|=dat2。 return(dat1)。 } 本设计的程序是采用 C 语言来编写,并且通过单片机 Proteus 仿真软件对程序进行仿真。 Proteus 软件中的 ISIS 模块是电子系统仿真平台软件,主要完成电路原 理图的绘制与仿真。 硬件仿真图如 41。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。