单片机代码
- 格式:doc
- 大小:38.50 KB
- 文档页数:6
用89s52单片机的机器车1.串口向计算机发送信息,串口和串口调试终端软件用到uart_Init();函数scanf函数与printf函数对应,在C51库的stdio.hprintf("Program Running!\n");printf(“Please input pulse number:\n”);scanf(“%d”,&PulseNumber);printf(“Please input pulse duration:\n”);scanf(“%d”,&PulseDuration);for(Counter=1;Counter<=PulseNumber;Counter++){P1_1=1;delay_nus(PulseDuration);P1_1=0;delay_nms(20);}for(Counter=1;Counter<=PulseNumber;Counter++){P1_0=1;delay_nus(PulseDuration);P1_0=0;delay_nms(20);}while(1);}2.for循环来实现电机速度逐渐增加到全速然后逐步减小的例子。
for(pulseCount=10;pulseCount<=200;pulseCount=pulseCount+1)加速{P1_1=1;delay_nus(1500+pulseCount);P1_1=0;P1_0=1;delay_nus(1500-pulseCount);P1_0=0;delay_nms(20);}for(pulseCount=1;pulseCount<=75;pulseCount++)全速{P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20); }for(pulseCount=200;pulseCount>=0;pulseCount=pulseCount-1)减速{P1_1=1;delay_nus(1500+pulseCount);P1_1=0;P1_0=1;delay_nus(1500-pulseCount);P1_0=0;delay_nms(20);}while(1);}3.子函数的书写类型标识符 函数名(形式参数列表){声明部分//函数体内部用到的变量的类型说明语句}void Forward(void)无参数无返回值void Forward(int PulseCount,int Velocity) 有参数无返回值int Forward(void)无参数有返回值用return x;返回int Forward(int PulseCount,int Velocity) 有参数有返回值用return x;返回void Move(int counter,int PC1_pulseWide,int PC0_pulseWide){int i;for(i=1;i<=counter;i++){P1_1=1;delay_nus(PC1_pulseWide);P1_1=0;P1_0=1;delay_nus(PC0_pulseWide);P1_0=0;delay_nms(20);}}int main(void){uart_Init();printf("Program Running!\n");Move(65,1700,1300);//前Move(26,1300,1300); //左Move(26,1700,1700); //右Move(65,1300,1700); //后while(1);}4.将复杂巡航运动记录在数组中,编写程序执行这些巡航运动类型说明符数组名[常量表达式]={值,值……值};//数组switch(表达式){case常量表达式1: 语句1;break;case常量表达式2: 语句2;break;case常量表达式n: 语句n;break;default: 语句n+1;break;}int main(void)//走方形的运动{char Navigation[10]={'F','L','F','F','R','B','L','B','B','Q'};int address=0;uart_Init();printf("Program Running!\n");while(Navigation[address]!='Q'){switch(Navigation[address]){case 'F':Forward();break;case 'L':Left_Turn();break;case 'R':Right_Turn();break;case 'B':Backward();break;}address++;}while(1);}以上需调用子函数,但为了方便,我们如此使用数组在本例程中,将不使用子函数,而是使用三个整型数组来存储控制机器人运动的三个变量,即循环的次数和控制左右电机运动的两个参数。
单片机指令以 A 开头的指令有 18 条,分别为:1 、 ACALL addr11 指令名称:绝对调用指令 指令代码: A10A9 A8 10001 A7 A6 A5 A4 A3 A2 A1 A0 指令功能:构造目的地址,进行子程序调用。
其方法是以指令提 供的 11 位地址 (al0 ~ a0) ,取代 PC 的低 11 位, PC 的高 5 位不 操作内容: PC ←(PC)+2 (SP)← (PC)7 ~ 0 (SP)← (PC)15 ~ 8 字节数: 2 7 、 ADDC A ,direct 指令名称:直接寻址带进位加法指令 指令代码: 35H 指令功能:累加器内容、内部 RAM 低 128 单元或专用寄存器内 容与进位位加操作内容: A ← (A)+(direct)+(C) 字节数: 2 机器周期: 1 影响标志位: C , AC ,OVSP ←(SP)+1 SP ←(SP)+1 PC10 ~ 0 ← addrl0 ~0 机器周期: 2 使用说明:由于指令只给出子程序入口地址的低 11 位,因此调 用范围是 2KB 2 、 ADD ,Rn 指令名称: 寄存器加法指令 指令功能: 累加器内容与寄存器内容相加 操作内容: A ←(A)+(Rn) , n =0~7 字节数: 1 机器周期; 影响标志位 : C , AC ,OV指令代码:28H ~ 2FH 3 、 ADD A , direct 指令名称:直接寻址加法指令 指令代码: 25H 指令功能:累加器内容与内部 RAM 单元或专用寄存器内容相加 操作内容: A ← (A)+(direct) 字节数: 2 机器周期: 1 影响标志位: C , AC ,OV 4 、 ADD A ,@ Ri '指令名称:间接寻址加法指令 指令代码:26H ~ 27H 指令功能:累加器内容与内部 RAM 低 128 单元内容相加 操作内容: A ←(A)+((Ri)) , i =0,1 字节数: 1 机器周期: 1 影响标志位: C , AC ,OV 5 、 ADD A , #data 指令名称: 立即数加法指令 指令代码: 24H 指令功能: 累加器内容与立即数相加操作内容:A ← (A)+data字节数: 2 机器周期: 1 影响标志位 : C , AC ,OV6 、 ADDC A , Rn 指令名称:寄存器带进位加法指令 指令代码:38H ~ 3FH 指令功能:累加器内容、寄存器内容和进位位相加 操作内容: A ←(A)+(Rn)+(C) , n =0~7 字节数: 1 机器周期: 1 影响标志位:C , AC ,OV8 、 ADDC A ,@Ri 指令名称:间接寻址带进位加法指令 指令代码: 36H ~37H指令功能:累加器内容 , 内部 RAM 低 128 单元内容及进位位相 加操作内容: A ← (A)+((Ri))+(C) , i = 0,1 字节数: 1 机器周期: 1 影响标志位: C , AC ,OV9 、 ADDC A ,#data 指令名称:立即数带进位加法指令指令功能:累加器内容、立即数及进位位相加 操作内容: A ← (A)+data+(C) 字节数: 2 机器周期: 1 影响标志位:C , AC ,OV指令代码: 34H10 、 AJMP addr11 指令名称:绝对转移指令 指令代码: A10 A9 A8 1 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0 指令功能:构造目的地址,实现程序转移。
单片机code的用法
单片机的code(代码)主要是用于编程控制单片机执行特定的任务或功能。
以下是使用单片机code的一般步骤:
1. 确定需求:首先确定需要实现的功能或任务,这有助于明确编程的目标。
2. 学习单片机的编程语言:单片机可以使用多种编程语言,例如C、C++、汇编语言等。
选择一种适合的编程语言,并学习该语言的基本语法和特性。
3. 编写代码:根据确定的需求和所学的编程语言,编写相应的代码。
代码需要解决实现功能的逻辑和算法。
4. 编译代码:将编写的代码转换为机器语言,以便单片机可以理解和执行。
根据所用的编程语言和单片机型号,选择相应的编译器进行编译。
5. 烧录代码:将编译后的机器语言代码烧录到单片机中。
这通常需要使用烧录器和相关软件来完成。
6. 测试和调试:将烧录好的代码在单片机上运行,并进行测试和调试。
通过观察单片机的输出或其他反馈,验证代码是否按照预期执行。
7. 修改和优化:根据测试和调试的结果,对代码进行修改和优化,以满足需求和提高性能。
以上是使用单片机code的一般步骤。
具体的使用方法和应用场景会根据不同的单片机和编程需求而有所差异。
闪烁灯一/***********************************************************************/#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。
这是通过软件延时,有一定误差。
* 输入: del* 输出: 无***********************************************************************/void Delay(uint del){uint i,j;for(i=0; i<del; i++)for(j=0; j<1827; j++) //这个是通过软件仿真得出的数;}/********************************************************************* 名称: Main()* 功能: 实现灯的闪烁* 输入: 无* 输出: 无***********************************************************************/void Main(void){P0 = 0xff; //关闭所有LEDwhile(1){Show_LED = 1;Delay(20); //Delay(del)中的数为延时的时间参数,延时时间为10ms * del.Show_LED = 0;Delay(20);}}闪烁灯二/**********************************************************************/#include<reg52.h>#define uchar unsigned char#define uint unsigned int/********************************************************************* 名称: Delay()* 功能: 延时,延时时间为10ms * del* 输入: del* 输出: 无***********************************************************************/ void Delay(uint del){uint i,j;for(i=0; i<del; i++)for(j=0; j<1827; j++);}/********************************************************************* 名称: Main()* 功能: 实现灯的闪烁* 输入: 无* 输出: 无***********************************************************************/ void Main(void){P0 = 0xff; //关闭所有LEDwhile(1){/*下面四行用于控制LED每隔一个亮*/P0 = 0xaa;Delay(50);P0 = 0x55;Delay(50);/*下面四行用于控制LED每隔一个亮*/P0 = 0xcc;Delay(50);P0 = 0x33;Delay(50);/*下面四行用于控制LED 高四位或者低四位亮*/P0 = 0x0f;Delay(50);P0 = 0xf0;Delay(50);/*下面八行用于控制LED的两次全亮全灭*/P0 = 0x00;Delay(25);P0 = 0xff;Delay(25);P0 = 0x00;Delay(25);P0 = 0xff;Delay(25);Delay(200); //延时两秒}}流水灯一/***********************************************************************/ #include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int/********************************************************************* 名称: Delay()* 功能: 延时,延时时间为10ms * del* 输入: del* 输出: 无***********************************************************************/ void Delay(uint del){uint i,j;for(i=0; i<del; i++)for(j=0; j<1827; j++);}/********************************************************************* 名称: Main()* 功能: 实现灯的闪烁* 输入: 无* 输出: 无***********************************************************************/void Main(void){uchar i;while(1){P0 = 0x7f; //P0.7亮亮for(i=0; i<7; i++) //移位7次{P0 = _cror_(P0, 1); //_crol_()这个函数在intrins.h中定义了,用于循环右移Delay(15);}P0 = 0xfe;for(i=0; i<7; i++){P0 = _crol_(P0, 1); //用于循环左移Delay(15);}}}流水灯二/**********************************************************************/#include<reg52.h>#define uchar unsigned char#define uint unsigned int/********************************************************************* 名称: Delay()* 功能: 延时,延时时间为10ms * del* 输入: del* 输出: 无***********************************************************************/void Delay(uint del){uint i,j;for(i=0; i<del; i++)for(j=0; j<1827; j++);}/********************************************************************* 名称: Main()* 功能: 实现灯的闪烁* 输入: 无* 输出: 无* 说明:也可以使用例1的的方法来关闭数码管***********************************************************************/void Main(void){uchar i, temp;while(1){temp = 0x7f;for(i=0; i<7; i++){temp = temp >> 1; //值右移一位temp = temp | 0x80;P0 = temp; //把值赋给P0口Delay(15); //延时0.15秒}temp = 0xfe;for(i=0; i<7; i++){temp = temp << 1; //值左移一位temp = temp | 0x01;P0 = temp; //把值赋给P0口Delay(15); //延时0.15秒}}}数码管静态显示一/**********************************************************************/#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit KEY = P3^4; //独立按键的T0/*下一行你可以试着把code 去掉看看试验结果。
1、位码(共阴):0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f2、断码(共阳):0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x713、独立管码(共阳):0x02,0x9e,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08,0x10,0xc0,0x62,0x84,0x60,0x704、循环函数intrins_crol_字符循环左移_cror_字符循环右移_irol_整数循环左移_iror_整数循环右移_lror_长整数循环左移_lror_长整数循环右移_nop_空操作8051 NOP 指令_testbit_测试并清零位8051 JBC 指令5、中段代码interrupt 0 外部中断0interrupt 1 定时器0中断interrupt 2 外部中断1interrupt 3 定时器1中断interrupt 4 串口中断interrupt 5 定时器2中断(52里面,51没有)6、IIC总线开始信号:void IICstart(){scl=1;delay();sda=1;delay();sda=0;delay();scl=0;}结束信号void IICstop(){scl=1;delay();sda=0;delay();sda=1;}应答信号void IICyingda(){uchar j;scl=1;delay();while((sda==1)&&j<250)j++;//sda=0;//delay();scl=0;delay();}写信号(写入一8位数据)void write_byte(uchar w){uchar i,temp;temp=w;for(i=0;i<8;i++){scl=0;delay();temp=temp<<1;sda=CY;delay();scl=1;delay();}scl=0;delay();sda=0;delay();}读信号(读出一个8位数据)uchar read_byte(void){uchar i,j,k;sda=1;for(i=0;i<8;i++){scl=1;delay();j=sda;k=(k<<1)|j;scl=0;delay();}scl=0;delay();return k;}7、时钟调试键盘扫描void keyscan(){if(k1==0){delay(5);if(k1==0){while(!k1); //k1num++;}if(k1num==1){TR0=0;write_zhiling(0x80+0x40+11);write_zhiling(0x0f);}if(k1num==2){TR0=0;write_zhiling(0x80+0x40+8);}if(k1num==3){TR0=0;write_zhiling(0x80+0x40+5);}if(k1num==4){k1num=0;write_zhiling(0x0c);TR0=1;//}}if(k1num!=0){if(k2==0){delay(5);if(k2==0){while(!k2);if(k1num==1){miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;write_jingwei(7,fen);}write_jingwei(10,miao);write_jingwei(7,fen);write_zhiling(0x80+0x40+11);}write_jingwei(10,miao);write_zhiling(0x80+0x40+11);}if(k1num==2){fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;write_jingwei(4,shi);}write_jingwei(7,fen);write_jingwei(4,shi);write_zhiling(0x80+0x40+8);}write_jingwei(7,fen);write_zhiling(0x80+0x40+8);}if(k1num==3){shi++;if(shi==24){shi=0;write_jingwei(4,shi);write_zhiling(0x80+0x40+5);}write_jingwei(4,shi);write_zhiling(0x80+0x40+5);}}}}if(k1num!=0){if(k3==0){delay(5);if(k3==0){while(!k3);if(k1num==1){miao--;if(miao==-1){miao=59;fen--;if(fen==-1){fen=59;write_jingwei(7,fen);}write_jingwei(10,miao);write_jingwei(7,fen);write_zhiling(0x80+0x40+11);}write_jingwei(10,miao);write_zhiling(0x80+0x40+11); }if(k1num==2){fen--;if(fen==-1){fen=59;shi--;if(shi==-1){shi=23;write_jingwei(4,shi);}write_jingwei(7,fen);write_jingwei(4,shi);write_zhiling(0x80+0x40+8);}write_jingwei(7,fen);write_zhiling(0x80+0x40+8); }if(k1num==3){shi--;if(shi==-1){shi=23;write_jingwei(4,shi);write_zhiling(0x80+0x40+5);}write_jingwei(4,shi);write_zhiling(0x80+0x40+5);}}}}}。
单片机常用c代码在单片机领域,C语言是最常用的编程语言之一。
它具有简单易学、灵活高效的特点,被广泛应用于单片机系统的开发中。
本文将介绍一些常用的单片机C代码,为读者提供参考和学习的资源。
一、IO口控制单片机的IO口是与外部设备连接的重要接口,通过控制IO口的高低电平来实现与外部设备的通信。
以下是常见的IO口控制代码示例:1. 设置IO口为输出模式:```c#define LED_PIN 0 // 指定IO口引脚号void setup() {pinMode(LED_PIN, OUTPUT); // 设置IO口为输出模式}void loop() {digitalWrite(LED_PIN, HIGH); // 设置IO口为高电平delay(1000); // 延迟1秒digitalWrite(LED_PIN, LOW); // 设置IO口为低电平delay(1000); // 延迟1秒```2. 设置IO口为输入模式:```c#define BUTTON_PIN 1 // 指定IO口引脚号void setup() {pinMode(BUTTON_PIN, INPUT); // 设置IO口为输入模式}void loop() {if (digitalRead(BUTTON_PIN) == HIGH) { // 判断IO口电平是否为高电平// 执行相应操作}}```二、定时器控制定时器是单片机中的重要组件,可用于实现精确的时间控制和周期性任务。
以下是常见的定时器控制代码示例:1. 设置定时器计数器和预分频值:void setup() {TCCR1B = (1 << CS12) | (1 << CS10); // 设置定时器1的预分频为1024}void loop() {// 执行相应操作}```2. 设置定时器中断服务程序:```cISR(TIMER1_COMPA_vect) {// 定时器1比较匹配中断服务程序}void setup() {TCCR1B = (1 << WGM12) | (1 << CS12) | (1 << CS10); // 设置定时器1的CTC模式和预分频为1024OCR1A = 15624; // 设置定时器1的比较匹配值,实现1秒中断一次TIMSK1 = (1 << OCIE1A); // 允许定时器1比较匹配中断}void loop() {// 执行相应操作}```三、串口通信串口通信是单片机与计算机或其他外部设备进行数据交互的常用方式。
51单片机C语言编程100例-单片机c语言编程51单片机C语言编程100例在嵌入式系统领域,单片机是常用的硬件平台之一。
而C语言作为一种高级编程语言,能够为单片机编程提供更高的效率和便利性。
本文将介绍51单片机C语言编程的100个实例,帮助读者了解并掌握单片机的基本编程技巧和应用方法。
一、LED灯控制1. 实例介绍:通过控制51单片机的IO口输出,实现对LED灯的亮灭控制。
2. 实例代码:```#include <reg51.h>sbit LED = P1^0; // 定义P1口的第0位为LEDvoid main(){while(1){LED = 0; // LED灯亮delay(1000); //延时1秒LED = 1; // LED灯灭delay(1000); //延时1秒}}```二、数码管显示1. 实例介绍:使用数码管显示数字0-9,并实现数码管的动态显示效果。
2. 实例代码:```#include <reg51.h>unsigned char code DispTab[] ={0xC0,0XF9,0XA4,0XB0,0X99,0X92,0X82};sbit WeiDu = P1^2;sbit DUAN = P1^0;void delay(unsigned int t){unsigned int i;while(t--)for(i=0;i<125;i++);}void main(){unsigned int i;while(1){P0 = DispTab[i]; // 显示数字iDUAN = 1; //点亮段码DUAN = 0; //关闭段码P0 = ~(0x01 << i); // 选择数码管的位 WeiDu = 0; // 打开选通位WeiDu = 1; // 关闭选通位delay(100); // 延时100msi++;if(i > 9) i = 0;}}```三、外部中断1. 实例介绍:使用外部中断,当外部输入信号发生变化时,触发中断程序。
单片机仿真代码
单片机的仿真代码可以用Keil C编写,以下是一个简单的例子:
```
#include <reg52.h>
void delay(unsigned int ms) {
unsigned int i, j;
for(i = 0; i < ms; i++) {
for(j = 0; j < 120; j++);
}
}
void main() {
P1 = 0x00; // 初始化P1口为输出
while(1) {
P1 = 0xFF; // 点亮所有LED灯
delay(1000); // 延时1秒
P1 = 0x00; // 关闭所有LED灯
delay(1000); // 延时1秒
}
}
```
这个例子使用了8051系列的单片机,通过控制P1口上的LED灯来实现闪烁效果。
首先,将P1口设置为输出模式,然
后通过循环来点亮和关闭LED灯,每次延时1秒。
在Keil IDE中,我们可以将上述代码复制到一个新的C源文件中,并编译和生成hex文件。
然后,在Keil IDE中选择一个8051系列的单片机模拟器,加载生成的hex文件,并运行仿真。
这样,就可以在仿真器中观察LED灯的闪烁效果了。
注意:以上是一个简单的例子,实际的仿真代码可能会更加复杂,具体要根据实际的需求来编写。
单片机代码例子1. LED闪烁程序在单片机中,我们可以通过编写简单的代码来实现LED灯的闪烁。
以下是一个简单的LED闪烁程序的例子:```#include <reg51.h>void main(){while(1){P1 = 0xFF; // 将P1口的所有引脚设置为高电平delay(1000); // 延时1秒P1 = 0x00; // 将P1口的所有引脚设置为低电平delay(1000); // 延时1秒}}void delay(int time){int i, j;for(i=0; i<time; i++){for(j=0; j<1275; j++);}}```2. 数码管显示程序单片机中的数码管可以通过编写代码来显示数字和字符。
以下是一个简单的数码管显示程序的例子:```#include <reg51.h>unsigned char code digit[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};void main(){unsigned int i;while(1){for(i=0; i<10; i++){P1 = digit[i]; // 将对应的数码管段码输出到P1口delay(1000); // 延时1秒}}}void delay(int time){int i, j;for(i=0; i<time; i++){for(j=0; j<1275; j++);}}```3. 温度检测程序通过连接温度传感器到单片机的引脚,我们可以编写代码来读取温度数据。
以下是一个简单的温度检测程序的例子:```#include <reg51.h>sbit DQ = P3^2; // 温度传感器引脚void delay(int time){int i, j;for(i=0; i<time; i++){for(j=0; j<1275; j++); }}unsigned char readTemperature() {unsigned char temperature; unsigned char i;DQ = 1; // 发送起始信号DQ = 0;delay(500); // 延时500us DQ = 1; // 接收温度数据delay(50); // 延时50usfor (i=0; i<8; i++){DQ = 0;temperature = temperature >> 1; DQ = 1;if (DQ){temperature |= 0x80;}delay(50); // 延时50us}return temperature;}void main(){unsigned char temperature;while(1){temperature = readTemperature(); // 在LCD上显示温度数据delay(1000); // 延时1秒}}```4. 蜂鸣器控制程序通过编写代码,我们可以控制单片机的引脚来控制蜂鸣器的发声。
单片机常用代码大全(一)引言概述:单片机常用代码大全(一)是一份涵盖了单片机编程中常见代码的文档。
在单片机开发过程中,经常需要使用各种常用代码来完成特定的功能。
本文将介绍其中五个主要方面的代码,包括I/O口操作、定时器/计数器、中断、串口通信以及ADC(模数转换器)等。
通过详细介绍和示例代码,希望能帮助读者理解和应用这些单片机常用代码。
正文:一、I/O口操作:1. 设置I/O口的方向(输入或输出)2. 读取I/O口的状态3. 设置I/O口的电平(高电平或低电平)4. 使用端口操作寄存器(P0、P1、P2、P3)5. 使能或禁止I/O口的中断功能二、定时器/计数器:1. 初始化定时器/计数器2. 设置定时器/计数器的计数方式(定时模式或计数模式)3. 设置定时器/计数器的计数值4. 启动或停止定时器/计数器5. 定时器/计数器中断处理函数的编写三、中断:1. 中断的概念和分类2. 初始化中断向量表3. 使能或禁止中断4. 中断请求和中断响应的流程5. 中断服务子程序(ISR)的编写和使用四、串口通信:1. 初始化串口通信参数(波特率、数据位、停止位等)2. 发送数据到串口3. 接收串口数据4. 串口中断处理函数的编写5. 使用串口通信进行数据传输的示例代码五、ADC(模数转换器):1. ADC的原理和工作方式2. 配置ADC的工作模式(单通道、多通道等)3. 设置ADC的参考电压和分辨率4. 启动ADC转换和读取转换结果5. 使用ADC实现模拟信号的数字化和处理总结:本文介绍了单片机常用代码大全(一)中的五个主要方面的代码,包括I/O口操作、定时器/计数器、中断、串口通信以及ADC (模数转换器)。
通过学习和应用这些常用代码,读者可以更好地进行单片机编程,并实现各种功能需求。
同时,读者也可以参考示例代码进行实际操作和深入学习。
希望这份文档能够对单片机开发者有所帮助。
单片机代码单个发光二极管的点亮#include#define uchar unsigned char#define uint unsigned int //{ P1 =0xfe; //点亮最后一个LEDwhile(1){}}顺时针流水灯#include //头文件#define uchar unsigned char //宏定义#define uint unsigned intvoid Delay(uint del) //时延函数{ uint i,j;for(i=0; i#define uchar unsigned char#define uint unsigned intuchar table[16] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39 ,0x5e, 0x79,0x71};//下一行的数组可以显示数值外,还可以显示数码管的点uchar table_d[16] ={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9 ,0xde, 0xf9,0xf1};void main(){ uchar i = 0;P2 = 0xfe;P0 = table[5]; //显示5,大家可以修改里面的数据。
while(1){}}任务2 两位数码管动态显示#include#define uchar unsigned char#define uint unsigned intUchar code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};uchar code LED_W[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; void Delay(uint i){ uint x,j;for(j=0;j#define uchar unsigned char#define uint unsigned intuchar code table[10] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};uchar code LED_W[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; uchar code Birth[8]={1,9,4,0,0,8,1,6};void Delay(uint i){ uchar x,j;for(j=0;j#define uchar unsigned char#define uint unsigned int//数码管的段码编码uchar table[16] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39 ,0x5e, 0x79,0x71};void Delay(uint i){ uint x,j;for(j=0;j#define uchar unsigned char#define uint unsigned int//数码管的段码编码uchar table[16] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39 ,0x5e, 0x79,0x71};void Delay(uint del){ uint i,j;for(i=0; i#define uchar unsigned char#define uint unsigned intuchar code table[10] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar code LED_W[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//定义北面的LEDsbit N_Red = P1^0;sbit N_Yellow = P1^1;sbit N_Green = P1^2;//定义东面的LEDsbit E_Red = P1^3;sbit E_Yellow = P1^4;sbit E_Green = P1^5;//定义南面的LEDsbit S_Red = P1^6;sbit S_Yellow = P1^7;sbit S_Green = P3^4;//定义西面的LEDsbit W_Red = P3^5;sbit W_Yellow = P3^6;sbit W_Green = P3^7;uchar Count = 0;uchar Sec = 0;void Delay(uint del){ uint i,j;for(i=0; i#include#define uint unsigned int#define uchar unsigned char//心形显示unsigned char code tabP0[]={0x00,0x1C,0x22,0x42,0x84,0x42,0x22,0x1C};unsigned char code tabP2[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};void Delay_1ms(uchar i)//1ms延时{ uchar x,j;for(j=0;j#define uchar unsigned char#define uint unsigned intsbit KEY1 = P3^2;uchar Count = 0;uchar code table[10] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};void Delay(uint del){ uint i,j;for(i=0; i#define uchar unsigned char#define uint unsigned intuint Count = 0;uchar code table[10] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void Time0_Init() { TMOD = 0x00;TH0 = 0xE3;TL0 = 0x06;ET0 = 1;EA = 1;TR0 = 1;}void Time0_Int() interrupt 1{ TH0 = 0xE3;TL0 = 0x06;Count++; //长度加1}void main(){ uchar i = 0;Time0_Init();P2 = 0xfe;while(1){ P0 = table[i % 10]; //取 i 的个位if(Count == 1000) //当Count为 1000 时,i 自加一次,1000 * 0.1MS = 1S{ Count = 0;i++;}}}#include#define uchar unsigned char#define uint unsigned intvoid Delay(uint del) //延时函数{ uint i,j;for(i=0; i#include#define uint unsigned int#define uchar unsigned charuchar tabP2[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; uchar tabP0[6][8]={{0x00,0xDF,0xDF,0xDB,0xDB,0xFB,0xFB,0x00},{0x00,0x1F,0x1F,0x18,0x18,0xFF,0xFF,0x00},{0x00,0xDB,0xDB,0xDB,0xDB,0xFF,0xFF,0x00},{0x00,0xFB,0xFB,0xDB,0xDB,0xDF,0xDF,0x00},{0x00,0x00,0x84,0xFF,0xFF,0x80,0x00,0x00},{0x00,0xFF,0xFF,0xC3,0xC3,0xFF,0xFF,0x00},};void Delay_1ms(uchar i)//1ms延时{ uchar x,j;for(j=0;j#define uchar unsigned char#define uint unsigned intsbit KEY1 = P3^2;sbit KEY2 = P3^3;sbit KEY3 = P3^4;sbit KEY4 = P3^5;void Delay(uint del){ uint i,j;for(i=0; i#define uchar unsigned char#define uint unsigned intsbit KEY1 = P3^2;sbit KEY2 = P3^3;sbit KEY3 = P3^4;sbit KEY4 = P3^5;uint i=88;//数码管的段码编码uchar table[16] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0 x79,0x71};//下一行的数组可以显示数值外,还可以显示数码管的点uchar table_d[16] ={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0 xf9,0xf1};uchar code LED_W[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};void Delay_1ms(uint i){ uint x,j;for(j=0;j#define uchar unsigned char#define uint unsigned intsbit KEY1 = P3^2;sbit KEY2 = P3^3;sbit KEY3 = P3^4;sbit KEY4 = P3^5;//数码管的段码编码uchar table[10] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void Delay_1ms(uint i){ uint x,j;for(j=0;j#include#define uint unsigned int#define uchar unsigned char#define ulong unsigned longuchar code table[10] = {0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41,0x1f, 0x01, 0x09}; sbit E=P2^7; //1602使能引脚sbit RW=P2^6; //1602读写引脚sbit RS=P2^5; //1602数据/命令选择引脚void Delay_1ms(uint del)//1ms延时{ uint i,j;for(i=0;i#include#define uint unsigned int#define uchar unsigned charuchar code table[16] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0 x79,0x71};void Delay_1ms(uint del)//1ms延时{ uint i,j;for(i=0;i#define uchar unsigned char#define uint unsigned intsbit KEY = P3^2;uchar table[16] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0 x79,0x71};void Delay(uint del){ uint i,j;for(i=0; i#include#define uchar unsigned char#define uint unsigned intsbit E=P2^7; //1602使能引脚sbit RW=P2^6; //1602读写引脚sbit RS=P2^5; //1602数据/命令选择引脚void delay(){ _nop_();_nop_();}void Delay(uint del){ uint i,j;for(i=0;i相关文档:更多相关文档请访问:。