收藏 分享(赏)

单片机C语言程序设计实训电路100例—基于8051+Proteus仿真.pdf

上传人:精品资料 文档编号:10531657 上传时间:2019-11-26 格式:PDF 页数:59 大小:774.91KB
下载 相关 举报
单片机C语言程序设计实训电路100例—基于8051+Proteus仿真.pdf_第1页
第1页 / 共59页
单片机C语言程序设计实训电路100例—基于8051+Proteus仿真.pdf_第2页
第2页 / 共59页
单片机C语言程序设计实训电路100例—基于8051+Proteus仿真.pdf_第3页
第3页 / 共59页
单片机C语言程序设计实训电路100例—基于8051+Proteus仿真.pdf_第4页
第4页 / 共59页
单片机C语言程序设计实训电路100例—基于8051+Proteus仿真.pdf_第5页
第5页 / 共59页
点击查看更多>>
资源描述

1、 1 上海师范大学信息与机电工程学院倪继锋 单片机C语言程序设计实训 100 例基于 8051+Proteus仿真 第 01 篇 基础程序设计 01 闪烁的 LED /* 名称:闪烁的 LED 说明:LED 按设定的时间间隔闪烁 */ #include #define uchar unsigned char #define uint unsigned int sbit LED=P10; /延时 void DelayMS(uint x) uchar i; while(x-) for(i=0;i #include #define uchar unsigned char #define uint u

