任务5:流水灯的控制(3-5 C语言基本数据和运算)

合集下载

单片机c语言编程控制流水灯

单片机c语言编程控制流水灯

说了这么多了,相信你也看了很多资料了,手头应该也有必备的工具了吧!(不要忘了上面讲过几个条件的哦)。

那个单片机究竟有什么功能和作用呢?先不要着急!接下来让我们点亮一个LED(搞电子的应该知道LED是什么吧^_^)我们在单片机最小系统上接个LED,看我们能否点亮它!对了,上面也有好几次提到过单片机最小系统了,所谓单片机最小系统就是在单片机上接上最少的外围电路元件让单片机工作。

一般只须连接晶体、VCC、GND、RST即可,一般情况下,AT89C51的31脚须接高电平。

#include<reg51.h> //头文件定义。

或用#include<at89x51.h>其具体的区别在于:后者定义了更多的地址空间。

//在Keil安装文件夹中,找到相应的文件,比较一下便知!sbit P1_0 = P1 ^ 0; //定义管脚void main (void){while(1){P1_0 = 0;//低电平有效,如果把LED反过来接那么就是高电平有效}}就那么简单,我们就把接在单片机P1_0上的LED点亮了,当然LED是低电平,才能点亮。

因为我们把LED的正通过电阻接至VCC。

P1_0 = 0; 类似与C语言中的赋值语句,即把0 赋给单片机的P1_0引脚,让它输出相应的电平。

那么这样就能达到了我们预先的要求了。

while(1)语句只是让单片机工作在死循环状态,即一直输出低电平。

如果我们要试着点亮其他的LED,也类似上述语句。

这里就不再讲了。

点亮了几个LED后,是不是让我们联想到了繁华的街区上流动的彩灯。

我们是不是也可以让几个LED依次按顺序亮呢?答案是肯定的!其实显示的原理很简单,就是让一个LED灭后,另一个立即亮,依次轮流下去。

假设我们有8个LED分别接在P1口的8个引脚上。

硬件连接,在P1_1--P1_7上再接7个LED即可。

例程如下:#include<reg51.h>sbit P1_0 = P1 ^ 0;sbit P1_1 = P1 ^ 1;sbit P1_2 = P1 ^ 2;sbit P1_3 = P1 ^ 3;sbit P1_4 = P1 ^ 4;sbit P1_5 = P1 ^ 5;sbit P1_6 = P1 ^ 6;sbit P1_7 = P1 ^ 7;void Delay(unsigned char a){unsigned char i;while( --a != 0){for(i = 0; i < 125; i++); //一个; 表示空语句,CPU空转。

用C语言控制灯的亮灭

用C语言控制灯的亮灭

1100 ~ C
1101 ~ D
1110 ~ E
1111 ~ F
0101 ~ 5
0110 ~ 6
(11010101111101)2=(0011,0101,0111,1101)2=(357D)16 0111 ~ 7
1000 ~ 8
1001 ~ 9
(4B9E)16=(0100,1011,1001,1110)2=(100101110011110)2 1010 ~ A
1011 ~ B
(459)10=(1CB)16
(59)10=(111011)2
11
各种进制之间的转换
0000 ~ 0
二进制转换成十六进制:从右向左,每4位一组(不足4 0001 ~ 1
位左补0),转换成十六进制
0010 ~ 2 0011 ~ 3
十六进制转换成二进制:用4位二进制数代替每一位十 0100 ~ 4
六进制数
0000000B
0000000C
0000000D
0000000E
0000000F
00000010
数制及数制转换
各种进制之间的转换 二进制、十六进制转换成十进制:按权相加

(111011
) 2
1 25
1 24
1 23
0 22
1 21
1 20
(59)10
例 (1F 2 A)16 116 3 15 16 2 2 161 10 16 0 (7978)10
什么是单片机
单片机:即单片微型计算机,它是程序的载体。将程 序放入单片机,通过单片机执行程序,从而实现要达 到的目的。
发光二极管电路
0V灭, 5V亮
0V
数制及数制转换

五种编程方式实现流水灯的单片机C程序

