单片机程序源代码
单片机源代码

num=0;
while(1)
{
p2_0=num;
}
}
void int_1()interrupt 3
{
unsigned char n;
TH1=0x3c;
TL1=0xb0;
TR1=1;
n++;
if(n==10)
{
num=~num;
n=0;}
}
左右跑马灯
for(j=255;j>0;j--);
}
二进制加法实验
#include<reg52.h>
void delay(unsigned int i);//声明延时 函数
main()
{
unsigned char Num=oxff;
while(1)
{
p2=Num;
delay(1000);
#include<Function.h>
bit ISendstr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no)
{
unsigned char i;
start_12c();//启动总线
sendByte(sla);//发送器件地址
SendByte(suba);//发送器件子地址
if(ack==0)return(0);
for(i==o;i<no;i++)
{
SendByte(*s);//发送数据
if(ack==0)return(0);
单片机程序流程图及源代码

单片机上机实验报告【实验一】端口实验,掌握通过端口编程实现数据输出和输入的方法,并观察结果。
实验内容:1)输出实验:假定4个端口全部连接发光二极管,编程实现所有发光二极管同时亮,延迟一定时间(自定)后,又同时灭,如此循环。
2)输入:从P0口输入某个数据到累加器A,打开观察窗口观察数据是否进入累加器A。
实现方式:通过peripherals实现端口数据观察实验。
程序流程图:将P0到P3端口先赋值为0,调用延迟后,再赋1,然后循环执行。
源代码:ORG 0000H ;程序入口地址LJMP MAIN ;跳转到主程序ORG 0300H ;主程序地址MAIN:MOV P0,#00H;MOV P1 ,#00H;MOV P2 ,#00H;MOV P3 ,#00H ;P0~P3均赋值为0ACALL DEL;调用延迟MOV P0 ,#0FFH;MOV P1 ,#0FFH;MOV P2 ,#0FFH;MOV P3 ,#0FFH;P0~P3均设为1MOV A,P0;将P0口值赋给累加器ACALL DEL;AJMP MAIN;跳转到主程序入口ORG 0200H;延迟程序入口地址DEL:MOV R5,#04H;寄存器实现延迟,F3:MOV R6,#0FFH;若主频为12MHZ则F2:MOV R7,#0FFH;延时为256*256*4F1:DJNZ R7,F1;0.26S,人眼可分辨DJNZ R6,F2;DJNZ R5,F3;RET;从延迟程序返回END;结束3.假设P0口外接一个数码管(共阴),如图,请在数码管上轮流显示数字0~9(采用软件延时)。
程序流程图:将数码管的真值编码0~9依次赋给P0并调用延迟,然后循环运行程序即可。
源代码:ORG 0000H; 程序入口SJMP MAIN; 跳转到主程序ORG 0300H; 主程序入口地址MAIN:MOV P0,#0FCH; 将数码管0的编码赋给P0口ACALL DELAY; 调用延迟,使数码管亮0持续0.33SMOV P0,#60H; show 1ACALL DELAY;MOV P0,#0DAH; show 2ACALL DELAY;MOV P0,#0F2H; show 3ACALL DELAY;MOV P0,#66H; show 4ACALL DELAY;MOV P0,#0B6H; show 5ACALL DELAY;MOVP0,#0BEH; show 6ACALL DELAY;MOV P0,#0E0H; show 7ACALL DELAY;MOV P0,#0FEH; show 8ACALL DELAY;MOV P0,#0F6H; show 9ACALL DELAY;AJMP LOOP; 跳转到主程序入口ORG 0200H; 延迟程序入口DEL:MOV R5,#05H; 采用软件延迟,若主频为12MHz,则DEL1:MOV R6,#0FFH; 定时时间为256*256*5*1uS=0.33S,DEL2:MOV R7,#0FFH; 人眼可分辨。
基于51单片机的CAN通讯源代码

EA=1;
}
/////////////////////////////////////////////////////////////
void can_rcv_prg(void)
{can_over_prg();}
if(_testbit_(rcv_flag)) //can总线接收数据
{can_rcv_prg();}
if(_testbit_(send_flag)) //can总线发送数据
*说明: CAN控制器进入复位工作模式 *
************************************************************************/
bit BCAN_ENTER_RETMODEL(void)
for(j=2;j<10;j++) //发送8组数据到串口
{
SBUF=rcv_data[j];
while(TI==0)
{}
TI=0;
}
ES=1; //串口中断开放
void T1_int(void);
void Sja_1000_Init(void);
//************************变量定义*****************************//
unsigned char data send_data[10],rcv_data[10]; //发送和接收数组定义
/*RS232_basiccan.c*/
#include<REG52.H>
#include <intrins.h>
STCCAS单片机各个模块程序代码

