1、lesson1对照 TX-1C 单片机学习板原理图写程序用位操作和总线操作两种方法完成以下题目1.熟练建立 KEIL 工程2.点亮第一个发光管.3.点亮最后一个发光管4.点亮 1、3、5、75.点亮二、四、五、六6.尝试让第一个发光管闪烁7.尝试设计出流水灯程序=lesson2第一个发光管以间隔 200ms 闪烁8 个发光管由上至下间隔 1s 流动,其中每个管亮 500ms,灭 500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。8 个发光管来回流动,第个管亮 100ms,流动时让蜂鸣器发出“滴滴”声。用 8 个发光管演示出 8 位二进制数累加过程。8 个发光管间隔 200ms 由上至下,
2、再由下至上,再重复一次,然后全部熄灭再以 300ms 间隔全部闪烁 5 次。重复此过程。间隔 300ms 第一次一个管亮流动一次,第二次两个管亮流动,依次到 8 个管亮,然后重复整个过程。间隔 300ms 先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8 个全部闪烁 3 次;关闭发光管,程序停止。=lesson31、利用定时/计数器 T0 从 P1.0 输出周期为 1s 的方波,让发光二极管以 1HZ 闪烁,设晶振频率为 12MHz。 。2、利用定时/计数器 T1 产生定时时钟,由 P1 口控制 8 个发光二极管,使 8 个指示灯依次一个
3、一个闪动,闪动频率为 10 次/ 秒(8 个灯依次亮一遍为一个周期),循环。3、同时用两个定时器控制蜂鸣器发声,定时器 0 控制频率,定时器1 控制同个频率持续的时间,间隔 300ms 依次输出1,10 ,50,100,200,400,800,1k( hz)的方波。4、用定时器以间隔 500MS 在 6 位数码管上依次显示0、1 、2 、3 .C、D 、E、F ,重复。lesson41.利用动态扫描方法在六位数码管上显示出稳定的 654321.2.用动态扫描方法和定时器 1 在数码管的前三位显示出秒表,精确到 1%秒,即后两位显示 1%秒,一直循环下去。3.利用动态扫描和定时器 1 在数码管上
4、显示出从 765432 开始以 1/10秒的速度往下递减直至 765398 并保持显示此数,与此同时利用定时器 0 以 500MS 速度进行流水灯从上至下移动,当数码管上数减到停止时,实验板上流水灯也停止然后全部开始闪烁,3 秒后(用 T0 定时)流水灯全部关闭、数码管上显示出“HELLO” 。到此保持住。lesson5数码管前三位显示一个跑表,从 000 到 999 之间以 1%秒速度运行,当按下一个独立键盘时跑表停止,松开手后跑表继续运行。(用定时器设计表)。在上题的基础上,用另外三个独立键盘实现按下第一个时计时停止,按下第二个时计时开始,按下第三个是计数值清零从头开始。按下 16 个矩阵
5、键盘依次在数码管上显示 1-16 的平方。如按下第一个显示 1,第二个显示 4.=lesson71.由上位机发送 1 给单片机时,蜂鸣器以 400ms 频率发声,发 2 时以 200ms 频率发声,发 3 时以 100ms 频率发声,发 4 时关闲蜂鸣器。1.以 2400bps 从计算机发送任一字节数据,当单片机收到该数据后,在此数据前加上一序号然后连同此数据一起发送至计算机,当序号超过 255 时归零。2.以 16 进制发送一个 0-65536 之间的任一数,当单片机收到后在数码管上动态显示出来,波特率自定。3. 用 AD 以 1HZ 的频率采集模拟信号,然后转换成数字量,再将其以 1200
6、bps 发送到计算机,在计算机上显示。4.按下矩阵键盘第一行时以 1200bps 发送,1,2 ,3,4,第二行时以 2400bps 发送 5,6,7 ,8,第三行以 4800bps 发送,9,10 ,11 ,12,第四行以 9600pbs 发送,13,14,15 ,16.=Lesson1 作业1 用位操作点亮第一个发光管./ 适用 TX-1C 单片机实验板/ 晶振为 11.0592M/*/#include /52 单片机头文件sbit led1=P10; /单片机管脚位声明void main() /主函数led1=0; /将单片机 P1.0 口清零while(1); /程序停止在这里,在后面
7、会讲到为什么这样写。2/ 用总线操作点亮第一个发光管./ 适用 TX-1C 单片机实验板/ 晶振为 11.0592M/*/#include /52 单片机头文件void main() /主函数P1=0xfe; /将单片机 P1 口的 8 个口由高到低分别赋值为 11111110while(1); /程序停止在这里,在后面会讲到为什么这样写。3 / / 用位操作点亮最后一个发光管./ 适用 TX-1C 单片机实验板/ 晶振为 11.0592M/*/#include /52 单片机头文件sbit led8=P17; /单片机管脚位声明void main() /主函数led8=0; /将单片机 P1
8、.7 口清零while(1); /程序停止在这里,在后面会讲到为什么这样写。4 / 用总线操作点亮最后一个发光管./ 适用 TX-1C 单片机实验板/ 晶振为 11.0592M/*/#include /52 单片机头文件void main() /主函数P1=0x7f; /将单片机 P1 口的 8 个口由高到低分别赋值为 01111111while(1); /程序停止在这里,在后面会讲到为什么这样写。5 / 用位操作点亮 1,3,5,7 发光管 ./ 适用 TX-1C 单片机实验板/ 晶振为 11.0592M/*/#include /52 单片机头文件sbit led1=P10; /单片机管脚位
9、声明sbit led3=P12; /单片机管脚位声明sbit led5=P14; /单片机管脚位声明sbit led7=P16; /单片机管脚位声明void main() /主函数led1=0; /将单片机 P1.0 口清零led3=0; /将单片机 P1.2 口清零led5=0; /将单片机 P1.4 口清零led7=0; /将单片机 P1.6 口清零while(1); /程序停止在这里,在后面会讲到为什么这样写。6 / 用总线操作点亮 1,3,5,7 发光管./ 适用 TX-1C 单片机实验板/ 晶振为 11.0592M/*/#include /52 单片机头文件void main() /
10、主函数P1=0xaa; /将单片机 P1 口的 8 个口由高到低分别赋值为 10101010while(1); /程序停止在这里,在后面会讲到为什么这样写。7 / 用位操作点亮 2,4,5,6 发光管./ 适用 TX-1C 单片机实验板/ 晶振为 11.0592M/*/#include /52 单片机头文件sbit led2=P11; /单片机管脚位声明sbit led4=P13; /单片机管脚位声明sbit led5=P14; /单片机管脚位声明sbit led6=P15; /单片机管脚位声明void main() /主函数led2=0; /将单片机 P1.1 口清零led4=0; /将单片
11、机 P1.3 口清零led5=0; /将单片机 P1.4 口清零led6=0; /将单片机 P1.5 口清零while(1); /程序停止在这里,在后面会讲到为什么这样写。8 / 用总线操作点亮 2,4,5,6 发光管./ 适用 TX-1C 单片机实验板/ 晶振为 11.0592M/*/#include /52 单片机头文件void main() /主函数P1=0xc5; /将单片机 P1 口的 8 个口由高到低分别赋值为 11000101while(1); /程序停止在这里,在后面会讲到为什么这样写。9 / 尝试让第一个发光管闪烁.(程序看不懂没关系,后面章节会有详细讲解)/ 适用 TX-1
12、C 单片机实验板/ 晶振为 11.0592M/*/#include /52 单片机头文件sbit led1=P10; /单片机管脚位声明void main() /主函数unsigned int i; /定义一个 int 型变量while(1)i=50000; /变量赋初值为 50000led1=0; /点亮灯while(i-); /延时i=50000;led1=1; /熄灭灯while(i-); 9 / 尝试写出流水灯程序(程序看不懂没关系,后面章节会有详细讲解)/ 适用 TX-1C 单片机实验板/ 晶振为 11.0592M/*/#include /52 单片机头文件void main() /
13、主函数unsigned int i; /定义一个 int 型变量while(1)i=50000; /变量赋初值为 50000P1=0xfe; /点亮第一个灯while(i-); /延时i=50000; /变量赋初值为 50000P1=0xfd; /点亮第二个灯while(i-); /延时i=50000; /变量赋初值为 50000P1=0xfb; /点亮第三个灯while(i-); /延时i=50000; /变量赋初值为 50000P1=0xf7; /点亮第四个灯while(i-); /延时i=50000; /变量赋初值为 50000P1=0xef; /点亮第五个灯while(i-); /延时
14、i=50000; /变量赋初值为 50000P1=0xdf; /点亮第六个灯while(i-); /延时i=50000; /变量赋初值为 50000P1=0xbf; /点亮第七个灯while(i-); /延时i=50000; /变量赋初值为 50000P1=0x7f; /点亮第八个灯while(i-); /延时 Lesson 21 / 第一个发光管以间隔 200ms 闪烁/ 适用 TX-1C 单片机实验板/ 晶振为 11.0592M/*/#include /52 单片机头文件#define uint unsigned int /宏定义#define uchar unsigned char /宏
15、定义sbit led1=P10; /单片机管脚位声明void delay(uint z) /延时函数,z 的取值为这个函数的延时 ms 数,如 delay(200);大约延时200ms. /delay(500);大约延时 500ms.uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void main() /主函数while(1) /大循环led1=0; /点亮小灯delay(200); /延时 200 毫秒led1=1; /熄灭小灯delay(200); /延时 200 毫秒2 / 8 个发光管由上至下间隔 1s 流动/,其中每个管亮 500ms,灭 500ms
16、,亮时蜂鸣器响/,灭时关闭蜂鸣器,一直重复下去。/ 适用 TX-1C 单片机实验板/ 晶振为 11.0592M/*/#include /52 单片机头文件#include /包含有左右循环移位子函数的库#define uint unsigned int /宏定义#define uchar unsigned char /宏定义sbit beep=P23;void delay(uint z) /延时函数,z 的取值为这个函数的延时 ms 数,如 delay(200);大约延时200ms. /delay(500);大约延时 500ms.uint x,y;for(x=z;x0;x-)for(y=110
17、;y0;y-);void main() /主函数uchar a;a=0xfe;while(1) /大循环P1=a; /点亮小灯beep=0; /开启蜂鸣器delay(500); /延时 500 毫秒P1=0xff; /熄灭小灯beep=1; /关闭蜂鸣器delay(500); /延时 500 毫秒a=_crol_(a,1); /将 a 变量循环左移一位3 /* 8 个发光管来回流动,每个管亮 100ms,流动时让蜂鸣器发出“滴滴“声。*/*/#include /52 单片机头文件#include /包含有左右循环移位子函数的库#define uint unsigned int /宏定义#def
18、ine uchar unsigned char /宏定义sbit beep=P23;void delay(uint z) /延时函数,z 的取值为这个函数的延时 ms 数,如 delay(200);大约延时200ms. /delay(500);大约延时 500ms.uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void main() /主函数uchar a,i;while(1) /大循环a=0xfe; /赋初值for(i=0;i /52 单片机头文件#include /包含有左右循环移位子函数的库#define uint unsigned int /宏定义#d
19、efine uchar unsigned char /宏定义void delay(uint z) /延时函数,z 的取值为这个函数的延时 ms 数,如 delay(200);大约延时200ms. /delay(500);大约延时 500ms.uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void main() /主函数uchar a;while(1) /大循环a+;P1=a;delay(200);5 /* 8 个发光管间隔 200ms 由上至下,再由下至上,再重复一次,然后全部熄灭再以 300ms 间隔全部闪烁 5 次。重复此过程*/*/#include /5
20、2 单片机头文件#include /包含有左右循环移位子函数的库#define uint unsigned int /宏定义#define uchar unsigned char /宏定义void delay(uint z) /延时函数,z 的取值为这个函数的延时 ms 数,如 delay(200);大约延时200ms. /delay(500);大约延时 500ms.uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void main() /主函数uchar a,i,j;while(1) /大循环for(j=0;j /52 单片机头文件#include /包含有左
21、右循环移位子函数的库#define uint unsigned int /宏定义#define uchar unsigned char /宏定义void delay(uint z) /延时函数,z 的取值为这个函数的延时 ms 数,如 delay(200);大约延时200ms. /delay(500);大约延时 500ms.uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void main() /主函数uchar a,i,j;while(1) /大循环a=0xfe; /赋初值for(j=0;j /52 单片机头文件#include /包含有左右循环移位子函数的库
22、#define uint unsigned int /宏定义#define uchar unsigned char /宏定义void delay(uint z) /延时函数,z 的取值为这个函数的延时 ms 数,如 delay(200);大约延时200ms. /delay(500);大约延时 500ms.uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void main() /主函数uchar a,i,j;for(j=0;j /52 单片机头文件#include /包含有左右循环移位子函数的库#define uint unsigned int /宏定义#defi
23、ne uchar unsigned char /宏定义sbit P1_0=P10;uchar tt;void main() /主函数TMOD=0x01;/设置定时器 0 为工作方式 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;/开总中断ET0=1;/开定时器 0 中断TR0=1;/启动定时器 0while(1);/等待中断产生void timer0() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;tt+;if(tt=20)tt=0;P1_0=P1_0;2 /* 利用定时/计
24、数器 T1 产生定时时钟,由 P1 口控制 8 个发光二极管,使 8 个指示灯依次一个一个闪动,闪动频率为 10 次/秒(8 个灯依次亮一遍为一个周期),循环。设晶振频率为 12MHz。*/*/#include /52 单片机头文件#include /包含有左右循环移位子函数的库#define uint unsigned int /宏定义#define uchar unsigned char /宏定义sbit P1_0=P10;uchar tt,a;void main() /主函数TMOD=0x01;/设置定时器 0 为工作方式 1TH0=(65536-50000)/256;TL0=(6553
25、6-50000)%256;EA=1;/开总中断ET0=1;/开定时器 0 中断TR0=1;/启动定时器 0a=0xfe;while(1);/等待中断产生void timer0() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;tt+;if(tt=2)tt=0;P1=a;a=_crol_(a,1);3 /* 同时用两个定时器控制蜂鸣器发声,定时器 0 控制频率,定时器 1 控制同个频率持续的时间,间隔 2s 依次输出1, 10,50,100,200,400,800,1k( hz)的方波?设晶振频率为 12MHz。*/*/#inclu
26、de /52 单片机头文件#include /包含有左右循环移位子函数的库#define uint unsigned int /宏定义#define uchar unsigned char /宏定义sbit beep=P23;uchar tt;uint fre,flag;void main() /主函数fre=50000;beep=0;TMOD=0x11;/设置定时器 0,定时器 1 为工作方式 1TH0=(65536-fre)/256;TL0=(65536-fre)%256;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;/开总中断ET0=1
27、;/开定时器 0 中断ET1=1;TR1=1;TR0=1;/启动定时器 0while(1);/等待中断产生void timer0() interrupt 1 /定时器 0 中断TR0=0; /进中断后先把定时器 0 中断关闭,防止内部程序过多而造成中断丢失TH0=(65536-fre)/256;TL0=(65536-fre)%256;tt+;if(flag=40 /数码管段选锁存端sbit wela=P27; /数码管位选锁存端uchar num,tt;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77
28、,0x7c,0x39,0x5e,0x79,0x71;void main()num=0;tt=0;TMOD=0x01;/设置定时器 0 为工作方式 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;/开总中断ET0=1;/开定时器 0 中断TR0=1;/启动定时器 0dula=1;P0=0x3f; /给段开始送显示 0。dula=0;/关闭段选锁存端,防止开始时出现乱码。wela=1;/11101010P0=0xc0; / 打开六个数码管位选wela=0;while(1)if(tt=10) /每进入 10 次中断即为 500ms,执行一次显示变化
29、。tt=0;num+;if(num=16)num=0;dula=1;P0=tablenum;dula=0;void exter0() interrupt 1 / 定时器 0 中断TH0=(65536-50000)/256;TL0=(65536-50000)%256;tt+;Lesson41 /* 利用动态扫描方法在六位数码管上显示出稳定的 654321.时钟频率为 11.0592M*/*/#include /52 单片机头文件#include /包含有左右循环移位子函数的库#define uint unsigned int /宏定义#define uchar unsigned char /宏定
30、义sbit dula=P26; /数码管段选锁存端sbit wela=P27; /数码管位选锁存端uchar code table= /数码管显示编码0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void display(uchar,uchar,uchar,uchar,uchar,uchar); /函数声明void delay(uint);void main()while(1)display(6,5,4,3,2,1); /始终显示void display(uchar one,uch
31、ar two,uchar three,uchar four,uchar five,uchar six)dula=1;P0=tableone; /送段数据dula=0;P0=0xff; /送位数据前关闭所有显示,防止打开位选锁存后段选数据通过位选锁存器wela=1;P0=0xfe;wela=0;delay(1);dula=1;P0=tabletwo;dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delay(1);dula=1;P0=tablethree;dula=0;P0=0xff;wela=1;P0=0xfb;wela=0;delay(1);dula=1;P0=ta
32、blefour;dula=0;P0=0xff;wela=1;P0=0xf7;wela=0;delay(1);dula=1;P0=tablefive;dula=0;P0=0xff;wela=1;P0=0xef;wela=0;delay(1);dula=1;P0=tablesix;dula=0;P0=0xff;wela=1;P0=0xdf;wela=0;delay(1);void delay(uint z) /延时子函数uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);2 /* 用动态扫描方法和定时器 1 在数码管的前三位显示出秒表,精确到 1%秒,即最后一位显示 1
33、%秒,一直循环下去设时钟频率为 12M*/*/#include /52 单片机头文件#include /包含有左右循环移位子函数的库#define uint unsigned int /宏定义#define uchar unsigned char /宏定义sbit dula=P26; /数码管段选锁存端sbit wela=P27; /数码管位选锁存端uchar ge,shi,bai;uint tt;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;vo
34、id display(uchar,uchar,uchar); /函数声明void delay(uint);void main()TMOD=0x10;/设置定时器 1 为工作方式 1TH1=(65536-10000)/256;TL1=(65536-10000)%256;EA=1;/开总中断ET1=1;/开定时器 1 中断TR1=1;/启动定时器 1while(1)display(bai,shi,ge);void exter0() interrupt 3 / 定时器 1 中断TH1=(65536-10000)/256;TL1=(65536-10000)%256;tt+;if(tt=1000)tt=
35、0;bai=tt/100;shi=tt%100/10;ge=tt%10;void display(uchar one,uchar two,uchar three)dula=1;P0=tableone; /送段数据dula=0;P0=0xff; /送位数据前关闭所有显示,防止打开位选锁存后段选数据通过位选锁存器wela=1;P0=0xfe;wela=0;delay(1);dula=1;P0=tabletwo;dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delay(1);dula=1;P0=tablethree;dula=0;P0=0xff;wela=1;P0=0xf
36、b;wela=0;delay(1);void delay(uint z) /延时子函数uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);3 /* 利用动态扫描和定时器 1 在数码管上显示出从 765432 开始以 1/10 秒的速度往下递减直至 765398 并保持显示此数,与此同时利用定时器 0 以 500MS 速度进行流水灯从上至下移动,当数码管上数减到停止时,实验板上流水灯也停止然后全部开始闪烁,3 秒后(用 T0 定时)流水灯全部关闭、数码管上显示出“HELLO“。到此保持住。设晶振频率为 12MHz。*/*/#include /52 单片机头文件#inc
37、lude /包含有左右循环移位子函数的库#define uint unsigned int /宏定义#define uchar unsigned char /宏定义sbit dula=P26;sbit wela=P27;uchar code table= /显示数据编码0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x76,0x79,0x38,0x3f,0;uchar temp,t0,t1,bai,shi,ge,flag,flag1;uint shu;void init(); /函
38、数声明void display(uchar aa,uchar bb,uchar cc,uchar bai,uchar shi,uchar ge);void delay(uint z) /延时子函数uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void main() /主函数init();while(1)if(flag1!=1) /如果 flagi 不再等于 1 则显示数据display(7,6,5,bai,shi,ge);elsedisplay(16,17,18,18,19,20); /否则显示 hellovoid init() /初始化函数shu=432;t
39、emp=0xfe;P1=temp;TMOD=0x11;TH0=(65536-50000)/256; /定时器初始化TL0=(65536-50000)%256;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;void timer0() interrupt 1 /定时器 0 中断TH0=(65536-50000)/256;TL0=(65536-50000)%256;t0+;if(flag!=1) /flag 不等于 1 时进行流水灯if(t0=10)t0=1;temp=_crol_(temp,1);P
40、1=temp;else /否则进行灯闪烁if(t0%4=0) /小灯每 200 毫秒变化一次P1=P1;if(t0=60)TR0=0; /3 秒后关闭定时器 0,关闭灯,并置 flag=1P1=0xff;flag1=1;void timer1() interrupt 3 /定时器 1 中断函数TH1=(65536-50000)/256;TL1=(65536-50000)%256;t1+;if(t1=2)t1=0;shu-;bai=shu/100;shi=shu%100/10;ge=shu%10;if(shu=398) /当到 398 时把原来 T0 中的数清除,重新加裁初值让小灯闪烁TR0=0
41、;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;flag=1;t0=0;P1=0xff;TR1=0;void display(uchar aa,uchar bb,uchar cc,uchar bai,uchar shi,uchar ge) /显示子函数dula=1;P0=tableaa;dula=0;P0=0xff;wela=1;P0=0xfe;wela=0;delay(1);dula=1;P0=tablebb;dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delay(1);dula=1;P0=tablecc;dula=0;P0=0xff;wela=1;P0=0xfb;wela=0;delay(1);dula=1;P0=tablebai;dula=0;P0=0xff;wela=1;P0=0xf7;wela=0;delay(1);dula=1;P0=tableshi;dula=0;P0=0xff;wela=1;P0=0xef;wela=0;delay(1);dula=1;P0=tablege;dula=0;P0=0xff;wela=1;P0