五种编程方式实现流水灯的单片机C程序
P1 = P1 | 0x03;//熄灭第1、2个发光二极管
delay(200);//延时
P1 = P1 | 0x07;//熄灭第1~3个发光二极管
delay(200);//延时
P1 = P1 | 0x0f;//熄灭第1~4个发光二极管
delay(200);//延时
P1 = P1 | 0x1f;//熄灭第1~5个发光二极管
delay(200);//延时
P1 = P1 | 0x3f;//熄灭第1~6个发光二极管
delay(200);//延时
P1 = P1 | 0x7f;//熄灭第1~7个发光二极管
delay(200);//延时
P1 = P1 | 0x7f;//熄灭所有发光二极管
delay(200);//延时
}
}
//函数名:delay
delay(200);
a = _cror_(a, 1);
}
}
P2 = 0xff;
for(j = 0; j < 10; j++)
{
delay(300);
P2 = ~P2;
}
}
}
for(j = 0; j < 255; j++);
}
//功能:采用循环结构实现的流水灯控制程序
//此方式中采用的移位,按位取反等操作是位操作
#include <reg51.h>//包含头文件REG51.H
void delay(unsigned char i);//延时函数声明
void main()//主函数
//形式参数:unsigned char i;
// i控制空循环的外循环次数,共循环i*255次

C语言程序——数码管流水灯结合