2、nsigned int 单片机 语 言程序设计实训 例 基于 和 仿真案例 C 100 - 8051 PROTEUS 2 上海师范大学信息与机电工程学院倪继锋 /延时 void DelayMS(uint x) uchar i; while(x-) for(i=0;i #include #define uchar unsigned char #define uint unsigned int /延时 void DelayMS(uint x) uchar i; while(x-) for(i=0;i120;i+); /主程序 void main() uchar i; P2=0x01; while(

3、1) 单片机 语 言程序设计实训 例 基于 和 仿真案例 C 100 - 8051 PROTEUS 3 上海师范大学信息与机电工程学院倪继锋 for(i=0;i #define uchar unsigned char #define uint unsigned int uchar code Pattern_P0= 0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0

4、x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f, 0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff, 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x

5、ff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe, 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff ; uchar code Pattern_P2= 0xff,0xff,0xff,0xff,0xff,0xff

6、,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff, 0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f, 0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff, 0xff,

7、0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f, 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00, 0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0x

8、ff,0xff,0xff,0xff, 单片机 语 言程序设计实训 例 基于 和 仿真案例 C 100 - 8051 PROTEUS 4 上海师范大学信息与机电工程学院倪继锋 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff ; /延时 void DelayMS(uint x) uchar i; while(x-) for(i=0;i #define uchar unsigned char #define uint unsigned int sbit RED_A=P00; / 东西向 灯 sbit YELLOW_A=P01; sbit GREEN_A=P02; sb

9、it RED_B=P03; / 南北向 灯 sbit YELLOW_B=P04; sbit GREEN_B=P05; uchar Flash_Count=0,Operation_Type=1; / 闪烁次数,操作类型变量 单片机 语 言程序设计实训 例 基于 和 仿真案例 C 100 - 8051 PROTEUS 5 上海师范大学信息与机电工程学院倪继锋 /延时 void DelayMS(uint x) uchar i; while(x-) for(i=0;i120;i+); /交通灯切换 void Traffic_Light() switch(Operation_Type) case 1:

10、/ 东西向绿灯 与南北向红灯亮 RED_A=1;YELLOW_A=1;GREEN_A=0; RED_B=0;YELLOW_B=1;GREEN_B=1; DelayMS(2000); O p e r a t i o n _ T y p e = 2 ; b r e a k ; case 2: / 东西向黄灯 闪烁,绿灯关闭 D e l a y M S ( 3 0 0 ) ; YELLOW_A=YELLOW_A;GREEN_A=1; if(+Flash_Count!=10) return; / 闪烁 5 次 Flash_Count=0; O p e r a t i o n _ T y p e = 3

11、 ; b r e a k ; case 3: / 东西向红灯 ,南北向绿灯亮 RED_A=0;YELLOW_A=1;GREEN_A=1; RED_B=1;YELLOW_B=1;GREEN_B=0; DelayMS(2000); O p e r a t i o n _ T y p e = 4 ; b r e a k ; case 4: / 南北向黄灯 闪烁 5 次 D e l a y M S ( 3 0 0 ) ; YELLOW_B=YELLOW_B;GREEN_B=1; if(+Flash_Count!=10) return; Flash_Count=0; O p e r a t i o n

12、_ T y p e = 1 ; /主程序 void main() while(1) Traffic_Light(); 06 单只数 码管循环 显 示 09 单片机 语 言程序设计实训 例 基于 和 仿真案例 C 100 - 8051 PROTEUS 6 上海师范大学信息与机电工程学院倪继锋 /* 名称:单只数码管循环显示 09 说明:主程序中的循环语句反复将 09 的段码送 至 P0 口,使 数字 09 循 环显示 */ #include #include #define uchar unsigned char #define uint unsigned int uchar code DSY_

13、CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff; /延时 void DelayMS(uint x) uchar t; while(x-) for(t=0;t #include #define uchar unsigned char #define uint unsigned int uchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /延时 void DelayMS(uint x) uchar t; while(x-) for(t=0

14、;t120;t+); 单片机 语 言程序设计实训 例 基于 和 仿真案例 C 100 - 8051 PROTEUS 7 上海师范大学信息与机电工程学院倪继锋 /主程序 void main() uchar i,wei=0x80; while(1) for(i=0;i #include #define uchar unsigned char #define uint unsigned int uchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /延时 void DelayMS(uint x) uchar t;

15、 while(x-) for(t=0;t120;t+); /主程序 void main() uchar i,wei=0x80; while(1) for(i=0;i8;i+) P 0 = 0 x f f ; P0=DSY_CODEi; / 发 送段码 wei=_crol_(wei,1); 单片机 语 言程序设计实训 例 基于 和 仿真案例 C 100 - 8051 PROTEUS 8 上海师范大学信息与机电工程学院倪继锋 P 2 = w e i ; / / 发送位 码 D e l a y M S ( 2 ) ; 09 8 只 数码 管闪烁显 示 数字串 电路如上 图 /* 名称:8 只数 码管

16、闪烁显示数字串 说明:数码管闪烁显示由 07 构成 的一串数字 本例用动 态刷新法显示一串数字,在停止刷新时所有数字显示消失。 */ #include #define uchar unsigned char #define uint unsigned int /段码表 uchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /位码表 uchar code DSY_IDX=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80; /延时 void DelayMS(uint x) ucha

17、r t; while(x-) for(t=0;t120;t+); /主程序 void main() uchar i,j; while(1) for(i=0;i30;i+) for(j=0;j8;j+) P 0 = 0 x f f ; P 0 = D S Y _ C O D E j ; / / 发 送段码 P 2 = D S Y _ I D X j ; / / 发送位码 D e l a y M S ( 2 ) ; P2=0x00; / 关闭所有 数码管并延时 DelayMS(1000); 单片机 语 言程序设计实训 例 基于 和 仿真案例 C 100 - 8051 PROTEUS 9 上海师范大

18、学信息与机电工程学院倪继锋 10 8 只 数码 管滚动显 示 数字串 电路如上 图 /* 名称:8 只数 码管滚动显示数字串 说明:数码管向左滚动显示 3 个字 符构成的数字串 */ #include #include #define uchar unsigned char #define uint unsigned int /段码表 uchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff; /下面数组看 作环形队列,显示从某个数开始的 8 个数(10 表示黑屏) uchar Num=10,10,10

19、,10,10,10,10,10,2,9,8; /延时 void DelayMS(uint x) uchar t; while(x-) for(t=0;t120;t+); /主程序 void main() uchar i,j,k=0,m=0x80; while(1) / 刷新若干次 ,保持一段时间的稳定显示 for(i=0;i15;i+) for(j=0;j8;j+) / / 发送段码, 采用环形取法,从第 k 个开始取第 j 个 P 0 = 0 x f f ; P0=DSY_CODENum(k+j)%11; m=_crol_(m,1); P 2 = m ; / / 发送位码 D e l a y

20、 M S ( 2 ) ; k=(k+1)%11; / 环形队列首 支针 k 递增 ,Num 下标 范围 010,故 对 11 取余 11 K1-K4 控制 LED 移位 /* 名称:K1-K4 控制 LED 移位 说明:按下 K1 时,P0 口 LED 上移一位; 单片机 语 言程序设计实训 例 基于 和 仿真案例 C 100 - 8051 PROTEUS 10 上海师范大学信息与机电工程学院倪继锋 按下 K2 时,P0 口 LED 下移一位; 按下 K3 时,P2 口 LED 上移一位; 按下 K4 时,P2 口 LED 下移一位; */ #include #include #define

21、uchar unsigned char #define uint unsigned int /延时 void DelayMS(uint x) uchar i; while(x-) for(i=0;i120;i+); / 根据 P1 口的按键移动 LED void Move_LED() if (P1 /K1 else if(P1 /K2 else if(P1 /K3 else if(P1 /K4 /主程序 void main() uchar Recent_Key; / 最近按键 P0=0xfe; P2=0xfe; P1=0xff; Recent_Key=0xff; while(1) if(Rec

22、ent_Key!=P1) Recent_Key=P1; / 保存最近 按键 M o v e _ L E D ( ) ; D e l a y M S ( 1 0 ) ; 12 K1-K4 按键状态 显 示 单片机 语 言程序设计实训 例 基于 和 仿真案例 C 100 - 8051 PROTEUS 11 上海师范大学信息与机电工程学院倪继锋 /* 名称:K1-K4 按键状态显 示 说明:K1 、K2 按下时 LED 点亮,松开时熄灭, K 3 、K4 按 下并释放时 LED 点亮,再次按下并释放时熄灭; */ #include #define uchar unsigned char #defin

23、e uint unsigned int sbit LED1=P00; sbit LED2=P01; sbit LED3=P02; sbit LED4=P03; sbit K1=P10; sbit K2=P11; sbit K3=P12; sbit K4=P13; /延时 void DelayMS(uint x) uchar i; while(x-) for(i=0;i120;i+); /主程序 void main() P0=0xff; P1=0xff; while(1) LED1=K1; LED2=K2; if(K3=0) w h i l e ( K 3 = = 0 ) ; LED3=LED3

24、; if(K4=0) w h i l e ( K 4 = = 0 ) ; LED4=LED4; DelayMS(10); 13 K1-K4 分组控制 LED 单片机 语 言程序设计实训 例 基于 和 仿真案例 C 100 - 8051 PROTEUS 12 上海师范大学信息与机电工程学院倪继锋 /* 名称:K1-K4 分组控制 LED 说明:每次按下 K1 时递 增点亮一只 LED ,全亮时再次按下则再次循环开始, K 2 按下后 点亮上面 4 只 LED ,K3 按下后点亮下面 4 只 LED ,K4 按下后关闭所有 LED */ #include #define uchar unsigne

25、d char #define uint unsigned int /延时 void DelayMS(uint x) uchar i; while(x-) for(i=0;i 4 ; k = 0 ; / / 检查 1 所在 位置,累加获取按键号 k while(Key_State!=0) k + + ; K e y _ S t a t e = 1 ; / / 根据按键号 k 进行 4 种处 理 switch(k) case 1: if(P0=0x00) P0=0xff; P 0 = 1 ; D e l a y M S ( 2 0 0 ) ; b r e a k ; case 2: P0=0xf0

26、;break; 单片机 语 言程序设计实训 例 基于 和 仿真案例 C 100 - 8051 PROTEUS 13 上海师范大学信息与机电工程学院倪继锋 case 3: P0=0x0f;break; case 4: P0=0xff; 14 K1-K4 控制数码 管 移位显示 /* 名称:K1-K4 控制数码管 移位显示 说明:按下 K1 时加 1 计 数并增加显示位, 按下 K2 时减 1 计数并 减少显示位, 按下 K3 时 清零。 */ #include #define uchar unsigned char #define uint unsigned int /段码 uchar code

27、 DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff; /位码 uchar code DSY_Index=0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01; /待显示到各 数码管的数字缓冲(开始仅在 0 位显 示 0 ,其他 黑屏) uchar Display_Buffer=0,10,10,10,10,10,10,10; /延时 void DelayMS(uint x) uchar i; while(x-) for(i=0;i120;i+); void Show_Count_ON_DSY(

28、) uchar i; for(i=0;i8;i+) P0=0xff; P0=DSY_CODEDisplay_Bufferi; P2=DSY_Indexi; D e l a y M S ( 2 ) ; /主程序 void main() uchar i,Key_NO,Key_Counts=0; 单片机 语 言程序设计实训 例 基于 和 仿真案例 C 100 - 8051 PROTEUS 14 上海师范大学信息与机电工程学院倪继锋 P0=0xff; P1=0xff; P2=0x00; while(1) Show_Count_ON_DSY(); P1=0xff; Key_NO=P1; /P1 口按键

29、状态分别为 K1-0xfe ,K2-0xfd,K3-0xfb switch(Key_NO) case 0xfe: Key_Counts+; if(Key_Counts8) Key_Counts=8; Display_BufferKey_Counts-1=Key_Counts; b r e a k ; case 0xfd: if(Key_Counts0)Display_Buffer-Key_Counts=10; b r e a k ; case 0xfb: Display_Buffer0=0; f o r ( i = 1 ; i #include #define uchar unsigned c

30、har #define uint unsigned int /段码 uchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff; /待显示的 3 位缓冲 uchar Num_Buffer=0,0,0; /按键代码, 按键计数 uchar Key_Code,Key_Counts=0; /延时 void DelayMS(uint x) 单片机 语 言程序设计实训 例 基于 和 仿真案例 C 100 - 8051 PROTEUS 15 上海师范大学信息与机电工程学院倪继锋 uchar i; while(x-)

31、for(i=0;i0) Key_Counts-; b r e a k ; case 0xfb: Key_Counts=0; Key_Code=0xff; 单片机 语 言程序设计实训 例 基于 和 仿真案例 C 100 - 8051 PROTEUS 16 上海师范大学信息与机电工程学院倪继锋 16 4X4 矩阵键盘控制条 形 LED 显示 /* 名称: 4X4 矩 阵键盘控 制条形 LED 显示 说明: 运行本例时, 按 下的按键值越大点亮的 LED 越多。 */ #include #include #define uchar unsigned char #define uint unsigne

32、d int /矩阵键盘按 键特征码表 uchar code KeyCodeTable=0x11,0x12,0x14,0x18,0x21, 0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88; /延时 void DelayMS(uint x) uchar i; while(x-) for(i=0;i120;i+); /键盘扫描 uchar Keys_Scan() uchar sCode,kCode,i,k; /低 4 位置 0 ,放入 4 行 P1=0xf0; /若高 4 位出 现 0 ,则有键 按下 if(P1 if(P1 / / 行扫

33、描码初 值 for(k=0;k4;k+) / 对 4 行分别 进行扫描 P 1 = s C o d e ; if(P1 for(i=0;i16;i+) / 查表得到按 键序号并返回 i f ( k C o d e = = K e y C o d e T a b l e i ) 单片机 语 言程序设计实训 例 基于 和 仿真案例 C 100 - 8051 PROTEUS 17 上海师范大学信息与机电工程学院倪继锋 return(i); e l s e sCode=_crol_(sCode,1); return(-1); /主程序 void main() uchar i,P2_LED,P3_LED

34、; uchar KeyNo=-1; / 按键序号,-1 表示无按 键 while(1) KeyNo=Keys_Scan(); /扫描键盘获 取按键序号 KeyNo if(KeyNo!=-1) P2_LED=0xff; P3_LED=0xff; for(i=0;i = 1 ; e l s e P 2 _ L E D = 1 ; P 3 = P 3 _ L E D ; / / 点亮条形 LED P 2 = P 2 _ L E D ; 17 数码管 显示 4X4 矩 阵键盘按 键号 /* 名称: 数码管显示 4X4 矩阵 键盘按键号 说明:按下任意键时,数码 管都会显示 其键的序号 ,扫描程 序首先

35、判断 按键发生在 哪一列, 然后根据所 发生的行附 加不同的 值,从而得到按键的序号。 */ 单片机 语 言程序设计实训 例 基于 和 仿真案例 C 100 - 8051 PROTEUS 18 上海师范大学信息与机电工程学院倪继锋 #include #define uchar unsigned char #define uint unsigned int /段码 uchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00; sbit BEEP=

36、P37; /上次按键和 当前按键的序号,该矩阵中序号范围 015,16 表示无按键 uchar Pre_KeyNo=16,KeyNo=16; /延时 void DelayMS(uint x) uchar i; while(x-) for(i=0;i40x0f;/ 按键 后 f0 变成 XXXX0000 ,X 中有 1 个为 0 , 三个仍 为 1;高 4 位 转移到低 4 位并 异或得到改变的值 switch(Tmp) /对 03 行分 别附加起始值 0 ,4 ,8 ,12 case 1: KeyNo+=0;break; case 2: KeyNo+=4;break; case 4: KeyN

37、o+=8;break; case 8: KeyNo+=12; /蜂鸣器 void Beep() 单片机 语 言程序设计实训 例 基于 和 仿真案例 C 100 - 8051 PROTEUS 19 上海师范大学信息与机电工程学院倪继锋 uchar i; for(i=0;i sbit S1=P10; sbit S2=P11; sbit LED1=P00; sbit LED2=P01; /主程序 void main() while(1) LED1=S1; 单片机 语 言程序设计实训 例 基于 和 仿真案例 C 100 - 8051 PROTEUS 20 上海师范大学信息与机电工程学院倪继锋 LED2

38、=S2; 19 继电器 控制照明 设 备 /* 名称:继电器控制照明设备 说明: 按下 K1 灯点亮, 再 次 按下时灯熄灭 */ #include #define uchar unsigned char #define uint unsigned int sbit K1=P10; sbit RELAY=P24; /延时 void DelayMS(uint ms) uchar t; while(ms-)for(t=0;t #include #define uchar unsigned char 单片机 语 言程序设计实训 例 基于 和 仿真案例 C 100 - 8051 PROTEUS 21

39、上海师范大学信息与机电工程学院倪继锋 #define uint unsigned int /各数字的数 码管段码(共阴) uchar code DSY_CODE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /显示缓冲 uchar DSY_Buffer3=0,0,0; /延时 void DelayMS(uint ms) uchar t; while(ms-)for(t=0;t #define uchar unsigned char #define uint unsigned int sbit SPK=P10; sbit K1=P17; /

40、发声函数 单片机 语 言程序设计实训 例 基于 和 仿真案例 C 100 - 8051 PROTEUS 22 上海师范大学信息与机电工程学院倪继锋 void Alarm(uchar t) uchar i,j; for(i=0;i #define uchar unsigned char #define uint unsigned int sbit BEEP=P37; sbit K1=P14; sbit K2=P15; sbit K3=P16; sbit K4=P17; /延时 void DelayMS(uint x) uchar t; while(x-) for(t=0;t120;t+); /按

41、周期 t 发音 void Play(uchar t) 单片机 语 言程序设计实训 例 基于 和 仿真案例 C 100 - 8051 PROTEUS 23 上海师范大学信息与机电工程学院倪继锋 uchar i; for(i=0;i #define uchar unsigned char #define uint unsigned int sbit BEEP=P37; /生日快乐歌 的音符频率表,不同频率由不同的延时来决定 uchar code SONG_TONE=212,212,190,212,159,169,212,212,190,212,142,159, 212,212,106,126,15

42、9,169,190,119,119,126,159,142,159,0; /生日快乐歌 节拍表,节拍决定每个音符的演奏长短 uchar code SONG_LONG=9,3,12,12,12,24,9,3,12,12,12,24, 9,3,12,12,12,12,12,9,3,12,12,12,24,0; /延时 void DelayMS(uint x) uchar t; while(x-) for(t=0;t120;t+); /播放函数 void PlayMusic() 单片机 语 言程序设计实训 例 基于 和 仿真案例 C 100 - 8051 PROTEUS 24 上海师范大学信息与机电

43、工程学院倪继锋 uint i=0,j,k; while(SONG_LONGi!=0|SONG_TONEi!=0) / 播放各个音 符,SONG_LONG 为拍子 长度 for(j=0;j #define uchar unsigned char #define uint unsigned int /09 的段码 uchar code DSY_CODE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00; /计数值分解 后各个待显示的数位 uchar DSY_Buffer=0,0,0; uchar Count=0; sbit Clear_K

44、ey=P36; /数码管上显 示计数值 void Show_Count_ON_DSY() DSY_Buffer2=Count/100; / 获取 3 个数 单片机 语 言程序设计实训 例 基于 和 仿真案例 C 100 - 8051 PROTEUS 25 上海师范大学信息与机电工程学院倪继锋 DSY_Buffer1=Count%100/10; DSY_Buffer0=Count%10; if(DSY_Buffer2=0) / 高位为 0 时 不显示 DSY_Buffer2=0x0a; if(DSY_Buffer1=0) / 高位为 0 ,若 第二位为 0 同样不显示 DSY_Buffer1=0

45、x0a; P0=DSY_CODEDSY_Buffer0; P1=DSY_CODEDSY_Buffer1; P2=DSY_CODEDSY_Buffer2; /主程序 void main() P0=0x00; P1=0x00; P2=0x00; IE=0x81; / 允许 INT0 中断 IT0=1; / 下降沿触发 while(1) if(Clear_Key=0) Count=0; / 清 0 Show_Count_ON_DSY(); /INT0 中断 函数 void EX_INT0() interrupt 0 Count+; / 计数值递增 25 外部 INT0 中 断控制LED /* 名称:

46、外部 INT0 中断控 制 LED 说明:每次按键都会触发 INT0 中 断,中断发生时将 LED 状态取反,产 生 LED 状态由按键控制的效果 */ #include #define uchar unsigned char #define uint unsigned int sbit LED=P00; /主程序 void main() 单片机 语 言程序设计实训 例 基于 和 仿真案例 C 100 - 8051 PROTEUS 26 上海师范大学信息与机电工程学院倪继锋 LED=1; EA=1; EX0=1; IT0=1; while(1); /INT0 中断 函数 void EX_INT

47、0() interrupt 0 LED=LED; / 控制 LED 亮灭 26 INT0 及 INT1 中断计 数 /* 名称:INT0 及 INT1 中断计数 说明:每次按下第 1 个 计数键时, 第 1 组计数值累加并显示在右边 3 只数 码管上, 每次按下第 2 个计数键时, 第 2 组计数值累 加并显示在左边 3 只数 码管上,后两个按键分别清零。 */ #include #define uchar unsigned char #define uint unsigned int sbit K3=P34; /2 个清零键 sbit K4=P35; /数码管段码 与位码 uchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff; uchar code DSY_Scan_Bits=0x20,0x10,0x08,0x04,0x0

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报