1、 本文由lima188贡献pdf文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。东哥单片机学习网 单片机基础知识单片机的外部结构: 1, DIP40 双列直插; 2, P0,P1,P2,P3 四个 8 位准双向 I/O 引脚; (作为 I/O 输入时,要先输出高电平) 3, 电源 VCC(PIN40)和地线 GND(PIN20) ; 4, 高电平复位 RESET(PIN9)(10uF 电容接 VCC 与 RESET,即可实现上电复位) ; 5, 内置振荡电路,外部只要接晶体至X1(PIN18)和 X0(PIN19)(频率为主频的 12 倍) ; 6, 程序配置
2、EA(PIN31)接高电平 VCC; (运行单片机内部 ROM 中的程序) 7, P3 支持第二功能:RXD,TXD,INT0,INT1,T0,T1 单片机内部 I/O 部件:(所为学习单片机,实际上就是编程控制以下 I/O 部件,完成指定任 务) 1, 四个 8 位通用 I/O 端口,对应引脚 P0,P1,P2 和 P3; 2, 两个 16 位定时计 ; (TMOD,TCON,TL0,TH0,TL1,TH1) 3, 个 行通 接口; (SCON,SBUF) 4, 个中 控制 ; (IE,IP) 对 AT89C52 单片机, 文件 AT89x52.h出 SFR 功能 所 端口的定 . 的 16
3、0 出 对 MCS51 列单片机的 C . C 编程基础: 1, 制 0x5a:二 制为 01011010B;0x6E 为 01101110. 2, 个 16 位二 个 8 位的 ,currency1“ 为 8 位,fifl高 8 位. 3, +var 对 var 先 ;var 对 . 4, x |= 0x0f; 为 x = x | 0x0f; 5, TMOD = ( TMOD TMOD 的四位 0x5, 不 TMOD 的高四位. 6, While( 1 ); 行 ,即”. 的 体, 就是;第 单片机应用 :单片机 的件接线: 1, 接电源:VCC(PIN40) ,GND(PIN20) . 接
4、电容 0.1uF 2, 接晶体:X1(PIN18) ,X2(PIN19) . 出晶体频率(选用 12MHz) , 电 容 30pF 3, 接复位:RES(PIN9) .接上电复位电路,以 “复位电路, 复位 作 4, 接配置:EA(PIN31) . .东哥单片机学习网 单片机学习 , 单片机实验 ,编程 , , 线 接控制 ,电 件,单片机 ,是单片机 ,单片机 学 ,电 程 不容 的单片机学习网.东哥单片机学习网 体接 下所:第二基本 I/O 口的应用:在 P1.0 口输出 . 体程序下: #include /* 文档 单片机所 功能 的,程序中可直接 用, P1*/ void main
5、 ( void ) while ( 1 ) P1_0 = 1; P1_0 = 0; / 个 程 必须 个 main 函 ,并且只能 个 main 函 /”, 为永远为 /P1.0 口输出 个高电平 /P1.0 口输出 个电平2:在上题中,让 P1.0 口接上 个 光二极管, 光二极管能闪烁. 考虑到要人眼能看到闪烁,所在输出电平以 上延时程序就可以 . 体程序下: #include void delay ( void )定 个延时函 ,函 在主函 之前定 currency1不用声 .东哥单片机学习网 单片机学习 , 单片机实验 ,编程 , , 线 接控制 ,电 件,单片机 ,是单片机 ,单
6、片机 学 ,电 程 不容 的单片机学习网.东哥单片机学习网 unsigned int i,j; /定 两个 用于控制 for (i=0;i1) /第 4 位的送至第 3 位 n|=(m3) /第 5 位的送至第 2 位 n|=(m5) /第 6 位的送至第 1 位 n|=(m7) /第 7 位的送至第 0 位 P1 = n; for(i=0;i Code unsignedchar Seg7Code16= /*用 作为 组下, 可直接取得对应的七段编 码*/ / 0 1 2 3 4 5 6 7 8 9 A b C d E F 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d
7、, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71; void main ( void ) unsigned int i; while (1) P2 |= 0x0f; P0 = LedCode1;/消隐,让 码管 始处于不亮的状态 /“1“的代码送出东哥单片机学习网 单片机学习 , 单片机实验 ,编程 , , 线 接控制 ,电 件,单片机 ,是单片机 ,单片机 学 ,电 程 不容 的单片机学习网.东哥单片机学习网 P2 /选中第 个 码管 for(i=0;i, 可用函 ,下: #ifndef _LedDriver_H _
8、 /防止重复引用文档,没 定 符 _KEY_H_,currency1编 下面 #define _LedDriver_H _ /只要引用 ,即 #include ,currency1定 符 _KEY_H_ void LedPrint ( unsigned char Dat ) / 据 间,完成移位功能 void LedWork ( void ) /送 到显 码管 #endif,定 函 体文档 LedDriver.C,下: #include #include “LedDriver.h“ Code unsigned char LedCode16= /Code 是 这个 组的 间 0x3f, 0x06
9、, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71; unsigned char DisBuf4; void LedPrint (unsigned char Dat) 东哥单片机学习网 单片机学习 , 单片机实验 ,编程 , , 线 接控制 ,电 件,单片机 ,是单片机 ,单片机 学 ,电 程 不容 的单片机学习网.东哥单片机学习网 DisBuf0 = DisBuf1; DisBuf1 = DisBuf2; DisBuf2 = DisBuf3; DisBuf3 = Dat;
10、 用 个 fl前 个 ,便于 显位 void LedWork ( void ) static unsigned char i = 0; /*static 态 ,指 的只在第 定 的时 候*/ P2 |= 0x0f; P0 = LedCodeDisBufi; Switch( i ) /选择 据送到 个管 case 0: P2_0 = 0; break; case 1: P2_1 = 0; break; case 2: P2_2 = 0; break; case 3: P2_3 = 0; break; if (+i=4) i = 0; / 四位 是否都 送完 for (m=0;m #includ
11、e “LedDriver.h“ void mian( void ) LedPrint( 1 ); LedPrint( 2 ); LedPrint( 3 ); LedPrint( 4 ); While( 1 ) LedWork( ); /调用函 ,把 显的 据送 下面介绍 个 大家 考. 显“12345678“东哥单片机学习网 单片机学习 , 单片机实验 ,编程 , , 线 接控制 ,电 件,单片机 ,是单片机 ,单片机 学 ,电 程 不容 的单片机学习网.东哥单片机学习网 P1 端口接 8 共阴 码管 SLED8 的段极:P1.7 接段 h,P1.0 接段 a P2 端口接 8 共阴 码管
12、 SLED8 的段极:P2.7 接左 的共阴极,P2.0 接 的共阴极 :晶振频率 fosc=12MHz,码管 用“态 显,在 1ms 定时 务程序 中实现 #include unsigned charDisBuf8; /*全 显 ,DisBuf0对应 SLED,DisBuf7对应左 SLED*/ void DisplayBrush( void ) code unsigned char cathode8=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/阴极控制码 code unsigned char Seg7Code16= /用 作为 组下,可直接取得对应的七
13、 段编码 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; static unsigned char i=0; / (0i7) 显, 由于是 态 , 只做 . P2 = 0xff; /显消隐,以 下 段码显在前 支 SLED P1 = Seg7Code DisBufi ; /从显 取出始 据,查 为七段码送出显 P2 = cathode i ; /对应阴极置,显 if( +i = 8 ) i=0; /指向下 个 码管和相应 据 void Timer0IntRoute( void )
14、interrupt 1 TL0 = -1000; /由于 TL0 只 8bits,所以(-1000) 8 位 TL0 TH0 = (-1000)8; /取(-1000)的高 8 位 TH0,重 定时 1ms DisplayBrush(); void Timer0Init( void ) TMOD=(TMOD / 始化,定时 T0, 作 1 TL0 =-1000; /定时 1ms TH0 = (-1000)8; TR0 = 1; / T0 始计 ET0 = 1; / T0 计 出时 中 求 void Display( unsigned char index, unsigned char data
15、Value ) DisBuf index = dataValue; void main( void ) unsigned char i; for( i=0; i, 可用函 ,下: #ifndef _KEY_H_ /防止重复引用文档,没定 符 _KEY_H_,currency1编 下 面 #define _KEY_H_ /只要引用 ,即 #include ,currency1定 符 _KEY_H_ unsigned char keyHit( void ); /按,currency10,否currency10 unsigned char keyGet( void ); /读取按,没 按curren
16、cy1 到按为止 void keyPut( unsigned char ucKeyVal ); /保 按 ucKeyVal 到按 列 void keyBack( unsigned char ucKeyVal ); / ucKeyVal 到按 列首 #endif 定 函体文档 KEY.C,下: #include “key.h“ #define KeyBufSize 16 /定 按 列 unsigned char KeyBuf KeyBufSize ; /定 个 符 符 组作为按 列.列 为先/先出, 取,下从0到 KeyBufSize-1 unsigned char KeyBufWp=0; /作
17、为 组下 ,记 入位置 unsigned char KeyBufRp=0; /作为 组下 ,记读出位置 / 入位置与读出位置相同,currency1 列中 按 据 unsigned char keyHit( void ) if( KeyBufWp = KeyBufRp ) return( 0 ); else return( 1 ); unsigned char keyGet( void ) unsigned char retVal; / 读出 while( keyHit()=0 ); / 按, 为函 keyHit()的为 0 按 retVal = KeyBuf KeyBufRp ; /从 组中
18、读出 if( +KeyBufRp = KeyBufSize ) KeyBufRp=0; /读位置 1,出列currency1 始位置 return( retVal ); 东哥单片机学习网 单片机学习 , 单片机实验 ,编程 , , 线 接控制 ,电 件,单片机 ,是单片机 ,单片机 学 ,电 程 不容 的单片机学习网.东哥单片机学习网 void keyPut( unsigned char ucKeyVal ) KeyBuf KeyBufWp = ucKeyVal; /入 组 if( +KeyBufWp = KeyBufSize ) KeyBufWp=0; / 入位置 1,出列currenc
19、y1 始位置 /* * 由于某种 ,读出的按,没 用, 其任务要用按, 送又不便. 时可以 按列.就取 件, 必要 样 * */ void keyBack( unsigned char ucKeyVal ) /* KeyBufRp=0; 1 currency1为 FFH,大于 KeyBufSize,即从 组 到 组.或 由于得 KeyBufRp 出列位置, 要调 到正常位置, */ if( -KeyBufRp = KeyBufSize ) KeyBufRp=KeyBufSize-1; KeyBuf KeyBufRp = ucKeyVal; / #include #include “KEY.H“
20、 unsigned char keyScan( void ) / 0 按,或按,其为按编码 code unsigned char keyCode16= /0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 3, 4, 0 ; unsigned char x, y, retVal; P1=0x0f; /四位输入,高四位输出 0 x=P1 /P1 输入,高四位,作为 X P1=0xf0; /高四位输入,四位输出 0y
21、=(P1 4) /P1 输入移位到四位,并高四位,作为 Y retVal = keyCodex*4+ keyCodey; /据本 按编码 if( retVal=0 ) return(0); else return( retVal-4 ); / 按1 ,得 X=0x7,Y=0x7,得 retVal= 5,所以函 1. /双按7 ,得 X=0xb,Y=0xd,得 retVal=11,所以函 7. void main( void ) TMOD = (TMOD /不 T1 的 作 ,T0 为定时 1 TL0 = -20000; /计 为 20000 个主频 ,“取 8 位东哥单片机学习网 单片机学
22、习 , 单片机实验 ,编程 , , 线 接控制 ,电 件,单片机 ,是单片机 ,单片机 学 ,电 程 不容 的单片机学习网.东哥单片机学习网 TH0 = (-20000)8; / 移 8 位,实际上是取高 8 位 TR0=1; / T0 始计 ET0=1; / T0 计 出时 中 求 EA=1; / CPU 应中 求 while( 1 ) /永远为 ,即” if( keyHit() != 0 ) /列中 按 P2=Seg7Code keyGet() ; /从列中取出按,并显在 码管上 void timer0int( void ) interrupt 1 /20ms;T0 的中 为 1 stat
23、ic unsigned char sts=0; TL0 = -20000; / 1 为 件重载 TH0 = (-20000)8; / 移 8 位,实际上是取高 8 位 P1_0 = 1; /作为输入引脚,必须先输出高电平 switch( sts ) case 0: if( keyScan()!=0 ) sts=1; break; /按currency1 入状态 1 case 1: if( keyScan()=0 ) sts=0; / 按 ,或,状态 0 else sts=2; keyPut( keyScan() ); /确实按,入列,并 状态 2 break; case 2: if(keySc
24、an()=0 ) sts=3; break; /,currency1 状态 3 case 3: if( keyScan()!=0 ) sts=2; / ,状态 2 else sts=0; / ,状态 0, 下 按 程 第 中 应用对于 51 列单片机的中 源在本 件中就不 多 , 同学们可以 考 上的 些 ,主要在这里是介绍的应用. 中 0 1 2 3 4 中 源 X0 Timer0 X1 Timer1 UART 中 控制位( 否) EX0 ET0 EX1 ET1 ES 优先控制位 PX0 PT0 PX1 PT1 PS 中 状态 IE0 TF0 IE1 TF1 RI/TI 其 INT0 T0
25、INT1 T1 RXD/TXD东哥单片机学习网 单片机学习 , 单片机实验 ,编程 , , 线 接控制 ,电 件,单片机 ,是单片机 ,单片机 学 ,电 程 不容 的单片机学习网.东哥单片机学习网 5 Timer2 ET2 EA PTTF2 T2完成以下程序 计( 始化): 要求:1, 口中 的 别 置为高; 2,INT0 作于 ,INT1作于电平 ,这两个中 都是从外部输入; 3, T1 定时 中 . #include void main ( void ) EA = 0; PS = 1; PT1 = 0; PT0 = 0; PX0 = 0; PX1 = 0; / 置 口的中别高 INT1
26、 = 1; INT0 = 1; / 置外部输入中 IT0 = 1; IT1 = 0; / 置 INT0 作于 ,INT1 作于电平 ET1 = 1; / 定时 1 中 EX0 = 1; EX1 = 1; / 外部中0,1 作 ES = 1; / 口中 EA = 1; / 中 while ( 1 ); 下面我们写 个中 务程序: 主要功能是在两个外部中 对应的管脚上接两个按, 在 按下按的时候处于中 状 态,当按下按的时候, 中 , P1 口上对应的 LED 行亮 化. #include void delay ( void) /定 个延时函 unsigned int i,j; for ( i=0
27、;i 8; / 的高 8 位 TL1 = -4567; / 的 8 位 ET1 = 1; / T1的中 东哥单片机学习网 单片机学习 , 单片机实验 ,编程 , , 线 接控制 ,电 件,单片机 ,是单片机 ,单片机 学 ,电 程 不容 的单片机学习网.东哥单片机学习网 TR1 = 1; EA = 1; while ( 1 ); / Tvoid Timer1_int ( void ) interrupt 3 /定 Timer1 的中 务程序 RXD = !RXD; TH1 = (-4567) 8; /重 TL1 = -4567; :要求定时/计 Timer0 作于定时 , 作在 2,要求
28、100 对 TXD 取 . #include void main ( void ) EA =0; TMOD = ( TMOD / 置 Timer0 的 作 TL1 = -100; / 的高 8 位 TH1 = TL1; / 的 8 位 ET0 = 1; / T0 的中 TR0 = 1; / T0 EA = 1; while ( 1 ); void Timer0_int ( void ) interrupt 1 TXD = !TXD; /定 Timer0 的中 务程序完成下面的程序: 1, Timer0 作在 2,作为定时 用, 控, 100 中 ,中 务程序 对 RXD 取; 2, Timer
29、1 作在 1,作为计 用,不 控, 4567 个 中 ,中 务程序对 TXD 取; #include 东哥单片机学习网 单片机学习 , 单片机实验 ,编程 , , 线 接控制 ,电 件,单片机 ,是单片机 ,单片机 学 ,电 程 不容 的单片机学习网.东哥单片机学习网 void main ( void ) EA = 0; TMOD = 0x5a; / 置定时 的 作 TL0 = -100; TH0= TL0; / T0 定时 送 TL1 = -4567; TH1 = (-4567) 8; / T1 定时 送 ET0= 1; ET1 = 1; / 定时 中 T1 = 1; INT0 = 1;
30、 / 置为输入管脚 TR1 = 1; TR0 = 1; /“定时计 EA = 1; / 的中 关 while ( 1 ); void Timer0_int ( void ) interrupt 1 RXD = !RXD; void Timer1_int ( void ) interrupt 3 TXD = !TXD; TH1 = (-4567) 8; TL1 = -4567; /重 第七行通 与应用:连 由单片机向 PC 机 出 据“A“ .东哥单片机学习网 单片机学习 , 单片机实验 ,编程 , , 线 接控制 ,电 件,单片机 ,是单片机 ,单片机 学 ,电 程 不容 的单片机学习网.1