C语言程序——数码管流水灯结合
void timer0();
void fun(num)
{
int m;
for(m=0;m<8;m++)
{
clk=0;
AB=num&0x01;
num=num>>1;
clk=1;
}
}
void delay(z)
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
com2=1;
com3=1;
com4=0;
fun(table[9-qian]);
delay(5);
}
}
void timer0()
{
TF0=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
{ int i=0,ge,shi,bai,qian,num,k;
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
// EA=1;
// ET0=1;
TR0=1;
P1=0xfe;
while(1)
{
if(TF0==1)
{
timer0();
num++;
c语言程序——数码管流水灯结合 #include unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd}; #define uchar unsigned char #define uint unsigned int sbit beef=p3^1; sbit clk=p2^0; sbit ab=p2^1; sbit com1=p2^2; sbit com2=p2^3; sbit com3=p2^4; sbit com4=p2^5; void timer0(); void fun(num) { int m; for(m=0;m<8;m++) { clk=0; ab=num&amp;0x01; num=num>>1; clk=1; } } void delay(z) { int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void main() {int i=0,ge,shi,bai,qian,num,k; tmod=0x01; th0=(65536-50000)/256; tl0=(65536-50000)%256; // ea=1; // et0=1; tr0=1; p1=0xfe; while(1) { if(tf0==1) { timer0(); num++; if(num==20) { num=0; if(k==14) k=0; p1=table1[k++]; i++; if(i==99) { i=0; beef=0; delay(1000); beef=1; } } } ge=i%10; shi=i/10%10; bai=i%10; qian=i/10%10; com1=0; com2=1; com3=1; com4=1; fun(table[ge]); delay(5); com1=1; com2=0; com3=1; com4=1; fun(table[shi]); delay(5); com1=1; com2=1; com3=0;

五种编程方式实现流水灯的单片机C程序

五种编程方式实现流水灯的单片机C程序

五种编程方式实现流水灯的单片机C程序流水灯是一种常见的灯光效果,常用于装饰和展示。

实现流水灯的程序可以使用多种不同的编程方式,包括传统的顺序编程、状态机编程、中断编程、调度器编程和面向对象编程。

下面分别介绍这五种方式实现流水灯的程序。

1.顺序编程方式:顺序编程是最常见的编程方式,也是最直接的方式。

下面是使用顺序编程方式实现流水灯的C程序:```c#include <reg52.h>void delay(unsigned int t)while(t--)for(int i=0; i<50; i++);}void mainunsigned char led = 0x80; // 初始灯光状态while(1)P0 = led; // 输出灯光状态delay(500); // 延时一段时间led >>= 1; // 右移一位,实现流水灯效果if(led == 0) // 到达最右边后重新开始led = 0x80;}}```2.状态机编程方式:状态机编程是一种基于状态的编程方式,通过定义不同的状态和状态转换来实现流水灯效果。

下面是使用状态机编程方式实现流水灯的C程序:```c#include <reg52.h>typedef enumState1,State2,State3,State4,State5} State;void delay(unsigned int t)while(t--)for(int i=0; i<50; i++);}void mainState state = State1; // 初始状态为State1 while(1)switch(state)case State1:P0=0x80;delay(500);state = State2;break;case State2:P0=0x40;delay(500);state = State3;break;case State3:P0=0x20;delay(500);state = State4;break;case State4:P0=0x10;delay(500);state = State5;break;case State5:P0=0x08;delay(500);state = State1;break;}}```3.中断编程方式:中断编程方式是一种基于中断事件的编程方式,通过在特定的中断事件触发时改变灯光状态来实现流水灯效果。

单片机跑马灯(流水灯)控制实验报告

单片机跑马灯(流水灯)控制实验报告

单片机实验报告姓名: 学号:一、 实验实现功能:1:计数器功能2:流水灯二、 具体操作:1、计数器功能数码管的动态显示。

每按一次K2键计数器加1通过数码管显示出来,计数器可以实现从0计数到9999。

2、流水灯当在计数器模式下的时候按下K3键时程序进入跑马灯模式,8个小灯轮流点亮每次只点亮一个,间隔时间为50ms 。

三、 程序流程图开始 定时器T0 设置初值,启动定时器,打开中断复位 Key2按下 中断关闭 计数器模式 计数器加1 Key3按下 流水灯模式 数码管显示数字加1 跑马灯点亮间隔50ms Key1按下中断打开四、程序#include <reg51.h>typedef unsigned char uint8;typedef unsigned int uint16; //类型定义sbit P2_1 = P2^1;sbit P2_2 = P2^2;sbit P2_3 = P2^3;sbit P2_4 = P2^4; //位声明四个数码管开关sbit Key2 = P3^2;sbit Key3 = P3^3; //位声明2个按键K2和K3sbit Ledk = P2^0 ; //LED 开关void delay(uint16 i); //延时函数声明void refresh (); // 数码管刷新函数声明void liushuideng(); //流水灯函数声明uint8 number[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//数码管的真值表uint8 out[4] = {0}; // 数组变量uint16 counter=0; //用作计数器的变量uint16 Time_counter=0; //用作定时器的变量void main() //主函数{TMOD = 0x01; //定时器0,工作方式一TH0 = 0xFC;TL0 = 0x18; //定时器初值使每次循环为1msTR0 = 0; //定时器0开始作ET0 = 0; // 定时器中断关EA = 0; // 关中断while(1) //计数器模式{Ledk =1 ; //led开关关out[0]=number[counter%10]; //取个位out[1]=number[counter%100/10]; //十位out[2]=number[counter%1000/100]; //百位out[3]=number[counter/1000]; //千位if (!Key2) //计数器加1{++counter; //自加out[0]=number[counter%10]; //取个位out[1]=number[counter%100/10]; //十位out[2]=number[counter%1000/100]; //百位out[3]=number[counter/1000]; //千位while(!Key2) //等待键盘抬起refresh(); //刷新数码管}refresh(); //刷新数码管if (!Key3) // 进入跑马灯模式liushuideng();}} //主函数结束/*******************延时*************/void delay(uint16 i){uint8 j; // 定义局部变量for(i;i>0;i--) //循环i*240 次for(j=240;j>0;j--);}/************数码管刷新******************/void refresh (){uint8 j;for (j=0;j<4;j++) //四次循环刷新数码管{switch(j){case 0: P2_1=1;P2_2=1;P2_3=1;P2_4=0;break;case 1: P2_1=1;P2_2=1;P2_3=0;P2_4=1;break;case 2: P2_1=1;P2_2=0;P2_3=1;P2_4=1;break;case 3: P2_1=0;P2_2=1;P2_3=1;P2_4=1;break;//每次循环只选中一个数码管default:break;}P0 = out[j]; // 位选,给数码管送值delay (20); //延时消抖}}/*************定时器的中断服务函数**************/void Timer0_Overflow() interrupt 1 //定时器0溢出中断,这个语句1ms执行一次{TH0 = 0xFC;TL0 = 0x18; //每1ms重新赋定时器初值Time_counter++; //计数,看经过了几个1ms}/***********************流水灯子函数****************************/ void liushuideng(){uint8 j = 0 ; //定义局部变量P0 = 0xff; // 小灯全关TR0 = 1; //定时器1开始计时EA = 1; //中断开放ET0 = 1; //定时器0中断开while(1){Ledk = 0 ; //打开LED开关P2 = P2|0x1E; //关掉数码管if(50 == Time_counter) //50个毫秒{P0=~(1<<j++); //控制小灯Time_counter = 0; //清零开始下一次循环定时}if (8==j) //移完8次再重新移{j=0;}}}。

流水灯控制实验报告

《电子与控制系统设计》实验报告实验项目名称:LED灯的移动控制指导老师:元泽怀完成时间:2015年9月22日姓名:刘文开班级:12 电气 1班学号:201224122116成绩:电子信息与机电工程学院编制实验项目LED 灯的移动控制验证实验项目类型演示综合设计其他*一、实验目的1.熟悉 IO 接口的设置与应用;2.进一步熟悉编译软件和下载软件的使用;3.熟悉单片机 C 语言中移位、延时、数组等语句的应用;4.熟悉单片机 C 语言开发过程。

二、实验内容1.编写一程序,实现如下功能:每按一次S1 键,8 个发光二极管顺序点亮1 个;同样每按下 S2 键一次, 8 个发光二极管逆序点亮 1 个,实验电路原理图如下图 1所示。

实现发光二极管循环点亮的按键控制。

2. 设计一个完整程序(另建一个project),实现8个led灯的自动顺序(加法)点亮和逆序(减法)点亮。

图 1 实验原理图三、使用仪器设备及材料1、安装 windows xp 操作系统的微型计算机 1 台2、AVR单片机 C语言集成开发环境ICCAVR6.31A3、单片机仿真平台proteus7.54、AVR单片机下载软件progisp5、AVR单片机实验板 1 套(含下载器)四、实验过程原始记录1、硬件仿真电路( 1)在实验室电脑 E 盘“ 12 电气 1 班刘文开”文件夹里新建一个文件名为“ test1 ”的文件夹。

(2)打开 protues 仿真软件,根据图 1 设计出试验仿真图,命名为“test1.DSN ”保存到上述“ test 的文件夹里”。

U19RESET PC0/SCL 22 23PC1/SDA1224XTAL1PC2/TCK1325XTAL2PC3/TMS26PC4/TDO4027PA0/ADC0PC5/TDI3928PA1/ADC1PC6/TOSC13829PA2/ADC2PC7/TOSC237PA3/ADC33614PA4/ADC4PD0/RXD3515PA5/ADC5PD1/TXD3416PA6/ADC6PD2/INT03317 U2PA7/ADC7PD3/INT118PD4/OC1B 120119PB0/T0/XCK PD5/OC1A 219220PB1/T1PD6/ICP1 318321PB2/AIN0/INT2PD7/OC2 4174PB3/AIN1/OC05165PB4/SS6156PB5/MOSI714732PB6/MISO AREF 813830PB7/SCK AVCC9121011ATMEGA16LED-BARGRAPH-RED图 2实验仿真电路图9U122 RESET PC0/SCL23PC1/SDA1224XTAL1PC2/TCK1325XTAL2PC3/TMS26PC4/TDO4027PA0/ADC0PC5/TDI3928PA1/ADC1PC6/TOSC13829PA2/ADC2PC7/TOSC237PA3/ADC33614PA4/ADC4PD0/RXD3515PA5/ADC5PD1/TXD3416PA6/ADC6PD2/INT03317 U2PA7/ADC7PD3/INT118PD4/OC1B 120119PB0/T0/XCK PD5/OC1A 219220PB1/T1PD6/ICP1 318321PB2/AIN0/INT2PD7/OC24174PB3/AIN1/OC05165PB4/SS6156PB5/MOSI714732PB6/MISO AREF 813830PB7/SCK AVCC9121011ATMEGA16LED-BARGRAPH-RED图 3 实验仿真电路图2、程序流程图(1) .LED 控制移动流程图:开始初始化、定义I/O 端口YNS1 按下?Y计数器 counter++Counter>8?Y第一个 LED灯点亮是否有按键按Y下?S2 按下?Y计数器 counter--Counter<0?N Y最后一个下一个 LED灯点亮LED 灯点亮N上一个 LED灯点亮2).LED 自动循环流程图:开始初始化、定义I/O 口i = 0i = i+1Ni<8?YPORTB=~(1<<i)3、软件主要程序及注解(1).移动控制程序:#include <iom16v.h>#define uchar unsigned char#define uint unsigned intuchar temp;//*******延时函数 ********//void delay_ms(uint k){i = i - 1Ni>0?Y PORTB=~(1<<i-1)uint i,j;for(i=0;i<k;i++){for(j=0;j<1140;j++);}}//*****************端口设置函数********************// void port_init(void) {DDRB = 0xFF; //B端口设置为输出PORTD = 0XFF; //输出高电平DDRD = 0x00;//D PORTD = 0XFF; //端口设置为输入输出高电平}//*********主函数 *********//void main(void){char counter=0; // port_init();while(1)计数器//调用端口函数{if((PIND&0x10)==0){if(++counter>8) counter=1; delay_ms(300);}if((PIND&0x20)==0){counter = counter--;if(--counter<1) counter=8; delay_ms(300);}switch(counter){case 1: PORTB=0xfe;break;case 2: PORTB=0xfd;break;case 3: PORTB=0xfb;break;case 4: PORTB=0xf7;break;case 5: PORTB=0xef;break;case 6: PORTB=0xdf;break;case 7: PORTB=0xbf;break;case 8: PORTB=0x7f;break;default:break;}}}(2).自动循环程序:#include <iom16v.h>#define uchar unsigned char#define uint unsigned int//**********延时函数 **********//void delay_ms(uint k){uint i,j;for(i=0;i<k;i++){for(j=0;j<1140;j++);}}//*****************端口设置函数********************// void port_init(void) {DDRB = 0xFF; //B端口设置为输出PORTD = 0XFF; //输出高电平DDRD = 0x00;//D PORTD = 0XFF; //端口设置为输入输出高电平}//*********主函数 *********// void main(void){unsigned char i;char counter=0; // port_init(); //计数器调用端口函数while(1){for(i=0;i<8;i++){PORTB =~(1<<i);delay_ms(200);}for(i=8;i>0;i--){PORTB =~(1<<i-1);delay_ms(200);}}}五、实验结果及分析先使用 ICCAVR编译修改老师的程序,由移动控制到自动循环控制,程序的主旨不改变,大家一起交流,相互改进。

任务三流水灯定时控制要点分析


•代表中断号,是一 个常量,取值范围 是0-31。 •C51编译器允许32 个中断,从8m+3处 产生中断向量
代表中断函数 将要选择使用 的寄存器组, 也是一个常量, 取值范围是 0~3。
允许
EA
自然优先高级级中断请求
矢量 地址
自然优先级
低级中断请求
中断优 矢量 先级 地址
任务3 以定时方式控制流水灯
1. MCS-51的中断源和中断标志
➢ 中断源是指引起中断的事件。 ➢ 在单片机中,中断源是指引起中断原因的设备或
事件,或发出中断请求信号的源泉。通常有I/O 设备、实时控制系统中的随机参数和信息故障源 等。
1) 高级中断请求可以中断正在执行的低级中断。
2) 同级或低级中断请求不能中断正在执行的中断。
3) 多个中断源同时向CPU申请中断,首先响应优先级别最高 的中断请求;多个同级中断源同时向CPU申请中断,CPU通过内 部硬件查询,按自然优先级确定优先响应哪一个中断请求。
任务3 以定时方式控制流水灯
实例3-2 设有如下要求,将T0、外中断1设为高优先级 ,其它为低优先级,求IP的值。
二极管。
如图3-1所示,由P0连接8只发光二极管,实现如下流水灯的功能: 任务 1 要求每隔1s从左至右循环点亮发光二极管; 要求 2 按自定时间间隔从左至右循环点亮发光二极管,点亮最右边的发
光二极管后,再从右至左循环点亮。
实现 1. 利用Proteus仿真运行,按任务要求实现流水灯。 方法 2. 在实训设备上按任务要求连线,运行程序。
任务3 以定时方式控制流水灯
(1) 中断源
1
外部中断源:MCS-51系列单片机有2个外中
断源,称为外中断0和1,经由单片机上的P3.2、P3.3

