《单片机原理与应用》大作业班级:1411电科姓名:马强学号:2016511010《单片机原理与应用》大作业(一)作业内容:基于STC89C51单片机设计一个流水灯项目。
实现功能:(1)实现LED灯的点亮和熄灭。
(2)实现LED灯的依次点亮。
(3)实现LED灯的循环点亮。
基于以上要实现的目标我进行了设计和分析,代码如下:#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intvoid delay(uint);uchar tmp,i;void main(){ tmp=0x7f;P0=tmp;for(i=0;i<7;i++){tmp=_cror_(tmp,1);delay(500);P0=tmp;}P0=0xfe;for(i=0;i<7;i++){tmp=_crol_(tmp,1);delay(500);P0=tmp;}}void delay(z){ uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}仿真结果:点亮一个LED依次点亮循环点亮结论:《单片机原理与应用》大作业(二)作业内容:基于STC89C51单片机设计一个按键控制数码管项目。
实现功能:(1)数码管的点亮。
(2)按键按下检测。
(3)按键“K1”按下数码管以2Hz的频率循环显示0 ~ F,按键“K2”按下则数码管停止自动循环显示并以当前值为基础按下加一。
基于以上要实现的目标我进行了设计和分析,代码如下:、/***************************************************************** *****/#include<reg52.h>#define uchar unsigned charuchar codetable[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46 ,0x21,0x06,0x0e};void k1();void k2();sbit key1=P3^0;sbit key2=P3^1;unsigned int i;void delay(unsigned int xms){unsigned int x, y;for(x=xms;x>0;x--)for(y=110;y>0;y--);}void delay10ms(unsigned int c){unsigned char a, b;for (;c>0;c--){for (b=38;b>0;b--){for (a=130;a>0;a--);}}}void k1(){if(key1 == 0){delay10ms(1);for(i=0;i<=15;i++){P2=table[i];if(key2==0)break;delay(500);if(i == 15){i = 0;}}}}void k2(){if(key2 == 0){P2=table[i];// delay(100);i++;while(key2 == 0);}if(i >= 15){i = 0;}}void main(){while(1){k1();k2();}}仿真结果:结论:《单片机原理与应用》大作业(三)作业内容:基于STC89C51单片机设计一个AD转换项目。
实现功能:(1)使用ADC0808芯片对模拟信号进行采样。
(2)使用6位数码显示AD转换结果。
基于以上要实现的目标我进行了设计和分析,代码如下:/**********************************************************************/#include<reg51.h>#include<absacc.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define PA8255 XBYTE[0x4000]#define PB8255 XBYTE[0x4001]#define PC8255 XBYTE[0x4002]#define PD8255 XBYTE[0x4003]#define IN4_ADC0808 XBYTE[0x8004]sbit wr_ADC0808 = P3^6 ;sbit rd_ADC0808 = P3^7 ;sbit EOC = P1^0 ;uchar LED_DATA[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x 86,0x8e,0xbf,0xff};uchar LED_NUM[]={0xFE, // LED10xFD, // LED20xFB, // LED30xF7, // LED40xEF, // LED50xDF // LED6};uchar KEY_number[]={0x77,0xb7, 0xd7,0xe7, 0x7b, 0xbb, 0xdb, 0xeb, 0x7d, 0xbd,0xdd, 0xed, 0x7e, 0xbe, 0xde, 0xee};void delayms(uint xms){uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}void ini_8255(){PD8255 = 0x81;}void display(uchar display_num, uchar display_data){if ((display_num >= 0x01 )&&(display_num<=0x06)){uchar i = 1;PA8255 = LED_NUM[display_num - i];LED1PB8255 = LED_DATA[display_data];delayms(5);}}///////////////////////////////// 以下为主程序////////////////////////////////////// void main(){uchar key1,key2,key3,key4;key2 = 0;ini_8255();while(1){IN4_ADC0808 = 0;while(EOC!=0);key4 = IN4_ADC0808;key3 = ( key4 / 100);key2 = (key4/10)%10 ;key1 = (key4%10) ;display(1, key3);display(2, key2);display(3, key1);}}仿真结果:结论:《单片机原理与应用》大作业(四)作业内容:基于STC89C51单片机设计一个DA转换项目。
实现功能:(1)使用DAC0832芯片进行数字量=>模拟量。
(2)使用示波器显示DA转换结果。
基于以上要实现的目标我进行了设计和分析,代码如下:/******************************************************* ***************/#define uchar unsigned char#define unsinged int#define DAC0832 XBYTE[0x6000]uchar i =0;uchar flag= 0;void delay20ms(void){unsigned char a,b;for(b=215;b>0;b--)for(a=45;a>0;a--);}void delay78us(void){unsigned char a,b;for(b=1;b>0;b--)for(a=35;a>0;a--);}void InitTimer1(void){TMOD = 0x10;TH1 = 0x67;TL1 = 0x6A;EA = 1;ET1 = 1;TR1 = 1;}///////////////////////////////////////////// void main(){InitTimer1();while(1){DAC0832 = 0;delay20ms();DAC0832 = 0xff;delay20ms();for(i=0;i<=0xff;i++)// {// DAC0832 = i; // delay78us();// }//for(i=0;i<0xff;i++) // {// DAC0832 = i; // delay78us();// }// for(i=0xff;i>0;i--) // {// DAC0832 = i; // delay78us();// }// if (flag == 0) // {// i++;// DAC0832 = i; // }// else// {// i--;// DAC0832 = i;// }}}void int_timer1(void) interrupt 3 {TH1 = 0x67;TL1 = 0x6A;if (i==256){flag = 1;}if (i==0){flag = 0;}}仿真结果:AD转换结果结论:所用元器件参数STC89C51STC89C51RC是采用8051核的ISP(In System Programming)在系统可编程芯片,最高工作时钟频率为80MHz,片内含8K Bytes的可反复擦写1000次的Flash只读程序存储器,器件兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,具有在系统可编程(ISP)特性,配合PC端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。
STC89C51RC系列单片机是单时钟/机器周期(1T)的兼容8051 内核单片机,是高速/ 低功耗的新一代8051 单片机,全新的流水线/精简指令集结构,内部集成MAX810 专用复位电路。
ADC0808ADC0808是采样分辨率为8位的、以逐次逼近原理进行模/数转换的器件。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。