//**************************************************************************** //// STC12C5A60S2可编程时钟模块////// 说明:STC12C5A60S2单片机有三路可编程时钟输出CLKOUT0/T0/P3.4// CLKOUT1/T1/P3.5、CLKOUT2/P1.0//// 涉及寄存器:AUXR(辅助寄存器)、WAKE_CLKO(时钟与系统掉电唤醒控制寄存器) // BRT(独立波特率发生器定时器寄存器)//// 程序说明:// 本程序可选实现P3.4输出CLKOUT0时钟、P3.5输出CLKOUT1时钟// P1.0输出CLKOUT2时钟//////************************************************************************** **//#include <STC12C5A60S2.H>#include <intrins.h>//#define Port_BRT //如果想测试独立波特率发生器时钟输出请打开此句//若想测试CLKOUT1和CLKOUT0请注释此句#ifdef Port_BRT /*条件编译独立波特率发生器时钟输出*///*********************************//// CLKOUT2时钟初始化 ////*********************************//void CLKOUT_init(void){WAKE_CLKO = 0x04; //Bit2-BRTCLKO 允许P1.0配置为独立波特率发生器的时钟输出//BRT工作在1T模式下时的输出频率 = Sysclk/(256-BRT)/2 //BRT工作在12T模式下时输出频率 = Sysclk/12/(256-BRT)/2 AUXR = 0x14; //Bit4-BRTR 允许独立波特率发生器运行//Bit2-BRTx12 BRT工作在1T模式下BRT = 0xff; //更改该寄存器的值可实现对输出的时钟频率进行分频}#else /*条件编译CLKOUT0时钟输出*///*********************************//// CLKOUT0时钟和CLKOUT1初始化 ////*********************************//void CLKOUT_init(void){WAKE_CLKO = 0x03; //允许将P3.4/T0脚配置为定时器0的时钟输出CLKOUT0//T0工作在1T模式时的输出频率 = SYSclk/(256-TH0)/2//T0工作在12T模式时的输出频率 = SYSclk/12/(256-TH0)/2 //1T指的是每1个时钟加1,是普通C51的12倍//12T指的是每12个时钟加1与普通C51一样//允许将P3.5/T1脚配置为定时器1的时钟输出CLKOUT1,只能工作在定时器模式2下//T1工作在1T模式时的输出频率 = SYSclk/(256-TH0)/2//T1工作在12T模式时的输出频率 = SYSclk/12/(256-TH0)/2 //1T指的是每1个时钟加1,是普通C51的12倍//12T指的是每12个时钟加1与普通C51一样AUXR = 0xc0; //T0定时器速度是普通8051的12倍,即工作在1T模式下//T1定时器速度是普通8051的12倍,即工作在1T模式下TMOD = 0x22; //定时器0工作模式为方式2,自动装载时间常数//定时器1工作模式为方式2,自动装载时间常数TH0 = 0xff; //更改该寄存器的值可实现对输出的时钟频率进行分频TL0 = 0xff;TH1 = 0xff; //更改该寄存器的值可实现对输出的时钟频率进行分频TL1 = 0xff;TR1 = 1;TR0 = 1;}#endif//**********************************//// 主程序////**********************************//void main(){CLKOUT_init();while(1);}//**************************************************************************** //// STC12C5A60S2系统时钟模块////// 说明: STC12C5A60S2单片机有两个时钟源,内部R/C振荡时钟和外部晶体时钟// 出厂标准配置是使用外部晶体或时钟////// 涉及寄存器:CLK_DIV(时钟分频寄存器)// 由该寄存器的Bit0-2组合可实现对时钟源进行0、2、4、8、16 // 32、64、128分频// //// 程序说明:// 对外部时钟进行分频得到Sysclk,然后经过P1.0的独立波特率// 时钟输出功能Sysclk/2输出时钟频率//**************************************************************************** //#include <STC12C5A60S2.h>#include <intrins.h>#define Bus_clk 12 //若要修改系统时钟直接在此处修改//12 为 12M 的sysclk//6 为 6M 的sysclk//3 为 3M 的sysclk//1500 为 1.5M 的sysclk//750 为 750kHz 的sysclk//375 为 375kHz 的sysclk//187500 为 187.5kHz 的sysclk//93750 为 93.75kHz 的sysclk//*********************************************//// 系统时钟初始化 ////*********************************************//void Sysclk_init(void){WAKE_CLKO = 0x04; //配置P1.0口为频率输出AUXR = 0x14; //允许波特率时钟工作//工作模式为1TBRT = 0xff;#if( Bus_clk == 12 )CLK_DIV = 0x00;#elif( Bus_clk == 6 )CLK_DIV = 0x01;#elif( Bus_clk == 3 )CLK_DIV = 0x02;#elif( Bus_clk == 1500 )CLK_DIV = 0x03;#elif( Bus_clk == 750 )CLK_DIV = 0x04;#elif( Bus_clk == 375 )CLK_DIV = 0x05;#elif( Bus_clk == 187500 )CLK_DIV = 0x06;#elif( Bus_clk == 93750 )CLK_DIV = 0x07;#endif}//**********************************************//// 主程序////**********************************************//void main(){Sysclk_init();while(1);}//**************************************************************************** //// STC12C5A60S2系统省电模块////// 说明: STC12C5A60S2单片机有三种省电模式以降低功耗.空闲模式,低速模式// 掉电模式////// 涉及寄存器:PCON(电源控制寄存器)// Bit0 - IDL 控制单片机进入IDLE空闲模式// Bit1 - PD 控制单片机进入掉电模式// //// 程序说明:程序实现让单片机先工作一阵子(通过P0^3指示灯显示)// 然后进入掉电状态,利用外部中断0口来唤醒单片机工作// 唤醒后单片机将通过P0^0-3口的灯闪烁显示开始工作////************************************************************************** **//#include <STC12C5A60S2.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intuchar Power_Down_Flag = 0; //进入掉电状态标志sbit Chip_Start_LED = P0^0; //单片机开始工作指示灯sbit Power_Down_LED_INT0 = P0^1; //INT0口掉电唤醒指示灯sbit N_Power_Down_LED_INT0 = P0^2; //INT0口没有唤醒指示灯sbit Normal_Work_LED = P0^3; //正常工作指示灯sbit Power_Down_Wakeup_INT0= P3^2; //外中断唤醒输入口void Delay_ms( uint time );void Normal_work(void);void Intp_init(void);void After_Powr_Down(void);//***********************************//// 软件延时 ////***********************************//void Delay_ms( uint time ){uint t; //延时时间 = (time*1003+16)us while(time--){for( t = 0; t < 82; t++ );}}//***********************************//// 正常工作指示//***********************************//void Normal_work(void){Normal_Work_LED = 1;Delay_ms(500);Normal_Work_LED = 0;Delay_ms(500);}void After_Power_Down(void){uchar i ;for( i = 0; i < 100; i++ ){P0 = 0x0f;Delay_ms(500);P0 = 0x00;Delay_ms(500);}}//***********************************//// 中断初始化 ////***********************************//void Intp_init(void){IT0 = 0; //外部中断源0为低电平触发EX0 = 1; //允许外部中断EA = 1; //开总中断}//***********************************//// 主程序 ////***********************************//void main(){uchar j = 0;uchar wakeup_counter = 0; //记录掉电次数P0 = 0x00;Chip_Start_LED = 1; //单片机开始工作Intp_init(); //外中断0初始化while(1){P2 = wakeup_counter;wakeup_counter++;for( j = 0; j < 250; j++ ){Normal_work(); //系统正常工作指示}Power_Down_Flag = 1; //系统开始进入掉电状态PCON = 0x02;_nop_();_nop_();_nop_();_nop_();After_Power_Down(); //掉电唤醒后}}//**********************************//// 中断服务//**********************************//void INT0_Service(void) interrupt 0{if( Power_Down_Flag ) //掉电唤醒状态指示 {Power_Down_Flag = 0;Power_Down_LED_INT0 = 1;while( Power_Down_Wakeup_INT0 == 0 ){_nop_(); //等待高电平}Power_Down_LED_INT0 = 0;}else //未掉电状态{N_Power_Down_LED_INT0 = 1; //不是掉电唤醒指示while( Power_Down_Wakeup_INT0 == 0 ){_nop_();}N_Power_Down_LED_INT0 = 0;}}//**************************************************************************** //// STC12C5A60S2 A/D转换模块////// 说明: STC12C5A60S2单片机有8路10位高速AD转换器,P1^0-P1^7//// 涉及寄存器:P1ASF(模拟功能控制寄存器)、ADC_CONTR(ADC控制寄存器)// ADC_RES、ADC_RESL(转换结果寄存器)//// 注意: 1、初次打开内部A/D模拟电源需适当延时等内部模拟电源稳定后,再启动A/D转换// 启动A/D后,在转换结束前不改变任何I/O口的状态,有利于高精度A/D 转换// 若能将定时器/串行/中断系统关闭更好。
单片机的温度采集系统 源代码

