第二章任务一:闪烁广告灯的设计利用89c51单片机的端口控制两个LED(D0和D1),编写程序,实现两个LED互闪。
#include<>#define uint unsigned int#define uchar unsigned charsbit LED1=P0^0;sbit LED2=P0^1;void delayms(uint ms){uint i;while(ms--){for(i=0;i<120;i++);}}void main(){while(1){LED1=0;LED2=1;delayms(500);LED1=1;LED2=0;delayms(500);}}任务二:流水广告灯的设计利用89c51单片机的端口控制8个LED(D0~D7)循环点亮,刚开始时D0点亮,延时片刻后,接着D1点亮,然后依次点亮D2->D3->D4->D5 ->D6->D7 ,然后再点亮D7->D6->D5->D4 ->D3->D2->D1->D0,重复循环。
#include<>#include <>#define uint unsigned int#define uchar unsigned charuint i;uchar temp;uint a[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};void delayms(uint ms){while(ms--){ uint j;for(j=0;j<120;j++);}}void main(){while(1){P0=0xfe;while(P0!=0x7f){7f89c89c0f89c0a0f7f0f0f0f7f7f2L3f4f7f6f7fDelay==0) break;else{sound(&music[n]);n++ ;}}}void main(){init();while(1){if(key==0){delayms(5);play(table1);}SPEAKER=1;}}void inter() interrupt 1{TH0 = ReloadH;TL0 = ReloadL;SPEAKER = !SPEAKER; //音乐声频的半个波}(3)#include<>//头文件#define uint unsigned int#define uchar unsigned char//宏定义sbit beep=P1^0;//按键位声明void Beep() //“叮咚”子函数{uint i,j;for(i=300;i;i--)//持续时间{beep=~beep;for(j=240;j;j--);//频率}for(i=200;i;i--)//持续时间{beep=~beep;for(j=180;j;j--);//频率}}void init() //初始化子函数{EA=1; //打开总中断TMOD=0x05;//设置计数器0 工作方式1ET0=1; //打开计数器0中断TR0=1;//启动定时器0TH0=0xff;TL0=0xff;//计数器赋初值}void beep_interrupt() interrupt 1 //计数器0中断服务子程序{TH0=0xff;TL0=0xff;//计数器初值Beep();//调用“叮咚”子函数}void main()//主函数{init();//调用初始化函数while(1);//等待按键按下}任务七:速度可调流水灯控制假设单片机晶振频率为12MHz,单片机P0口外接8只LED,外接按键K1,外接按键K2。
编写程序,每次按下按键K1时,加快8只LED的流水显示速度;每次按下按键K2时,降低8只LED的流水显示速度。
#include<>#define uint unsigned int#define uchar unsigned charuchar table[15]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};uint count,i,num;void int_int(){EA=1;EX0=1;//允许外部中断EX1=1;IT0=1;//下降沿有效IT1=1;TL0=(65535-50000)%256;TH0=(65535-50000)/256;TMOD=0X01;//方式TR0=1;ET0=1;num=10000;}void key1_1() interrupt 0{num=num-2000;if(num<=2000)num=2000; }void key2_2() interrupt 2{num=num+2000;if(num>=60000)num=60000;}void timer_0() interrupt 1 {TL0=(65535-num)%256;TH0=(65535-num)/256;count++;if(count==20){count=0;if(i!=15){P0=table[i];i++;}elsei=1;}}void main(){int_int();while(1);}(2)#include<>//#define uint unsigned int#include<>int num=0;int time=0;int aa=0xfe;void init(){EA=1; //打开总中断ET0=1;//打开定时器0中断TR0=1; //启动定时器0TMOD=0x01;//设置定时器0工作方式1TH0=(65536-50000)/256;//高8位赋初值TL0=(65536-50000)%256;//低8位赋初值num=0;//num=58;}void Incre_time() interrupt 0{time+=2;}void Decre_time() interrupt 2{time-=2;}void timer0() interrupt 1{num++;TH0=(65536-50000)/256;TL0=(65536-50000)%256;}void main(){init();P0=aa ;while (1){ P0=0xfd ;//P0=aa;if(num==(10+time)){aa=_crol_(aa,1);num=0;}}}任务八:PWM调光假设单片机晶振频率为12MHz,单片机P0,P2口作为输出口,外接一个2位LED数码管,外接LED,外接按键K1,外接按键K2,外接蜂鸣器。
编写程序,每次按下按键K1时,LED 数码管显示加1,LED变暗;每次按下按键K2时,LED数码管显示数据减1,LED变亮;当LED数码管显示为0A时,再次按下按键K1时,则蜂鸣器发出报警声。
任务九:简单电子频率计假设单片机晶振频率为12MHz,单片机P0,P2端口作为输出口,外接4位LED数码管。
编写程序,测量由输入脉冲的频率。
#include<>#define uint unsigned int#define uchar unsigned charuchar table[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};uint num=0,num0=0;num1=0,num2=0,num3=0,count=0,new_num=0;void delayms(uint ms){uint i;while(ms--)for(i=0;i<120;i++);}void int_int(){EA=1;EX1=1;IT1=1;TMOD=0X01;ET0=1;TL0=(65535-62500)%256;TH0=(65535-62500)/256;}void display(){num3=new_num/1000;num2=(new_num%1000)/100;num1=(new_num%100)/10;num0=new_num%10;P2=0x08;P0=table[num0];delayms(1);P2=0X04;P0=table[num1];delayms(1);P2=0X02;P0=table[num2];delayms(1);P2=0X01;P0=table[num3];delayms(1);}void key_key() interrupt 2{num++;if(num==1)TR0=1;}void timer() interrupt 1{TL0=(65535-62500)%256;TH0=(65535-62500)/256;count++;if(count==16)//定时时间1s{count=0;new_num=num;num=0;TR0=0;}}void main(){int_int();while(1){display();}}第七章任务一:甲机通过串口控制乙机LED显示状态单片机甲机P1端口外接8位拨码开关;乙机P0外接8只LED。
要求使用单片机串行通信,在查询状态下使单片机乙机8只LED能够显示单片机甲机8位拨码开关的状态。
任务二:甲机通过串口控制乙机计时单片机甲机的外接按键K1,外接按键;单片机乙机P0、P2端口作为输出口,外接一个2位LED数码管。
要求使用单片机串行通信,使甲机的按键K1作为乙机计时的“开始/暂停”控制按键,甲机的按键K2作为乙机计时的“复位”控制按键。
任务三:单片机双机通信单片机甲机的外接按键K2,P0、P2端口作为输出口,外接一个2位LED数码管;乙机外接按键K1,P0端口外接8位LED。
要求使用单片机串行通信,甲机按键K2每按下1次,乙机的LED移位1次;乙机K1每按下1次,甲机的LED数码管加1显示。
任务四:单片机与PC通信单片机通过串行口向PC发送字符串,且能接收由PC发送过来的0~9的数字,并将接受的数字通过LED数码管显示出来。