流水灯C语言程序

流水灯C语言程序流水灯是一种常见的电子显示效果,通常用于展示灯光的流动效果。

在C语言中,我们可以通过控制单片机的IO口来实现流水灯的效果。

以下是一个标准格式的C语言程序,用于实现流水灯效果。

```c#include <stdio.h>#include <stdlib.h>#include <unistd.h>#define LED_COUNT 8 // 流水灯的数量#define DELAY_MS 500 // 每一个灯亮起的延迟时间(毫秒)int main() {int leds[LED_COUNT] = {0}; // 存储每一个灯的状态,0表示灭,1表示亮 int i, j;while (1) {// 灯往右挪移for (i = LED_COUNT - 1; i > 0; i--) {leds[i] = leds[i - 1];}leds[0] = 1;// 输出灯的状态for (i = 0; i < LED_COUNT; i++) {if (leds[i]) {printf("*"); // 亮的灯用*表示} else {printf(" "); // 灭的灯用空格表示}}printf("\n");// 延迟一段时间usleep(DELAY_MS * 1000);// 清空屏幕system("clear");}return 0;}```上述程序使用了C语言的基本语法和系统函数,实现了一个简单的流水灯效果。

程序中的`LED_COUNT`表示流水灯的数量,可以根据实际需求进行调整。