dat=DS;
i=8;while(i>0)i--;
return(dat);
}
void tmpwritebyte(uchar dat) //写一个字节到DS18B20里
{
uint i;uchar j;bit testb;
for(j=1;j<=8;j++)
temp=tt*10+0.5; //放大十倍,将小数点后第一位转换为可显示数字,再四舍五入
return temp;
}
uchar tmpread(void) //读一个字节
{
uchar i,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tmpreadbit();
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DS=P3^3; //定义DS18B20接口
int temp; //全局温度变量
{
dsreset(); //初始化DS18B20
tmpwritebyte(0xcc); //跳过序列号命令
tmpwritebyte(0x44); //发送温度转换命令
}
int tmp() //获得温度
{
float tt;uchar a,b;
dsreset();
{
P2=0; //LED段选,共阴极 送1点亮某段
52单片机源程序C语言版

IT0=0; EX0=1; wela=1; P0=0x00; wela=0; while(1) {
for(num=0;num<16;num++) {
dula=1; P0=table[num]; dula=0; delay(200); } } }
{ 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; P1=j; } } 五、数码管试验 #include<reg52.h> sbit dula=P2^6; sbit wela=P2^7; unsigned char num; unsigned code table[]= {0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void delay(unsigned int y) { unsigned int a,b; for(a=y;a>0;a--) for(b=0;b<500;b++); } void main() { EA=1;
//广告灯向左移动移动函数
{
a=temp<<count;
b=temp>>(8-count);
P1=a|b; }
main() {
count=0; //初始华参数设置 temp=0xfe; P1=0xff; P1=temp; while(1) //永远循环,扫描判断按键是否按下 {
51单片机C语言程序设计源代码

新概念51单片机C语言教程----入门、提高、开发、拓展全攻略郭天祥编著电子工业出版社例2.2.1编写程序,点亮第一个发光二极管(part2_1.c P27)#include <reg52.h> //52系列单片机头文件sbit led1=P1^0; //声明单片机P1口的第一位void main() //主函数{led1=0; /*点亮第一个发光二极管*/}例2.2.2编写程序,点亮P1口的若干二极管(part2_2.c P39)#include <reg52.h> //52系列单片机头文件void main() //主函数{P1=0xaa;//while(1);}例2.5.1利用for语句延时特性,编写第一个发光二极管以间隔1S亮灭闪动的程序(part2_3.c P42)#include <reg52.h> //52系列单片机头文件#define uint unsigned int //宏定义sbit led1=P1^0; //声明单片机P1口的第一位uint i,j;void main() //主函数{while(1) //大循环{led1=0; /*点亮第一个发光二极管*/for(i=1000;i>0;i--) //延时for(j=110;j>0;j--);led1=1; /*关闭第一个发光二极管*/for(i=1000;i>0;i--) //延时for(j=110;j>0;j--);}}- 2 - 例2.6.1编写程序使第一个发光二极管以间隔500ms亮灭闪动。
(part2_4.c P48)#include <reg52.h> //52系列单片机头文件#define uint unsigned int //宏定义sbit led1=P1^0; //声明单片机P1口的第一位void delay1s(); //声明子函数void main() //主函数{while(1) //大循环{led1=0; /*点亮第一个发光二极管*/delay1s(); //调用延时子函数led1=1; /*关闭第一个发光二极管*/delay1s(); //调用延时子函数}}void delay1s() //子函数体{uint i,j;for(i=500;i>0;i--)for(j=110;j>0;j--);}例2.7.1编写程序使第一个二极管以亮200ms、灭800ms的方式闪动。
单片机程序源代码

第二章任务一:闪烁广告灯的设计利用89c51单片机的端口控制两个LED(D0和D1),编写程序,实现两个LED互闪。
#include<reg52.h>#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<reg52.h>#include <intrins.h>#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){//P1=temp;//delayms(500);P0=_crol_(P0,1);delayms(250);}temp=0x7f;while(P0!=0xfe){P0=temp;delayms(500);temp=_cror_(temp,1);}}}任务三:拉幕式与闭幕式广告灯的设计利用89c51单片机的P0端口实现8个LED D0~D7的拉幕式与闭幕式广告灯设计。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章任务一:闪烁广告灯的设计利用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数码管显示出来。