新概念51单片机C语言教程实例代码.pdf

上传人:无*** 文档编号:90896631 上传时间:2023-05-18 格式:PDF 页数:138 大小:17.29MB
返回 下载 相关 举报
新概念51单片机C语言教程实例代码.pdf_第1页
第1页 / 共138页
新概念51单片机C语言教程实例代码.pdf_第2页
第2页 / 共138页
点击查看更多>>
资源描述

《新概念51单片机C语言教程实例代码.pdf》由会员分享,可在线阅读,更多相关《新概念51单片机C语言教程实例代码.pdf(138页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、新概念51单片机C语言教程-一入门、提高、开发、拓展全攻略郭天祥编著电子工业出版社例 2.2.1编写程序,点亮第一个发光二极管(part2_l.c P27)#include /52系列单片机头文件sbit ledl=PlAO;声明单片机Pl 口的第一位void main()主函数(ledl=0;/*点亮第一个发光二极管*/例 2 2 2 编写程序,点亮P1 口的若干二极管(part2_2.c P39)#include /52系列单片机头文件void main()主函数(Pl=0 xaa;/while(l);)例 2.5.1利用for语句延时特性,编写第一个发光二极管以间隔1S亮灭闪动的程序(p

2、art2_3.cP42)#include /52系列单片机头文件#define uint unsigned int 宏 定义sbit ledl=PlA0;声明单片机Pl 口的第一位uint i,j;void main()主函数while(l)大循环(ledl=0;for(i=l;i0;i)for(j=110;j0;j-);led 1=1;for(i=1000;i0;i-)for(j=110;j0;j-);/*点亮第一个发光二极管*/延时/*关闭第一个发光二极管刃延时例 2.6.1编写程序使第一个发光二极管以间隔500ms亮灭闪动。(part2_4.c P48)#include#define u

3、int unsigned intsbit ledl=PlA0;void delay ls();void main()(while(l)led 1=0;delayls();ledl=l;delay ls();)void delay ls()(uint i,j;for(i=500;i0;i-)for(j=110;j0;j-);/52系列单片机头文件宏定义声明单片机Pl 口的第一位声明子函数/主函数/大循环/*点亮第一个发光二极管*/调用延时子函数/*关闭第一个发光二极管*/调用延时子函数子函数体例 2.7.1编写程序使第一个二极管以亮200ms、灭800ms的方式闪动。(part2_5.c P49

4、)#include#define uint unsigned intsbit ledl=PlA0;void delayms(uint);void main()/52系列单片机头文件宏定义声明单片机Pl 口的第一位声明子函数主函数while(l)大循环ledl=0;delayms(200);ledl=l;delayms(800);/*点亮第一个发光二极管*/延时200毫秒/*关闭第一个发光二极管*/延时800毫秒void delayms(uint xms)uint i,j;for(i=xms;i0;i-)for(j=H0;j0;j-);/i=xms即延时约xms毫秒例 2.8.3利用C 51自带

5、库_crol_(),以间隔500m s,实现流水灯程序(part2_6.c P53)#include#include#define uint unsigned int/52系列单片机头文件宏定义#define uchar unsigned charvoid delayms(uint);uchar aa;声明子函数void main()(aa=0 xfe;主函数赋初值11111110while(l)大循环Pl=aa;delayms(500);aa=_crol_(aa,l);延时500毫秒将aa循环左移1位后再赋给aavoid delayms(uint xms)uint i,j;for(i=xms

6、;i0;i)forG=110;j0;j-);/i=xms即延时约xms毫秒例 3.2.1编写程序使第一个数码管显示8(part2.1_.lc P59)#include sbit dula=P2A6;sbit wela=P2A7;void main()/52系列单片机头文件申明U1锁存器的锁存端申明U2锁存器的锁存端wela=l;P0=0 xFE;wela=0;打开U2锁存器送入位选信号关闭U2锁存器dula=l;P0=0 x7F;dula=0;while(l);/打开U I锁存器送入段选信号关闭U2锁存器程序停止到这里例 3 2 2 让实验板上6 个数码管同时点亮,依次显示0 到 F,时间间隔

7、为0.5m s,循环下去。(part2.1_2.c P61)#include#define uchar unsigned char#define uint unsigned intsbit dula=P2A6;sbit wela=P2A7;uchar num;52系列单片机头文件申明U I锁存器的锁存端申明U 2锁存器的锁存端unchar code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;void delayms(uint);voi