`DELAY_MS`表示每一个灯亮起的延迟时间,单位为毫秒。

在程序的主循环中,通过不断改变灯的状态和输出屏幕,实现了流水灯的效果。

首先,灯往右挪移,即将前一个灯的状态赋值给后一个灯,最后一个灯的状态设置为亮。

单片机C语言流水灯


/*循环体*/
}
循环结构
循环结构及其流程图
“直到”(do„while)型循
环结构
先执行操作A,再判断条件P, 若P为真时则再次执行A,反 复执行直到P为假为止。
do-while语句格式:
do
{ 语句;
}
/*循环体*/
while ( 表达式 ) ;
循环语句
for循环语句格式:
软件

//LEDshift .c :LED流水灯程序 #include <reg51.h> sbit LED_CS=P1^4; //定义LED控制端为P1.4 //延时程序:由 Delay参数确定延迟时间 void mDelay(unsigned int Delay) { unsigned int i; for(;Delay>0;Delay--) { for(i=0; i<114; i++) {;} } } void main() { unsigned char OutData=0xfe; for( ; ;) { LED_CS=0; //LED控制端有效 P0=OutData; OutData=~(~OutData<<1); //循环左移 mDelay(1000); /*延时 1000 毫秒*/ } }
D0
78 70 68 60 58 50 48 40 38 30 28 20 18 10 08 00
RAM 位 寻 址 区 位 地 址 表
MCS-51单片机存储器结构
特殊功能寄存器/专用寄存器SFR(80H-FFH)
21个SFR, 分别用于以下各个功能单元:
CPU:ACC、B、PSW、SP、
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
void delay(unsigned char i)//延时函数,无符号字符型变量i为形式参数
{
unsigned char j,k;//定义无符号字符型变量j和k
for(k=0;k<i;k++)//双重for循环语句实现软件延时
for(j=0;j<255;j++);
}
三、运算符和表达式
1、算术运算符与算术表达式
运算符
功能
&&
逻辑与(AND)
∣∣
逻辑或(OR)

