单片机各种初始化程序-推荐下载
- 格式:pdf
- 大小:166.00 KB
- 文档页数:7
8253、8255A、8259A初始化程序8253的初始化程序1.确定端口地址:0310H、0312H、0314H、0316H2.确定工作方式(假设工作方式为):通道0,方式3通道1,方式1通道2,方式53.确定计数值:通道0:N0=1MHz/2KHz=500通道1:N1=480us/(1/1mhz)=480通道2:N2=264确定控制字:通道0:00110111B通道1:01110011B通道2:10011011B对3个通道的初始化程序如下:;通道0初始化程序MOV DX, 316HMOV AL,00110111BOUT DX,ALMOV DX,310HMOV AL,00HOUT DX, ALMOV AL,05HOUT DX,AL;通道1的初始化程序MOV DX, 316HMOV AL, 001110011B OUT DX, ALMOV DX, 312HMOV AL, 80HOUT DX, ALMOV AL, 04HOUT DX, AL;通道2初始化程序MOV DX, 316HMOV AL, 10011011B OUT DX, ALMOV DX, 314HMOV AL,26HOUT DX,AL; MOV AL,00H; OUT DX,AL8255A初始化程序对8255A进行初始化,要求端口A工作于方式1,输入;端口B 工作于方式0,输出;端口C的高4位配合端口A工作,低4位为输入。
1.确定控制字端口地址:006CH。
2.确定工作方式:端口A,工作方式1,输入端口B,工作方式0,输出端口C,C0为输入,C4为配合工作3.确定方式选择控制字:1 011 100 1H(B9H)对3个端口的初始化程序如下MOV AL,B9HMOV DX,006CHOUT DX,AL另一个8255A初始化程序已知某8255A在系统中占用88~8BH号端口地址,现欲安排其PA,PB,PC口全部为输出,PA,PB口均工作于方式0模式,并将PC6置位,使PC3复位,试编写出相应的初始化程序:1.确定端口地址控制字以及PC口置位复位端口,8BH2.确定工作方式3.确定方式选择控制字MOV AL,80HOUT 8BH,ALMOV AL,ODHOUT 8BH,ALMOV AL,06HOUT 8BH,AL在8259A内部有两组寄存器:一组为命令寄存器,用于存放CPU写入的初始化命令字ICW1~ICW4(initialization command words);另一组为操作命令寄存器,用于存放CPU写入的操作命令字OCW1~OCW3(operation command words)。
点亮一盏灯#include <REGX51.H>void main(){P0=0;//初始化P0P1=0x80;while(1){P0_4=1;//点亮D0}}闪亮一盏灯#include <REGX51.H>void main(){unsigned int i=0;P0=0;P1=0x0c;//0000 1100P1_2=0;//244使能while(1){P0_4=1;//闪亮D0;1-0-1-0 ……P0_4=0;for(i=100000;i>0;i--);}}循环闪亮#include <REGX51.H>void main(){unsigned int i=0;P0=0;P1=0x0c;//0000 1100P1_2=0;//244使能while(1){P0_4=1;//闪亮D0;1-0-1-0 ……for(i=100000;i>0;i--);P0_4=0;for(i=100000;i>0;i--);P0_5=1;//闪亮D1;1-0-1-0 ……for(i=100000;i>0;i--);P0_5=0;P0_6=1;//闪亮D2;1-0-1-0 ……for(i=100000;i>0;i--);P0_6=0;for(i=100000;i>0;i--);P0_7=1;//闪亮D3;1-0-1-0 ……for(i=100000;i>0;i--);P0_7=0;for(i=100000;i>0;i--);}}循环闪亮#include <REGX51.H>void delay();void main(){P0=0;P1=0x0c;//0000 1100P1_2=0;//244使能while(1){P0_4=1;//闪亮D0;1-0-1-0 ……delay();P0_4=0;delay();P0_5=1;//闪亮D1;1-0-1-0 ……delay();P0_5=0;delay();P0_6=1;//闪亮D2;1-0-1-0 ……delay();P0_6=0;delay();P0_7=1;//闪亮D3;1-0-1-0 ……delay();P0_7=0;delay();}}void delay(){unsigned int i=0;for(i=100000;i>0;i--);}循环闪亮#include <REGX51.H>void delay();void main(){P0=0;P1=0x0c;//0000 1100P1_2=0;//244使能while(1){P0=0x10;//闪亮D0;1-0-1-0 ……delay();P0=0;delay();P0=0x20;//闪亮D1;1-0-1-0 ……delay();P0=0;delay();P0=0x40;//闪亮D2;1-0-1-0 ……delay();P0=0;delay();P0=0x80;//闪亮D3;1-0-1-0 ……delay();P0=0;delay();}}void delay(){unsigned int i=0;for(i=100000;i>0;i--);}循环点亮#include <REGX51.H>void delay();void main(){unsigned char Tab[4]={0x10,0x20,0x40,0x80};P0=0;P1=0x0c;//0000 1100P1_2=0;//244使能while(1){P0=Tab[0];//闪亮D0;1-0-1-0 ……delay();P0=0;delay();P0=Tab[1];//闪亮D1;1-0-1-0 ……delay();P0=0;delay();P0=Tab[2];//闪亮D2;1-0-1-0 ……delay();P0=0;delay();P0=Tab[3];//闪亮D3;1-0-1-0 ……delay();P0=0;delay();}}void delay(){unsigned int i=0;for(i=100000;i>0;i--);}循环点亮#include <REGX51.H>void delay();void main(){unsigned int a=0;unsigned char Tab[4]={0x10,0x20,0x40,0x80};P0=0;P1=0x0c;//0000 1100P1_2=0;//244使能while(1){for(a=0;a<4;a++){P0=Tab[a];//闪亮D0;1-0-1-0 ……delay();P0=0;delay();}}}void delay(){unsigned int i=0;for(i=100000;i>0;i--);}#include <REGX51.H> #include <intrins.h> void delay();void main(){unsigned int a=0;P0=0;P1=0x0c;P1_2=0;while(1){P0=0x10;for(a=0;a<4;a++){delay();P0=_crol_(P0,1);}}}void delay(){unsigned int i=0;for(i=100000;i>0;i--);}数码管点亮5#include <REGX51.H> void delay();void main(){P0=0;P1=0x0c;P0=0x6d;P1_0=1;delay();P1_0=0;delay();P0=0xfe;P1_1=1;delay();P1_1=0;delay();}void delay(){unsigned int i=0;for(i=100000;i>0;i--);}学号#include <REGX51.H> void delay();void main(){P0=0;P1=0x0c; P0=0x3f; P1_0=1; P1_0=0; P0=0x7f; P1_1=1; P1_1=0; delay();P0=0x6f; P1_0=1; P1_0=0; P0=0xbf; P1_1=1; P1_1=0; delay();P0=0x5b; P1_0=1; P1_0=0; P0=0xdf; P1_1=1; P1_1=0;delay(); P0=0x06; P1_0=1; P1_0=0; P0=0xef; P1_1=1; P1_1=0; delay(); P0=0x3f; P1_0=1; P1_0=0; P0=0xf7; P1_1=1; P1_1=0; delay(); P0=0x7d; P1_0=1; P1_0=0; P0=0xfb; P1_1=1; P1_1=0; delay();P0=0x07;P1_0=1;P1_0=0;P0=0xfd;P1_1=1;P1_1=0;delay();P0=0x5b;P1_0=1;P1_0=0;P0=0xfe;P1_1=1;P1_1=0;delay();}void delay(){unsigned int i=0;for(i=100000;i>0;i--);}#include <REGX51.H>void delay();void main(){unsigned int a=0;unsigned char seg[]={0x3f,0x6f,0x5b,0x06,0x3f,0x7d,0x07,0x5b};unsigned char dig[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};for(a=0;a<8;a++){P0=0;P1=0x0c;P0=seg[a];P1_0=1;P1_0=0;P0=dig[a];P1_1=1;P1_1=0;delay();}}void delay(){unsigned int i=0;for(i=1000000000;i>0;i--);}开关K0控制灯#include <REGX51.H>#define uint unsigned int#define uchar unsigned char sbit Key_ce=P1^3;sbit Dig_ce=P1^1;sbit Led_ce=P1^2;void main(){bit Stat=0;P0=0;P1=0x0c;Led_ce=0;while(1){P0_4=Stat;P0=0x0e;Dig_ce=1;Dig_ce=0;Key_ce=0;if(P0_0==0){Stat=~Stat;}Key_ce=1;}}开关K0控制灯#include <REGX51.H>#define uint unsigned int#define uchar unsigned char sbit Key_ce=P1^3;sbit Dig_ce=P1^1;sbit Led_ce=P1^2;void delayms(uint);void main(){bit Stat=0;P0=0;P1=0x0c;Led_ce=0; while(1){P0_4=Stat;P0=0x0e;Dig_ce=1;Dig_ce=0;Key_ce=0;if(P0_0==0){delayms(10);if(P0_0==0){Stat=~Stat;}}Key_ce=1;}}void delayms(uint i){uint j;for(i;i>0;i--)for(j=10;j>0;j--);}#include <REGX51.H>#define uint unsigned int#define uchar unsigned charsbit Key_ce=P1^3;sbit Dig_ce=P1^1;sbit Seg_ce=P1^0;uchar code seg1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c ,0x39,0x5e,0x79,0x71};void delayms(uint);void Keyscan();void main(){P0=0;P1=0x0c;while(1){Keyscan();}}void delayms(uint i){uint j;for(i;i>0;i--)for(j=10;j>0;j--);}void Keyscan(){unsigned char Temp1,Temp2,Keynum; P0=0;Seg_ce=1;Seg_ce=0;P0=0xfe;Dig_ce=1;Dig_ce=0;Key_ce=0;Temp1=P0;Temp1=Temp1&0x0f;if(Temp1!=0x0f){delayms(10);Temp2=P0;Temp2=Temp2&0x0f;if(Temp1==Temp2){switch(Temp2){case 0x0e:Keynum=0;break;case 0x0d:Keynum=1;break;case 0x0b:Keynum=2;break;case 0x07:Keynum=3;break;default:break;}while(Temp2!=0x0f){Temp2=P0;Temp2=Temp2&0x0f;}}}Key_ce=1;P0=seg1[Keynum];Seg_ce=1;Seg_ce=0;P0=0xfe;Dig_ce=1;Dig_ce=0;delayms(1);P0=0;Seg_ce=1;Seg_ce=0;P0=0;P0=0xfd;Dig_ce=1;Dig_ce=0;Key_ce=0;Temp1=P0;Temp1=Temp1&0x0f;if(Temp1!=0x0f){delayms(10);Temp2=P0;Temp2=Temp2&0x0f;if(Temp1==Temp2){switch(Temp2){case 0x0e:Keynum=4;break;case 0x0d:Keynum=5;break;case 0x0b:Keynum=6;break;case 0x07:Keynum=7;break;default:break;}while(Temp2!=0x0f){Temp2=P0;Temp2=Temp2&0x0f;}}}Key_ce=1;P0=seg1[Keynum]; Seg_ce=1;Seg_ce=0;P0=0xfd;Dig_ce=1;Dig_ce=0; delayms(1);P0=0;Seg_ce=1;Seg_ce=0;P0=0;P0=0xfb;Dig_ce=1;Dig_ce=0;Key_ce=0;Temp1=P0;Temp1=Temp1&0x0f;if(Temp1!=0x0f){delayms(10);Temp2=P0;Temp2=Temp2&0x0f;if(Temp1==Temp2){switch(Temp2){case 0x0e:Keynum=8;break;case 0x0d:Keynum=9;break;case 0x0b:Keynum=10;break;case 0x07:Keynum=11;break;default:break;}while(Temp2!=0x0f){Temp2=P0;Temp2=Temp2&0x0f;}}Key_ce=1;P0=seg1[Keynum]; Seg_ce=1;Seg_ce=0;P0=0xfb;Dig_ce=1;Dig_ce=0; delayms(1);P0=0;Seg_ce=1;Seg_ce=0;P0=0;P0=0xf7;Dig_ce=1;Dig_ce=0;Key_ce=0;Temp1=P0;Temp1=Temp1&0x0f; if(Temp1!=0x0f)delayms(10);Temp2=P0;Temp2=Temp2&0x0f;if(Temp1==Temp2){switch(Temp2){case 0x0e:Keynum=12;break;case 0x0d:Keynum=13;break;case 0x0b:Keynum=14;break;case 0x07:Keynum=15;break;default:break;}while(Temp2!=0x0f){Temp2=P0;Temp2=Temp2&0x0f;}}}Key_ce=1;P0=seg1[Keynum];Seg_ce=1;Seg_ce=0;P0=0xf7;Dig_ce=1;Dig_ce=0;delayms(1);}#include <REGX51.H>void delay();void main(){unsigned int a=0;unsigned char seg[]={0x3f,0x6f,0x5b,0x06,0x3f,0x7d,0x07,0x5b};unsigned char dig[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};for(a=0;a<8;a++){P0=0;P1=0x0c;P0=seg[a];P1_0=1;P1_0=0;P0=dig[a];P1_1=1;P1_1=0;delay();}}void delay(){unsigned int i=0;for(i=1000000000;i>0;i--);}开关K0控制灯#include <REGX51.H>#define uchar unsigned char sbit Key_ce=P1^3;sbit Dig_ce=P1^1;sbit Led_ce=P1^2;void main(){bit Stat=0;P0=0;P1=0x0c;Led_ce=0;while(1){P0_4=Stat;P0=0x0e;Dig_ce=1;Dig_ce=0;Key_ce=0;if(P0_0==0){Stat=~Stat;}Key_ce=1;}}中断1.1#include <REGX51.H>void main(){bit Stat=1;P0=0;P1=0x0c;P1_2=0;TH0=0x8a;TL0=0xd0;while(1){P0_4=Stat;TMOD=0x01;TR0=1;if(TF0==1){TF0=0;Stat=~Stat;TH0=0x8a;TL0=0xd0;}}}中断1.2#include <REGX51.H> sbit Stat = P0^4;void main(){P0=0;P1=0x0c;P1_2=0;TH0=0xa8;TL0=0xd0;TMOD=0x01;Stat = 0;IE=0x82;//EA=1;ET0=1TR0=1;while(1){;}}void T0_time() interrupt 1 {TH0=0xa8;TL0=0xd0;Stat=~Stat;}中断2.1#include <REGX51.H> sbit Stat=P0^4;unsigned char a;void main(){P0=0;P1=0x0c;P1_2=0;TH0=0xa8;TL0=0xd0;TMOD=0x01;IE=0x82;//EA=1;ET0=1TR0=1;Stat=0;while(1){if(a == 10){Stat = ~Stat;a = 0;}}}void T0_time() interrupt 1 {a++;TH0=0xa8;TL0=0xd0;}中断2.2#include <REGX51.H>sbit Stat=P0^4;unsigned char a;void main(){P0=0;P1=0x0c;P1_2=0;TH0=(65536-30000)/256;TL0=(65536-30000)%256; TMOD=0x01;IE=0x82;//EA=1;ET0=1TR0=1;Stat=0;while(1){if(a == 10){Stat = ~Stat;a = 0;}}}void T0_time() interrupt 1{a++;TH0=(65536-30000)/256; TL0=(65536-30000)%256; }中断仿真5.3U1#include <REGX51.H> unsigned char i,flag;void delayms(unsigned int x) {unsigned int i,j;for(i=x;i>0;i--)for(j=124;j>0;j--);}void main(){i=0;flag=0;TMOD=0x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;IE=0x82;//EA=1;ET0=1while(1){if(P1_7==0){delayms(10);if(P1_7==0){TR0=1;}}if(flag==1&&i!=100){flag=0;P1_4=~P1_4;}if(i==100){TR0=0;i=0;}}}void T0_time() interrupt 1TH0=(65536-10000)/256;TL0=(65536-10000)%256;i++;flag=1;}中断仿真5.3U2#include <REGX51.H>void main(){TMOD=0x05;TH0=0;TL0=0;TR0=1;while(1){P1=TL0;}。
51单片机程序编写及下载
1,硬件准备
(1)将单片机小系统供电,一般为5V供电
(2)将并口下载线一端连接到电脑机箱后面的并口插槽,一端连接到单片机小系统板的下载口
2,编写程序
(1)打开keil c开发环境
(2)选择project—new project,新创建一个工程,并保存在相应目录下
(3)选择芯片类型,我们这里使用的是at89s52 (4)添加汇编启动代码,点击YES
(5)此时,程序已包含startup.a51的汇编启动代码,主要完成单片机各个寄存器的定义(6)创建c语言程序,点击file—new
(7)编写代码
(8)编写好的文件保存
(9)添加文件到工程(10)选择编写好的文件
(11)此时,在工程文件中,我们可以看到两个文件startup.a51汇编程序和test2.c的c程序(12)选择project—opinions for file test2.c
(13)选择output选项卡
(14)将create hex file 选项选中
(15)将文件编译连接
(16)如果文件没有错误,可以在相应文件夹中看到以下文件
3,下载程序
(1)打开ISPlay.exe应用程序
(2)点击检测器件
(3)点击擦除
(4)点击文件,选择.hex文件
(5)此时,可看到二进制代码
(6)点击autorun,将程序写入单片机。
通用定时器初始化代码//通用定时器3中断初始化//这里时钟选择为APB1的2倍,而APB1为36M//arr:自动重装值。
//psc:时钟预分频数//这里使用的是定时器3!void TIM3_Int_Init(u16 arr,u16 psc){TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能//定时器TIM3初始化TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = T ck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断//中断优先级NVIC设置NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器TIM_Cmd(TIM3, ENABLE); //使能TIMx}。
单片机串口初始化程序1.引言1.1 概述概述:单片机串口(Universal Asynchronous Receiver/Transmitter,简称UART)是一种常见的通信接口,可以通过串口与其他设备进行数据的传输和通信。
在单片机系统中,串口的初始化是非常重要的步骤,它不仅决定了串口通信的可靠性和稳定性,还影响了单片机整体系统的性能和功能。
本文将详细介绍单片机串口初始化的程序,包括串口的基本概念、串口初始化的重要性以及实现串口初始化的方法。
通过阅读本文,读者将了解到串口初始化的必要性,了解如何在单片机系统中进行串口初始化,从而为后续的串口通信提供完善的基础。
在正式进行串口初始化之前,我们需要先了解串口的基本原理和工作原理。
串口是一种异步的通信接口,它使用起停位、数据位、校验位和波特率等参数来进行通信。
单片机通过串口与外部设备进行数据的传输和接收,可以实现与计算机、传感器、LCD显示屏等设备的数据交互。
串口初始化的重要性不容忽视。
在单片机系统中,串口通常用于与其他设备进行数据的传输和通信。
如果串口初始化不正确或不完善,可能会导致数据传输错误、通信失败甚至系统崩溃。
因此,正确地初始化串口成为了保证系统正常运行和稳定通信的关键步骤。
针对串口初始化,本文将介绍一种常用的实现方法。
这种方法需要设置串口的参数,包括波特率、数据位、校验位和停止位等。
同时,还需要配置单片机的引脚和时钟等相关参数,使其能够正确地与外部设备进行串口通信。
本文将通过代码实例的方式,详细介绍串口初始化的具体步骤和方法,供读者参考和借鉴。
总之,本文将全面介绍单片机串口初始化的程序。
通过此文,读者将深入了解串口的基本概念和工作原理,认识到串口初始化的重要性,并学习到一种常用的串口初始化实现方法。
希望本文能为读者提供有益的知识和帮助,为单片机系统的开发和应用提供参考和指导。
1.2文章结构1.2 文章结构本文旨在介绍单片机串口初始化程序的相关知识和实现方法。
51单片机各中断初始化及子程序模板/************************************************************ *51单片机各中断初始化及子程序模板,几乎包括了传统51单片机的全部中断*1、外部中断0*2、定时器中断0*3、外部中断1*4、定时器中断1*5、串行中断*6、定时器中断2---本中断在52时才有*以上所有中断已经在Keil软件环境上经过测试,工作正常*在使用定时中断的时候需要根据实际需要重设定时器的初值和工作方式*在串行通讯中,使用11.0592M晶振,通讯波特率为9600bps*为了保证文件的单一和方便保存,本项目只用了一个文件,没有进行模块化处理,在实际应用中不建议这样做*本程序在UE11.00b下编辑,在KeilV3.23(C8.01)下编译调试*本程序仅供初学者参考使用,细节问题未涉及,在实际项目中请谨慎使用*Author:大灵通*昌宁科技,欢迎您提出宝贵意见!*2006-12-7 15:05,OK!*************************************************************/#include<reg52.h>//如果是使用51单片机,则应该是reg51.h,//且不能使用定时器2#include<intrins.h>//以下两个包含文件在本代码中实际不需要,#include<absacc.h>//但经常用到,所以列出#define uchar unsigned char#define uint unsigned int#define TimeDelay 2//程序所用变量声明bit Time0Int;bit Int0Flag,Int1Flag;uchar Time0Count,Time1Count,Time2Count;uchar ReceiveData;//程序所用函数声明void McuInitial(void);void InitialTime0(void);void InitialTime1(void);void InitialTime2(void);void IntialSerialComm(void);void SerialSend(uchar SendData);void delay(uint n);/************************************************************ *Function: 主函数*parameter:*Return:*Modify:*************************************************************/ void main(void){uchar i;McuInitial();delay(TimeDelay);while(1){if(Int0Flag==1)//各中断的具体处理{Int0Flag = 0;}if(Int1Flag==1){Int1Flag = 0;}if(Time0Count==5){Time0Count = 0;}if(Time1Count==5){Time1Count = 0;}if(Time2Count==5){Time2Count = 0;}SerialSend(i);i++;if(i>=0xff)i=0;}}/*************************************************************Function: 单片机初始化处理*parameter:*Return:*Modify:*************************************************************/ void McuInitial(void){//外部中断0初始化IT0 = 1;EX0 = 1;//外部中断1初始化IT1 = 1;EX1 = 1;InitialTime0();//定时器0初始化// InitialTime1();//定时器1初始化InitialTime2();//定时器2初始化IntialSerialComm();//串行中断初始化,占用定时器1,//如果用串行中断,定时器1不能用于定时EA = 1;//打开中断}/************************************************************ *Function: 定时器1初始化*parameter:*Return:*Modify:*************************************************************/ void InitialTime0 (void){TMOD |= 0x01;//16位定时器TH0 = 0x06;//8msTL0 = 0xed;ET0 = 1;//使能中断TR0 = 1;//打开定时器}/************************************************************ *Function: 定时器1初始化*parameter:*Return:*Modify:*************************************************************/void InitialTime1 (void){TMOD |= 0x10;//16位定时器TH1 = 0x06;//8msTL1 = 0xed;ET1 = 1;//使能中断TR1 = 1;//打开定时器}/************************************************************ *Function: 定时器2初始化,本中断仅在52时才有*parameter:*Return:*Modify:*************************************************************/ void InitialTime2 (void){T2CON=0x04;RCAP2H=0x04;RCAP2L=0x00;ET2 = 1;}/************************************************************ *Function: 串行中断初始化*parameter:*Return:*Modify:*************************************************************/ void IntialSerialComm(void){TMOD |= 0x20;SCON=0xf0;TH1=0xfd;//fdTL1=0xfd;//fdTR1=1;ES=1;}/************************************************************ *Function: 外部中断0中断服务子程序*parameter:*Return:*Modify:*************************************************************/ void Interrupt0 (void) interrupt 0Int0Flag = 1;}/************************************************************ *Function: 外部中断1中断服务子程序*parameter:*Return:*Modify:*************************************************************/ void Interrupt1 (void) interrupt 2{Int1Flag = 1;}/************************************************************ *Function: 定时器0中断服务子程序*parameter:*Return:*Modify:*************************************************************/ void InterruptTime0(void) interrupt 1{TH0 = 0x06;//8msTL0 = 0xed;Time0Count++;}/************************************************************ *Function: 定时器1中断服务子程序*parameter:*Return:*Modify:*************************************************************/ void InterruptTime1(void) interrupt 3{TH1 = 0x06;//8msTL1 = 0xed;Time1Count++;}/************************************************************ *Function: 定时器2中断服务子程序*parameter:*Return:*Modify:*************************************************************/ void InterruptTime2(void) interrupt 5TF2=0;Time2Count++;}/************************************************************ *Function: 串行接收中断服务子程序*parameter:*Return:*Modify:*************************************************************/ void InterruptSerialComm(void) interrupt 4{if(RI){RI = 0;ReceiveData = SBUF;}}/************************************************************ *Function: 串行发送程序*parameter:*Return:*Modify:*************************************************************/ void SerialSend(uchar SendData){SBUF = SendData;while(TI==0);TI = 0;}/************************************************************ *Function: 延时*parameter:*Return:*Modify:*************************************************************/ void delay(uint n){while(n!=0){n--;}。
点亮第一个LED 1月23号#include <reg52.h>sbit led0=P0^0;void main(){led0=0;}___________________________________________________________ ___点亮一排LED#include <reg52.h>void main(){P0=0xaa;//10101010}___________________________________________________________ ___点亮P 2口流水灯 1月26上午方法1 位操作#include <reg52.h>sbit led0=P0^0;sbit led1=P0^1;sbit led2=P0^2;sbit led3=P0^3;sbit led4=P0^4;sbit led5=P0^5;sbit led6=P0^6;sbit led7=P0^7;void delay(void){unsignedchar a,b; for(a=0;a<200;a++) for(b=0;b<200;b++); }void main(){while(1){led0=0;delay();led0=1;delay();led1=0; delay(); led1=1; delay();led2=0; delay(); led2=1; delay();led3=0; delay(); led3=1; delay();led4=0; delay(); led4=1; delay();led5=0;led5=1;delay();led6=0;delay();led6=1;delay();led7=0;delay();led7=1;delay();}}方法2 总线方法#include <reg52.h>#define uchar unsigned char#define uint unsigned intunsignedchartable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};{uchara,b;for(a=0;a<200;a++)for(b=0;b<200;b++);}void main(){uchari;while(1){for(i=0;i<8;i++){P0=table[i];//11111110 delay();}// P0=0xfd;//11111101}}方法三移位流水#include <reg52.h>#define uchar unsigned char#define uint unsigned intvoid delay(void){uchara,b;for(a=0;a<200;a++)for(b=0;b<200;b++);}void main(){uchark,i;while(1){k=0xfe;//11111110 << for(i=0;i<8;i++){P0=k;delay();k=k<<1; //11111100 | k=k|0x01;//把最低位置1//11111101} //11111010 } //00000001 //11111011}方法四函数调用#include <reg52.h>#include <intrins.h>#define uchar unsigned char #define uint unsigned int void delay(void){uchara,b;for(a=0;a<200;a++)for(b=0;b<200;b++);}void main(){uchark;k=0xfe;while(1){P0=k;delay();k=_crol_(k,1);}}___________________________________________________________ ___蜂鸣器继电器1月28号#include <reg52.h>sbit beep=P0^1;void main(){beep=1;}#include <reg52.h>sbit relay=P0^0;void delay(void){unsignedchar a,b; for(a=0;a<200;a++) for(b=0;b<200;b++); }void main(){while(1){relay=1;delay();relay=0;delay();}}____________________________________________________________ __步进电机的按键控制1月29号#include <reg52.h>void delay(unsigned int t);//Motorsbit k1=P2^7;sbit k2=P2^6;sbit F1 = P1^0;sbit F2 = P1^1;sbit F3 = P1^2;sbit F4 = P1^3;unsigned char codeFFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; //反转unsigned char codeFFZ[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}; //正转/* 步进电机驱动*/void motor_ffw(){unsigned char i;unsigned int j;for (j=0; j<12; j++) //转1*n圈{for (i=0; i<8; i++) //一个周期转30度 {P1 = FFW[i]&0x1f; //取数据delay(10); //调节转速 }}}void motor_ffz(){unsigned char i;unsigned int j;for (j=0; j<12; j++) //转1*n圈{for (i=0; i<8; i++) //一个周期转30度 {P1 = FFZ[i]&0x1f; //取数据delay(10); //调节转速 }}}void motor_stop(){P1=1;}voiddelay(unsigned int t){unsigned int k;while(t--){for(k=0; k<80; k++){}}}main(){while(1){P2=0xff;switch (P2){case(0xfe): motor_ffw();break;case(0xfd): motor_ffz();break;default : motor_stop(); break; }}_____________________________________________________________ _呼吸灯4月13号#include<reg51.h>#define uint unsigned intuint i;sbit led=P2^3;void delay(uint a){while(a-=1);}void breath(){ uint i;for(i=1;i<=499;i++) { led=0;delay(i);led=1;delay(501-i);}for(i;i>=1;i--){ led=0;delay(i);led=1;delay(501-i);}}void main(){ while(1){ breath(); }___________________________________________________________ ____________________流水呼吸灯4月15号#include<reg51.h>#include<intrins.h> //调用库函数#define uchar unsigned char#define uint unsigned int //宏定义uint i;uchar bb;void delay(uint a){ while(a--) ; //定义延时函数}void breath() //定义呼吸函数{ uint i;for(i=1;i<=499;i++) //FOR循环{ P2=bb; //控制BB位的LEDdelay(i); //延时,随着 FOR循环延时点亮的时间逐渐缩短,即每次循环的时间减少,亮度减弱P2=0XFF;delay(501-i); //BB位LED为低电平的时间增长,高电平时间为0}for(i;i>=1;i--) //由高电平时间为0转换为低电平为0{ P2=bb;delay(i);P2=0XFF;delay(501-i);}}void main(){ bb=0xfe;while(1) //循环主函数 { breath();bb=_crol_(bb,1); //_crol_带循环//<<是位左移,后面补0}}___________________________________________________________ ____________________//数码管动态显示7月21号#include <reg51.h>intduanxuan[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f}; int i,k,e,z=0xfe;void delay (int j){while (j--);}void disp(){P0=0x00;P1=0xff;P0=duanxuan[k];P1=z;delay(200);z=z<<1;z=z|0x01;}void main (){for (k=0;k<=8;k++){disp();}}______________________________________________________________ _________________点阵显示7月23号没有取模软件,懒得算数____________________________________________________________ ___________________独立按键7月23号#include <reg51.h>unsignedcharsmg_gy[]={~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x 7f,~0x6f};sbit k1=P3^0;sbit led=P0^0;void delay(int t) //误差 0us{unsigned char j;for (;t>0;t--)for(j=19;j>0;j--);}void main (){intnum;P3=0xff;while(1)//消抖{if(k1==0){delay(200);if (k1==0){num++;led=0;if(num==8)num=0;while (!k1);}delay(200);while (!k1);}elseled=1;P1=smg_gy[num];}}__________________________________________________________8 8月2号矩阵键盘#include <reg51.h>#define uchar unsigned char#define uint unsigned intuchar duanxuan[16]={~0x3f,~0x06,~0x5b,~0x4f, ~0x66,~0x6d,~0x7d,~0x07,~0x7f,~0x6f,~0x77,~0x7c}; uchar table[12]={0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};void display(uchar i){P1=duanxuan[i];}void delay_50us(uint t){uchar j;for(;t>0;t--)for(j=19;j>0;j--);}void main(){unsigned char i,key_1,key_2,hh;while (1){P3=0xf0;key_1=P3;if(key_1!=0xf0){delay_50us(200);key_1=P3;if(key_1!=0xf0){P3=0x0f;key_2=P3;hh=key_1|key_2;for(i=0;i<12;i++){if(hh==table[i]){display(i);break;}}}}}}___________________________________________________________ 8月7号中断函数#include<reg52.h>#include<intrins.h> //调用库函数#define uchar unsigned char#define uint unsigned int //宏定义sbit p=P0^0;void delay(uint a){while(a--) ; //定义延时函数}void clock(void){p=0;delay(100);}void main(){IT0=0;EA=1;EX0=1;//<<是位左移,后面补0 while(1){P2=0x00;clock();}}void it0() interrupt 0{P2=0xf0}__________________________________________________________ 8月11号定时器方式的数码管动态显示#include <reg51.h>#include <intrins.h>unsigned char num,k=0,z=0xfe;int duanxuan[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};void main(){TMOD=0X01; //设置定时器工作方式为定时方式1 TH0=(65536-500)/256; //装入初值12M晶振定时TL0=(65536-500)%256;EA=1; //打开总中断开关ET0=1; //打开定时器开关TR0=1; //启动定时器while(1){if(num==5){num=0;P1=z;P0=duanxuan[k];k++;k=k%8;z=_crol_(z,1);}} //等待中断响应}void time0 () interrupt 1{TH0=(65536-500)/256; //装入初值12M晶振定时 TL0=(65536-500)%256;num++;}。
下面程序基于51单片机学习板,具体的原理图请搜索下载:HOT-51,一个学习板的原理图.pdf/********************************************************************㈠* 文件名:闪烁灯一.c* 描述: 该程序实现LED的闪烁,每隔0.2秒更替一次亮灭。
在使用某款新单片机时,经常就用类似的闪烁灯程序来判断单片机是否正常工作。
本程序通过软件延时,并且通过软件调试。
在“HOT-51\开发板配套资料\经典学习资料\单片机相关”下面有KEIl软件仿真的教程。
注:因为我们P0口LED和数码管是公用的,LED闪烁的同时数码管也会闪烁。
你可以通过改变J1跳线位置然后给P3.7付低电平,让数码管不显示。
* 创建人:东流,2009年8月27日* 版本号:1.0***********************************************************************/#include<reg52.h>#define uchar unsigned char //这里用"uchar"代替"unsigned char","uchar"用来定义无符号字符型数。
#define uint unsigned int //"uint"用来定义无符号整型数。
sbit Show_LED = P0^0; //用来声明P0.0口为程序所要控制的端口,"sbit"是KEIL专门用来声明某位IO口/********************************************************************* 名称: Delay()* 功能: 延时,延时时间为10ms * del。
这是通过软件延时,有一定误差。