8、d main()(wela=l;打开U2锁存端P0=0 xco;送入位选信号wela=0;关闭U2锁存端while(l)(for(num=0;num0;i)/i=xms 即延时约 xms 毫秒for(j=110;j0;j-);例 3.3.1第一个数码管显示1,时间为0.5 s,然后关闭它,立即让第二个数码管显示2,时间为 0.5s,在关闭它.直到最后一个数码管显示6,时间同样为0.5 s,关闭它之后再回来显示第一个数码管,一直循环下去。(part2.1_3.c P62)例 3.5.2用定时器0 的方式1实现第一个发光二极管以200ms间隔闪烁,用定时器1的方式1实现数码管前两位59s循环计时。

9、(part2.1_5.c P75)例 4.1.1用数码管前两位显示一个十进制数,变化范围为005 9,开始时显示0 0,每按下S2键一次,数 值 加 h每按下S 3键一次,数 值 减 1;每按下S 4 键一次,数值归零;按 下 S5键一次,利用定时器功能使数值开始自动每秒加1,再次按下S 5键,数值停止加1,保持显示原数。(part2.2_l.c P82)#include /52系列单片机头文件#define uchar unsigned char#define uint unsigned intsbit keyl=P3A4;sbit key2=P3A5;sbit key3=P3A6;sbit

10、 key4=P3A7;sbit dula=P2A6;申明U I锁存器的锁存端sbit wela=P2A7;申明U2锁存器的锁存端uchar code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;void delayms(uint);uchar numt0,num;void display(uchar numdis)显示子函数(uchar shi,ge;分离两个分别要显示的数shi=numdis/10;ge=numdis%10;dula=

11、l;P0=table shi;送十位段选数据dula=0;PO=Oxff;送位选数据前关闭所有显示,防止打开位选锁存时wela=1;原来段选数据通过位选锁存器造成混乱P0=0 xfe;送位选数据wela=0;delayms;延时dula=l;PO=tablege;送个位段选数据dula=0;P0=0 xff;wela=l;P0=0 xfd;wela=0;delayms(5);void delayms(uint xms)uint i,j;for(i=xms;i0;i)/i=xms 即延时约 xms 毫秒forG=H0;j0;j-);)void init()初始化函数(TMOD=0 x01;设置定

12、时器0 为工作方式1(0000 0001)TH0=(6553845872)/256;装初值 50ms 一次中断TL0=(65536-45872)%256;EA=1;开总中断ET0=l;开定时器0 中断)void keyscan()if(keyl=0)(delayms(lO);if(keyl=O)(num+;if(num=60)当 至 lj 60时重新归0num=0;while(!keyl);等待按键释放)1if(key2=0)(delayms(lO);if(key2=0)(if(num=0)当 至 I 0 时重新归60num=60;num;while(!key2);)if(key3=0)del

13、ayms(lO);if(key3=0)num=0;清 0while(!key3);if(key4=0)(delayms(lO);if(key4=0)while(!key4);TRO=TRO;启动或停止定时器0)void main()(init();初始化函数while(l)(keyscan();display(num);)void T0_time()interrupt 1(TH0=(6553645872)/256;重装初值TL0=(65536-45872)%256;numtO+;if(numt0=20)如果到了 20次,说 明 1 秒时间到(numt0=0;/然后把num清 0 重新再计20次

14、num+;if(num=60)num=0;例 4 2 1 实验板上电时,数码管不显示,顺序按下矩阵键盘后,数码管上依次显示0 F,六个数码管同时静态显示即可。(part2.2_2.c P87)#include /52系列单片机头文件#define uchar unsigned char#define uint unsigned intsbit dula=P2A6;申明U I 锁存器的锁存端sbit wela=P2A7;申明U 2 锁存器的锁存端uchar code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f

15、,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;void delayms(uint xms)(uint i,j;for(i=xms;i0;i)/i=xms 即延时约 xms 毫秒for(j=H0;j0;j-);)void display(uchar num)(P0=tablenum;显示函数只送段选数据dula=l;dula=0;)void matrixkeyscan()(uchar temp,key;P3=0 xfe;temp=P3;temp=temp&0 xf0;if(temp!=OxfO)(delayms(lO);temp=P3;temp=temp&OxfO;i

16、f(temp!=OxfO)(temp=P3;switch(temp)(case Oxee:key=O;break;case Oxde:key=l;break;case Oxbe:key=2;break;case 0 x7e:key=3;break;while(temp!=OxfO)(temp=P3;te mp=te mp&OxfO;)di splay(key);)P3=Oxfd;temp=P3;temp=temp&OxfO;if(temp!=OxfO)(delayms(lO);temp=P3;temp=temp&OxfO;if(temp!=OxfO)(temp=P3;switch(temp)(

17、case Oxed:key=4;break;case Oxdd:key=5;break;case Oxbd:key=6;break;case 0 x7d:key=7;break;while(temp!=OxfO)(temp=P3;temp=temp&OxfO;display(key);P3=Oxfb;temp=P3;te m p=te mp&Ox fO;if(temp!=OxfO)delayms(lO);temp=P3;temp=temp&OxfO;if(temp!=OxfO)(temp=P3;switch(temp)(case Oxeb:key=8;break;case Oxdb:key=9

18、;break;case Oxbb:key=10;break;case Ox7b:key=ll;break;)while(temp!=OxfO)(temp=P3;temp=te mp&OxfO;)display(key);)P3=0 xf7;temp=P3;te mp=te mp&OxfO;if(temp!=OxfO)(delayms(lO);temp=P3;temp=temp&OxfO;if(temp!=OxfO)temp=P3;switch(temp)(case 0 xe7:key=12;break;case 0 xd7:key=13;break;case 0 xb7:key=14;brea

19、k;case 0 x77:key=15;break;)while(temp!=0 xf0)(temp=P3;temp=temp&0 xf0;)di splay(key);void main()(P0=0;关闭所有数码管段选dula=l;dula=0;P0=0 xc0;位选中所有数码管wela=l;wela=0;while(l)matrixkeyscan();不停调用键盘扫描程序例 5.3.1用单片机控制ADC0804进行数模转换,当拧动实验板上A/D旁边的电位时,在数码管的前三位以十进制方式显示出A/D转换后的数字量(8 位 A/D转换后数值在0255变优 o (part2.3_l.c P10

20、7)#include /52系列单片机头文件#include#define uchar unsigned char#define uint unsigned intsbit dula=P2A6;sbit wela=P2A7;sbit adwr=P3A6;sbit adrd=P3A7;uchar code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;void delayms(uint xms)uint i,j;fbr(i=xms;i0;i

21、)/申明U I锁存器的锁存端中明U2锁存器的锁存端定义AD 的 WR端口定义AD 的 RD端口/i=xms即延时约xms毫秒for(j=110;j0;j-);void display(uchar bai,uchar shi,uchar ge)显示子函数(dula=l;PO=tablebai;送段选数据dula=0;P0=0 xff;送位选数据前关闭所有显示,防止打开位选锁存时wela=l;原来段选数据通过位选锁存器造成混乱P0=0 x7e;送位选数据wela=0;delayms;延时dula=l;PO=tableshi;dula=0;P0=0 xff;wela=l;P0=0 x7d;wela=

22、0;delayms(5);dula=l;PO=table|ge|;dula=O;PO=Oxff;wela=l;P0=0 x7b;wela=O;deiayms(5);void main()/主程序(uchar a,Al,A2,A3,adval;wela=l;P0=0 x7f;置CSAD为 0,选 通 ADCS以后不必再管ADCSwela=0;while(l)(adwr=1;_nop_();adwr=0;启动AD转换_nop_();adwr=l;for(a=10;a0;a-)/fTX-lC实验板AD工作频率较低,所以启动转换后要多留点时间用来转换 这里把显示部分放这里的原因也是为了延长转换时间di

23、splay(A1,A2,A3);Pl=0 xff;/读取Pl 口之前先给其写全adrd=1;/选通ADCS_nop_();adrd=0;/AD读使能_nop_();adval=Pl;/AD数据读取赋给Pl 口adrd=1;Al=adval/100;/分出百,十,和个位A2=adval%100/10;A3=adval%10;例 5 5 1 用单片机控制DAC0832芯片输出电流,让发光二级管D 12由灭均匀变到最亮,再由最亮均匀熄灭。在最亮和最暗时使用蜂鸣器分别警报一声,完成整个周期时间控制在5S左右,循环变化。(part2.3_2.c P121)#include#define uchar un

24、signed char#define uint unsigned intsbit dula=P2A6;,sbit wela=P2A7;,sbit dawn=P3A6;,sbit dacs=P3A2;sbit beep=P2A3;void delayms(uint xms)申明U1锁存器的锁存端/申明U2锁存器的锁存端定义DA 的 WR端口定义D A 的 C S端口定义蜂鸣器端口uint i,j;for(i=xms;iO;i)forC=110;j0;j-);/i=xms即延时约xms毫秒void main()uchar val,flag;dula=0;wela=0;dacs=0;dawr=0;P

25、0=0;while(l)(if(flag=O)(val+=5;P0=val;通过PO 口给DA数据口赋值if(val=255)(flag=l;beep=0;delayms(lOO);beep=1;)delayms(50);)else(val-=5;P0=val;if(val=O)通过P0 口给DA数据口赋值flag=O;beep=O;delayms(lOO);beep=1;)delayms(50);例 6.5.1在上位机上用串口调试助手发送一个字符X,单片机收到字符后返回给上位机“I getX”,串 口波特率设为 9600bps。(part2.4.c P137)#include#define

26、uchar unsigned char#define uint unsigned intunsigned char flag,a,i;uchar code table=nI get n;/ucharcodevoid init()(TMOD=0 x20;THl=0 xfd;TLl=0 xfd;TR1=1;REN=1;SM0=0;SM1=1;EA=1;ES=1;void main()(init();while(l)(if(flag=l)(ES=0;for(i=0;i6;i+)(SBUF=tablei;while(!TI);TI=0;)SBUF=a;while(!TI);TI=0;ES=1;flag

27、=0;)void ser()interrupt 4RI=O;a=SBUF;flag=l;例 6.6.1单片机上电后等待从上位机串口发来的命令,同时在数码管的前三位以十进制方式显 示 A/D 采集的数值,在未收到上位机发送来的启动A/D 转换命令之前数码管始终显示000o当收到上位机以十六进制发送来的01后,向上位机发送字符串“Turn on ad!”同时间隔 Is读取一次A/D的值,然后把A/D采集回来的8 位二进制转换成十进制表示的实际电压浮点数,并且从串口发送给上位机,形式如“The voltage is 3.398438V”,发送周期也是一秒一次,同时在数码管上也要每秒刷新现实的数值。当

28、收到上位机以十六进制发送过来的02后,向上位机发送字符串“Tum offad!”,然后停止发送电压值,数码管上显示上次结束时保持的值。当收到上位机发来的其他任何数时,向上位机发送字符串“Error!”。(part2.4_2.c P140)#include#include#include#define uchar unsigned char#define uint unsigned intsbit dula=P2A6;sbit wela=P2A7;sbit adwr=P3A6;sbit adrd=P3A7;uchar flag,a;/申明U I锁存器的锁存端申明U2锁存器的锁存端定义AD 的 W

29、R端口定义AD 的 RD端口unsigned char flag_uart,flag_time,flag_on,a,i,tO_num,ad_val;float ad_vo;uchar code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;void delayms(uint xms)uint i,j;for(i=xms;i0;i)for(j=110;j0;j-);/i=xms即延时约xms毫秒)void init()TMOD=Ox21;/

30、SCON=0 x50;TH0=(65536-50000)/256;TL0=(65536-50000)%256;THl=Oxfd;TLl=Oxfd;TR1=1;ETO=1;SMO=O;SM1=1;REN=1;EA=1;ES=1;void display(uchar value)显示子函数(uchar bai,shi,ge;bai=value/100;分出百,十,和个位shi=value%100/10;ge=value%10;dula=l;PO=tablebai;送段选数据dula=0;P0=0 xff;送位选数据前关闭所有显示,防止打开位选锁存时wela=l;原来段选数据通过位选锁存器造成混乱P

31、0=0 x7e;送位选数据wela=0;delayms;延时dula=l;PO=tableshi;dula=0;P0=0 xff;wela=l;P0=0 x7d;wela=0;delayms(5);dula=l;PO=tablege;dula=0;P0=0 xff;wela=l;P0=0 x7b;wela=0;delayms(5);uchar get_ad()uchar adval;adwr=1;_nop_();adwr=O;启动AD转换_nop_();adwr=l;Pl=Oxff;/读取Pl 口之前先给其写全1adrd=l;_nop_();adrd=O;/AD 读使能_nop_();adva

32、l=Pl;/AD 数据读取adrd=l;return adval;)void main()(init();wela=l;P0=0 x7f;置CSAD为 0,选 通 ADCS以后不必再管ADCSwela=0;while(l)(if(flag_uart=l)(flag_uart=O;ES=0;TI=1;switch(flag_on)(case 0:puts(*Turn on ad!n);TR0=l;break;case 1:printf(nTurn off ad!n);TR0=0;break;case 2:puts(Enor!n”);break;)while(!TI);必须要加TI=0;ES=1;

33、)if(flag_time=l)flag_time=O;ad_val=get_ad();ad_vo=(float)ad_val*5.0/256.0;ES=O;TI=1;printfCThe voltage is%fVnad_vo);while(!TI);TI=0;ES=1;)display(ad_val);void timerO()interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;tO_num+;if(t0_num=20)(t0_num=0;flag_time=l;)void ser()interrupt 4(RI=0;a=SBUF;

34、flag_uart=l;if(a=l)flag_on=0;else if(a=2)flag_on=l;elseflag_on=2;例 72.1实 现 1602液晶的第一行显示“1 LOVE MCU!”,在第二行显示WWW.TXMCU.COM。(part2.5_Lc P152)#include#define uchar unsigned char#define uint unsigned intuchar code table=nI LOVE MCU!H;uchar code table 1 =nWWW.TXMCU.COM0;sbit lcden=P3A4;液晶使能端sbit lcdrs=P3A

35、5;液晶数据命令选择端sbit dula=P2A6;申明U I锁存器的锁存端sbit wela=P2A7;申明U 2锁存器的锁存端uchar num;void delay(uint z)(uint x,y;fbr(x=z;xO;x-)for(y=l 10;y0;y);void write_com(uchar com)(lcdrs=O;P0=com;delay;lcden=l;delay(5);lcden=O;void write_data(uchar date)(lcdrs=1;PO=date;delay(5);lcden=l;delay(5);lcden=O;)void init()(dul

36、a=O;wela=0;lcden=O;write_com(0 x38);设 置 16X2显示,5X7点阵,8位数据接口write_com(0 x0c);设置开显示,不显示光标write_com(0 x06);写一个字符后地址指针加1write_com(0 x01);显示清零,数据指针清零void main()(init();write_com(0 x80);fbr(num=O;numl l;num+)(write_data(tablenum);delay(5);)write_com(0 x80+0 x40);fbr(num=O;num 13;num+)(write_data(tablel nu

37、m);delay(5);)while(l);例 7.2.2实 现 1602第一行从左侧移入“Hello everyone!”同时第二行从右侧移入“Welcome tohere!,移入速度自定,然后停留在屏幕上。(part2.5_2.c P154)#include#define uchar unsigned char#define uint unsigned intuchar code table=Hello everyone!1;uchar code table 1 =nWelcome to here!,;sbit lcden=P3A4;sbit lcdrs=P3A5;sbit dula=P2

38、A6;sbit wela=P2A7;液晶使能端液晶数据命令选择端申明U1锁存器的锁存端申明U2锁存器的锁存端uchar num;void delay(uint z)uint x,y;fbr(x=z;x0;x)for(y=l 10;y0;y);)void write_com(uchar com)(lcdrs=0;P0=com;delay(5);lcden=l;delay ;lcden=O;)void write_data(uchar date)(lcdrs=1;P0=date;delay(5);lcden=l;delay(5);lcden=0;)void init()(dula=0;wela=0

39、;lcden=0;write_com(0 x38);设 置 16X2显示,5X7点阵,8位数据接口write_com(0 x0c);设置开显示,不显示光标write_com(0 x06);写一个字符后地址指针加1write_com(0 x01);显示清零,数据指针清零)void main()(init();write_com(0 x80+0 x 10);for(num=0;num 15;num+)(write_data(tablenum);delay(5);)write_com(0 x80+0 x50);for(num=0;num 16;num+)write_data(tablel num);

40、delay(5);)fbr(num=0;num16;num+)write_com(0 xl8);delay(200);)while(l);例 7.3.1实 现 12232液晶的第一行显示“I LOVE MCU!”,第二行显示“我爱单片机”。(part2.5_3.c P160)#inciude#define uint unsigned int#define uchar unsigned charsbit CS=P1A2;sbitSID=PlAl;sbit SCLK=P1AO;uchar code disps=nI LOVE MCU!”;uchar code dispx=我爱单片机!”;void

41、delay_lms(uint x)uint i,j;fbr(j=O;jx;j+)for(i=0;il 10;i+);)void send_command(uchar command_data)(uchar i;uchar i_data;i_data=0 xf8;CS=1;SCLK=0;for(i=0;i8;i+)(SID=(bit)(i_data&0 x80);SCLK=0;SCLK=1;i_data=i_datal;)i_data=command_data;i_data&=OxfO;for(i=0;i8;i+)(SID=(bit)(i_data&0 x80);SCLK=0;SCLK=1;i_

42、data=i_datal;)i_data=command_data;i_data=4;for(i=0;i8;i+)(SID=(bit)(i_data&0 x80);SCLK=O;SCLK=1;i_data=i_datal;)cs=o;de!ay_lms(10);)void send_data(uchar command_data)(uchar i;uchar i_data;i_data=Oxfa;CS=1;fdr(i=O;i8;i+)(SID=(bit)(i_data&0 x80);SCLK=0;SCLK=1;i_data=i_datal;)i_data=command_data;i_data

43、&=0 xf0;for(i=0;i8;i+)(SID=(bit)(i_data&0 x80);SCLK=0;SCLK=1;i_data=i_datal;)i_data=command_data;i_data=4;for(i=0;i8;i+)(SID=(bit)(i_data&0 x80);SCLK=0;SCLK=1;i_data=i_datal;)CS=0;delay_lms(10);void lcd_init()(delay_lms(100);send_command(0 x30);/*设置8 位数据接口,基本指令模式。*/send_command(0 x02);/*清 DDRAM*/sen

44、d_command(0 x06);/*游标及显示右移一位*/send_command(OxOc);/*整体显示开,游标关,反白关*/send_command(0 x01);/*写入空格清屏幕*/send_command(0 x80);/*设定首次显示位置*/void display_s()(uchar a;send_command(0 x80);for(a=0;all;a+)(send_data(dispsa);)void display_x()(uchar a;send_command(0 x92);for(a=0;al l;a+)(send_data(dispxa);)main()(lcd

45、_init();display_s();display_x();while(l);)例 7.3.2实 现 12232液晶第一行从右侧移入“Hell。everyone!,同时第二行从右侧移入“欢迎大家来学习!”移入速度自定,最后停留在屏幕上。(part2.5_4.c P163)include#define uint unsigned int#define uchar unsigned charsbit CS=P1A2;sbit SID=P1A1;sbit SCLK=P1AO;uchar code disps=Hello everyone!;uchar code dispx=欢迎大家来学习!”;v

46、oid delay_lms(uint x)(uint ij;for(j=0;jx;j+)for(i=0;il 10;i+);)void send_command(uchar command_data)(uchar i;uchar i_data;i_data=0 xf8;CS=1;SCLK=0;for(i=0;i8;i+)SID=(bit)(i_data&0 x80);SCLK=0;SCLK=1;i_data=i_datal;i_data=command_data;i_data&=0 xf0;for(i=0;i8;i+)(SID=(bit)(i_data&0 x80);SCLK=0;SCLK=1

47、;i_data=i_datal;)i_data=command_data;i_data=4;for(i=0;i8;i+)(SID=(bit)(i_data&0 x80);SCLK=0;SCLK=I;i_data=i_datal;CS=0;delay_lms(l);void send_data(uchar command_data)(uchar i;uchar i_data;i_data=Oxfa;CS=1;for(i=0;i8;i+)(SID=(bit)(i_data&Ox8O);SCLK=0;SCLK=1;i_data=i_datal;)i_data=command_data;i_data&

48、=OxfO;for(i=0;i8;i+)(SID=(bit)(i_data&0 x80);SCLK=0;SCLK=1;i_data=i_datal;)i_data=command_data;i_data=4;for(i=0;i8;i+)(SID=(bit)(i_data&0 x80);SCLK=0;SCLK=1;i_data=i_datal;)CS=0;delay_lms(l);)void lcd_init()(delay_lms(100);send_command(0 x30);/*设置8 位数据接口,基本指令模式。*/send_command(0 x02);/*清 DDRAM*/send_

49、command(0 x06);/*游标及显示右移一位*/send_command(OxOc);/*整体显示开,游标关,反白关*/send_command(0 x01);/*写入空格清屏幕*/send_command(0 x80);/*设定首次显示位置*/void display_s(uchar num)uchar a;send_command(0 x88-num);fbr(a=0;a15;a+)(send_data(dispsa);)void display_x(uchar num)(uchar a;send_command(0 x98-num);for(a=0;a15;a+)(send_da

50、ta(dispxa);)main()(uchar aa;lcd_init();for(aa=0;aa9;aa+)(display_s(aa);display_x(aa);delay_lms(300);)while(l);)例 7 4 1 实现在12864液晶上第一行显示“0123456789”,并且让每一位数字随机变化,第二行 显 示“,第三行显 示“天祥电子”,第四行对应第三行显示出下划线。(part2.5_5.c P173)#inciude#include#include#define uchar unsigned char#define uint unsigned int/*端口定义*/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