逻辑非(NOT)
5、位运算符与位运算表达式
运算符
功能
&
按位与

按位或

按位异或
-
按位取反
>>
右移
<<
左移
举例://程序:ex3_9.c
//功能:采用位运算符编写的流水灯控制程序,显示效果为依次熄灭信号灯
#include <reg51.h>
void delay(unsigned char i);//延时函数声明
delay(TIME);//延时
P);//延时
P1=0xf7;//点亮第4个发光二极管
delay(TIME);//延时
P1=0xef;//点亮第5个发光二极管
delay(TIME);//延时
P1=0xdf;//点亮第6个发光二极管
delay(TIME);//延时
#define TIME 200
void delay(unsigned char i);//延时函数声明
void main()//主函数
{
unsigned char i,w;
while(1) {
P1=0xfe;//点亮第1个发光二极管
delay(TIME);//延时
P1=0xfd;//点亮第2个发光二极管
delay(200);//延时
P1=P1|0x0f;//熄灭第1~4个发光二极管
delay(200);//延时
P1=P1|0x1f;//熄灭第1~5个发光二极管
delay(200);//延时
P1=P1|0x3f;//熄灭第1~6个发光二极管
delay(200);//延时
P1=P1|0x7f;//熄灭第1~7个发光二极管
P1=0xbf;//点亮第7个发光二极管
delay(TIME);//延时
P1=0x7f;//点亮第8个发光二极管
delay(TIME);//延时
}
}
//函数名:delay
//函数功能:实现软件延时
//形式参数:unsigned char i;
// i控制空循环的外循环次数,共循环i*255次
//返回值:无
delay(200);//延时
P1=P1|0x7f;//熄灭所有发光二极管
delay(200);//延时
}
}
//函数名:delay
//函数功能:实现软件延时
//形式参数:unsigned char i;
// i控制空循环的外循环次数,共循环i*255次
//返回值:无
void delay(unsigned char i)//延时函数,无符号字符型变量i为形式参数
空类型
二、常量和变量
1、常量
常量是指在程序执行期间其值固定,不能被改变的量。常量的数据类型有整型、浮点型、字符型、字符串型和位类型。
1、变量
变量是一种在程序执行过程中其值能不断变化的量。
3、变量存储种类
4、变量存储器类型
举例://程序:ex3_8.c
//功能:流水灯控制程序
#include <reg51.h>//包含头文件REG51.H
运算符
名称
功能
+
加法
求两个数的和

减法
求两个数的差
*
乘法
求两个数的积
/
除法
求两个数的商
%
取余
求两个数的余
++
自增1
变量自动加1
--
自减1
变量自动减1
2、赋值运算符与赋值表达式
变量=表达式
3、关系运算符与关系表达式
运算符
功能

大于
>=
大于等于

小于
<=
小于等于
==
等于
!=
不等于
4、逻辑运算符与逻辑表达式
边讲解,边举例
举例分析
小组讨论
举例分析
案例分析,小组讨论
进一步理解编程技巧
进一步理解编程技巧
教学后记
教师提供具体案例(源程序),布置任务,小组讨论,充分体现学生在教学过程的主体性,效果良好。
学科
单片机应用技术
授课班级
10411-10414
日期
3.28
课题
任务5:流水灯的控制(3-5 C语言基本数据和运算)
授课类型
案例分析
小组讨论
课时
4
教材
单片机应用技术(C语言版)
任课教师
课序
教学目标
认知目标
1、了解C语言数据类型和运算符和表达式
能力目标
1、初步学会各种数据类型和运算符在C语言源程序中的应用。
案例分析、小组讨论
课前准备
教师准备:1、教案设计、PPT准备
学生准备:1、学生预习2、完成预习报告,明确任务
设计意图
通过典型案例,学生分组讨论,体现学生在教学过程的中的主体地位,教师加以适当的引导,完成教学任务。
教学过程
教学内容
教师活动
学生活动
数据类型
导入:
基本数据类型
扩展数据类型
常量
数值常量
符号常量
{
unsigned char j,k;//定义无符号字符型变量j和k
for(k=0;k<i;k++)//双重for循环语句实现软件延时
for(j=0;j<255;j++);
}
6、逗号运算符合逗号运算表达式
小结:数据类型、常量和变量、运算符
作业布置:选择6-15题
填空12-15题
综述,让学生总体有个认识
void main()//主函数
{
while(1) {
P1=0x00;//P1口全部清0,即点亮8个发光二极管
delay(200);//延时
P1=P1|0x01;//熄灭第1个发光二极管
delay(200);//延时
P1=P1|0x03;//熄灭第1、2个发光二极管
delay(200);//延时
P1=P1|0x07;//熄灭第1~3个发光二极管
情感目标
1、通过案例分析和讨论教学培养学生学习电子专业单片机课程的浓厚兴趣;
2、养成做事耐心、细致、严谨的科学作风;
3、提高学生“6S管理”意识。
教学重点
了解C语言的数据类型、常量和变量、运算符和表达式等基本概念及基本使用方法。
教学难点
数据类型、常量和变量、运算符和表达式的基本概念和使用方法
教学方法
C语言数据与运算
变量
变量存储器类型
变量存储器模式
运算符
常用运算符用法
运算符优先级和结合
运算符表达式
新授:第三章:单片机并行I/O端口应用
3.5 C语言数据与运算
一、数据类型
端整型
整型整型
数值长整型
类型
基本符号实型单精度型
类型双精度型
类型枚举
类型
数组类型
构造结构类型
类型共用类型
文件类型
数据类型
分类指针类型
相关文档
最新文档