欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:89627384       资源大小:19.37MB        全文页数:147页
    • 资源格式: PDF        下载积分:12金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    目录例2.2.1编写程序,点亮第一个发光二极管(part2_l.c P27).-4-仞!|2.5.1利用for语句延时特性,编写第一个发光二极管以间隔1S亮灭闪动的程序(part2_3.c P42).-5-例2.6.1编写程序使第一个发光二极管以间隔500ms亮灭闪动。(part2_4.c P48).-5-例 2.7.1 编写程序使第一个二极管以亮200ms、灭 800ms的方式闪动。(part2_5.c P49)-6-例 283利用C 51自带库_crol_(),以间隔500m s,实现流水灯程序(part2_6.c P53)-6例3.2.1编写程序使第一个数码管显示8(part2.1_.lc P59).-7-例 3.2.2 让实验板上6 个数码管同时点亮,依次显示0 到F,时间间隔为0.5m s,循环下去。(part2.1_2.c P61).-8-例 3.3.1 第一个数码管显示1,时间为0.5 s,然后关闭它,立即让第二个数码管显示2,时间为0.5s,在关闭它一直到最后一个数码管显示6,时间同样为0.5 s,关闭它之后再回来显示第一个数码管,一直循环下去。(part2.1_3.c P62).-9-仞3.5.1利用定时器0 工 作 方 式 1,在实验板上实现第一个发光管以1s亮灭闪烁。(part2.1.4.c P74).-11-例 3.5.2 用定时器0 的方式1实现第一个发光二极管以200ms间隔闪烁,用定时器1 的方 式 1实现数码管前两位59s循环计时。(part2.1_5.c P75).-12-例 4.1.1 用数码管前两位显示一个十进制数,变化范围为0059,开始时显示0 0,每按下S2键一次,数值加1;每按下S3键一次,数值减1;每按下S4键一次,数值归零;按下S 5 键一次,利用定时器功能使数值开始自动每秒加1,再次按下S 5 键,数值停止加1,保持显示原数。(part2.2.c P82).-14-例 4.2.1 实验班卜.电时,数码管不显示,顺序按下矩阵键盘后,数码管上依次显示0-F,六个数码管同时静态显示即可。(part2.2_2.c P87).-17-例 5.3.1 用单片机控制ADC0804进行数模转换,当拧动实验板上A/D旁边的电位时,在数码管的前三位以十进制方式显示出A/D转换后的数字量(8 位A/D转换后数值在0255变化)。(part2.3_l.c P107).-21-例 5.5.1 用单片机控制DAC0832芯片输出电流,让发光二级管D 12山灭均匀变到最亮,再由最亮均匀熄火。在最亮和最暗时使用蜂鸣器分别警报一声,完成整个周期时间控制在5s左右,循环变化。(part2.3_2.c P121).-23-例 6.5.1在上位机上用串口调试助手发送一个字符X,单片机收到字符后返回给上位机“IgetX”,串 口波特率设为 9600bps。(part2.4_l.c P137).-25-修!1 6.6.1单片机上电后等待从上位机串口发来的命令,同时在数码管的前三位以十进制方式显示A/D采集的数值,在未收到上位机发送来的启动A/D转换命令之前数码管始终显示 000。当收到上位机以十六进制发送来的01后,向上位机发送字符串“Turn on ad!”同时间 隔 Is读取一次A/D的值,然后把A/D采集回来的8 位二进制转换成十进制表示的实际电压浮点数,并且从串口发送给上位机,形式如“The voltage is 3.398438V”,发送周期也是一秒一次,同时在数码管上也要每秒刷新现实的数值。当收到上位机以十六进制发送过来的02后,向上位机发送字符串“Turn off ad!”,然后停止发送电压值,数码管上显示上次结束时保持的值。当收到上位机发来的其他任何数时,向上位机发送字符串“Error!。.-27-例 7.2.1 实 现 1602液 晶 的 第 一 行 显 示“I LOVE M C U!在第二行显示WWW.TXMCU.COMo.-31-例 7.2.2 实 现 1602第一行从左侧移入“Hell。everyone!同时第二行从右侧移入“Welcome to here!”,移入速度自定,然后停留在屏幕上。(part2.5_2.c P154).-33-例 7 3 1 实 现 12232液晶的第一行显示“I LOVE MCU!”,第二行显示“我爱单片机”。(part2.5_3.c P160).-34-例 732 实 现 12232液晶第一行从右侧移入“Hello everyone!,同时第二行从右侧移入“欢迎大家来学习!”移入速度自定,最后停留在屏幕上。(part2.5_4.c P163).-37-例 7.4.1实现在12864液晶上第一行显示“0123456789”,并且让每一位数字随机变化,第二行 显 示“,第三行显示“天祥电子”,第四行对应第三行显示出下划线。(part2.5_5.c P173).-40-知识点:生成随机数(part2.5_512232suiji.cP176).-44-修!|8.3.1利用定时器产生一个099秒变化的秒表,并且显示在数码管上,每过一秒将这个变化的数写入板上AT24co2 内部。当关闭实验板电源,并再次打开实验板电源时,单片机先从AT24co2 中将原来写入的数读取出来,接着此数继续变化并显示在数码管上。(part2.6_l.c P188).-48-例 10.1.1利用定时器0 工作方式0,在实验板上实现第一个发光管以1s亮灭闪烁。(part3.1.1.c P203).-53-例 10.2.1利用定时器0 工作方式2,在实验板上实现第一个发光管以1s亮灭闪烁。(part3.1.2.c P204).-54-例 10.3.1利用定时器工作方式3,在实验板上实现:用TL0计数器对应的8 位定时器实现第一个发光管以1s亮灭闪烁,用THO计数器对应的8 位定时器实现第二个发光管以 0.5s亮灭闪烁。(part3.1.3.c P206).-54-M 10.5.1利用计数器0 工作方式1,在实验板上实现:用一根导线一端连接GND引脚,另一端去接触T0(P3.4)引脚,每接触一下,计数器计一次数,将所计的数值实时显示在数码管的前两位,计 满 100时清0,再从头计起。(part3.1.4.c P214).-55-快!(11.1.1设置单片机串行口的工作模式0,间隔循环发送十六进制数OxAA,然后用双路示波器观察P3.0和P3.1 口波形。(.-58-例 11.3.1用交叉串口线连接两块实验板,或直接用短线交叉线连接连个单片机的P3.0和P3.1 口(共地)。在一块板上编写矩阵键盘扫描程序,当扫描到有键按下时,将键值通过串口发送出去,另一块板上单片机收到串口发送来的键值后,将对应键值以0F方式显示在数码管上。.-60-例 11.4.1 程序分为主机程序和从机程序,约定一次传送的数据为1 6 B,以02H地址的从机为例。(图 1142为多机通信主机程序流程图).-65-图 11.4.3为多机通信从机程序流程图。.-68-从机程序代码:(part3.2.6.c P234).-68-例 12.8.1 指针使用例程:(point.c P264).-71-例 13.1.1编写程序实现:开启两个外部中断,设置低电平触发中断,用定时器计数并且显示在数码管的前两位,当计数到5 时,使单片机进入空闲(休眠)模式,同时关闭定时器,当单片机响应外部中断后,从空闲(休眠)模式返回,同时开启定时器。(.-72-例 13.2.1 实验板上实现如下描述:程序启动后设定看门狗溢出时间为2 s,然后点亮第一个发光二极管,稍延时一会,然后熄灭发光二极管,使程序进入等待死循环状态,并且在死循环中大约每隔1s喂狗一次,看程序运行是否正常。.-74-例 13.6.L在实验板上实现:操作STC单片机自带的E2PROM,存储一组按秒递增的两位数据,并且将数据实时显示在数码管上,数据每变化一次就往E2PROM中写入一次,当关闭实验板电源并再次开启电源时,从E2PROM中读取先前存储的数据,接着递增显示。-77-例13.7.1STC89LE516AD/X2系列单片机的A/D转换功能。时 钟 11.0592MHz,转换结果以 16进制形式输出到串行口,可以用串行口调试程序,观察输出结果(本代码摘自宏晶科技芯片手册,经作者调试可正常运行)。.-80-例 13.8.1 给出一个STC12c5412AD应用的参考程序。(part346.c P287).-82-程 序 14.3.1 利用51单片机的定时器设计一个时钟。.-89-程序15.5.1 使用DSl2c887时钟芯片设计高精度时钟。.-97-程序16.3.1 使用TX-1C实验板上的DS18B20温度传感器设计温控系统C语言源代码(part4.3 P349).-108-程序17.3.1 太阳能充/放电控制器C语言源代码.-114-ISD400X系列语音芯片C语言参考程序:.-134-例 21.1.1 使用TX-1C实验板上两个独立按键调节直流电机的转速,同时在实验板的数码管上象征性的显示相应的转速值。通过控制单片机输出不同占空比的PWM信号来控制直流电机的转速(感性认识)。(part5.3 P434).-138-例 21.2.1步进电机应用C语言程序设计(part3.2 P444).-142-例 21.3.1 舵机应用c 语言程序设计实例:开机时舵机角度自动转为。度,通过实验板上的独立按键调节舵机的角度转动,并且在实验板数码管上显示相应的角度。本例仅演示5个角度的控制,若想实现任意角度控制请大家自行编程实验。程序代码如下:(part5.3P453).-145-/调节舵机使之转动5 个 角 度 0 45 90 135 180 PWM信号周期为20ms,.-145-控制高电平的持续时间即可控制舵机停止制动的角度,0.5ms-0度 1-45 1.5-90 2-135 2.5-180.-145-程序流程是:开机时舵机角度自动转为0 度,按 下 P3.7则转到45度,以后就根据两个按键的按下而转动.-145-例 2.2.1编写程序,点亮第一个发光二极管(part2_l.cP27)#include /52系列单片机头文件sbit ledl=PlA0;声明单片机Pl 口的第一位void main()主函数(led 1=0;/*点亮第一 一 个发光二极管*/例 2.2.2编写程序,点亮P1 口的若干二极管(part2_2.c P39)#include /52系列单片机头文件void main()主函数Pl=0 xaa;/while(l);例2.5.1利用for语句延时特性,编写第一个发光二极管以间隔1S亮灭闪动的程序(part2_3.c P42)#include /52系列单片机头文件#define uint unsigned int 宏定义sbit ledl=PlA0;声明单片机Pl 口的第一位uint i,j;void main()主函数(while(l)大循环led 1=0;/*点亮第一个发光二极管*/for(i=l;i0;i-)延时for(j=110;j0;j-);ledl=l;/*关闭第一个发光二极管*/for(i=1000;i0;i-)/延时for(j=l IO;jO;j-);)例2.6.1编写程序使第一个发光二极管以间隔500ms亮灭闪动。(part2_4.c P48)#include#define uint unsigned intsbit ledl=PIA0;void delay ls();void main()(while(l)(led 1=0;delay ls();ledl=l;delay ls();/52系列单片机头文件宏定义声明单片机Pl 口的第一位声明子函数主函数大循环/*点亮第一个发光二极管*/调用延时子函数/*关闭第一个发光二极管*/调用延时子函数void delay ls()子函数体(uint i,j;for(i=500;i0;i-)for(j=HO;jO;j-);例 2.7.1编写程序使第一个二极管以亮200ms、灭 800ms的方式闪动。(part2_5.c P49)#include/52系列单片机头文件#define uint unsigned int宏定义sbit ledl=PlA0;声明单片机Pl 口 的 第 位void delayms(uint);声明子函数void main()(主函数while(l)(大循环led 1=0;/*点亮第一个发光二极管*/delayms(200);延时200毫秒ledl=l;/*关闭第一个发光二极管*/delayms(800);延时800毫秒)void delayms(uint xms)(uint i,j;for(i=xms;i0;i)i=xms即延时约xms毫秒for(j=110;j0;j-);)例 2 8 3 利用C51自带库_croL(),以间隔500ms,实现流水灯程序(part2_6.c P53)#include/52系列单片机头文件#include#define uint unsigned int宏定义#define uchar unsigned charvoid delayms(uint);声明子函数uchar aa;void main()主函数aa=Oxfe;while(l)赋初值11111110大循环Pl=aa;delayms(500);aa=_crol_(aa,1);)void delayms(uint xms)(uint i,j;for(i=xms;i0;i)for(j=110;j0;j-);延时500毫秒将aa循环左移1位后再赋给aa/i=xms即延时约xms毫秒例 3.2.1编写程序使第一个数码管显示8(part2.l_.lcP59)#include sbit dula=P2A6;sbit wela=P2A7;52系列单片机头文件申明U1锁存器的锁存端申明U2锁存器的锁存端v o i d m a i n()w e l a=l;P 0=0 x F E;w e l a=0;打开U2锁存器送入位选信号关闭U2锁存器d u l a=1;P 0=0 x 7 F;d u l a=0;w h i l e(l);打开UI锁存器送入段选信号关闭U2锁存器程序停止到这里例 3.2.2让实验板上6 个数码管同时点亮,依次显示0 到 F,时间间隔为0.5m s,循环下去。(part2.1_2.c P61)#i n c l u d e#d e f i n e u c h a r u n s i g n e d c h a r#d e f i n e u i n t u n s i g n e d i n ts b i t d u l a=P 2A6;s b i t w e l a=P 2A7;5 2系列单片机头文件申明UI锁存器的锁存端申明U2锁存器的锁存端u c h a r n u m;u n c h a r c o d e t a b l e =0 x 3 f,0 x 0 6,0 x 5 b,0 x 4 f,0 x 6 6,0 x 6 d,0 x 7 d,0 x 0 7,0 x 7 f,0 x 6 f,0 x 7 7,0 x 7 c,0 x 3 9,0 x 5 e,0 x 7 9,0 x 7 1 ;v o i d d e l a y m s(u i n t);v o i d m a i n()(w e l a=1;打开U2锁存端P 0=0 x c o;送入位选信号w e l a=0;关闭U2锁存端w h i l e(l)(f o r(n u m=0;n u m 0;i)/i=xms 即延时约 xms 毫秒for(j=110;j0;j-);例 3.3.1第一个数码管显示1,时间为0.5 s,然后关闭它,立即让第二个数码管显示2,时间为0.5s,在关闭它一直到最后一个数码管显示6,时间同样为0.5s,关闭它之后再回来显示第一个数码管,一直循环下去。(part2.1_3.c P62)#include /52系列单片机头文件#define uchar unsigned char#define uint unsigned intsbit dula=P2A6;申明U I锁存器的锁存端sbit wela=P2A7;申明U 2锁存器的锁存端uchar num;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);void main()(while(l)(dula=l;PO=tablelJ;送段选数据dula=0;PO=Oxff;送位选数据前关闭所有显示,防止打开位选锁存时wela=l;原来段选数据通过位选锁存器造成混乱P0=0 xfe;送位选数据wela=0;delayms(500);延时dula=l;P O=t a b l e ;送段选数据d u l a=O;P O=O x f f;送位选数据前关闭所有显示,防止打开位选锁存时w e l a=l;原来段选数据通过位选锁存器造成混乱P O=O x f d;送位选数据w e l a=0;d e l a y m s(500);延时d u l a=l;P O=t a b l e 3;送段选数据d u l a=O;P O=O x f f;送位选数据前关闭所有显示,防止打开位选锁存时w e l a=1;原来段选数据通过位选锁存器造成混乱P O=O x f o;送位选数据w e l a=0;d e l a y m s(500);延时d u l a=l;P 0=t a b l e l 4J;送段选数据d u l a=O;P O=O x f f;送位选数据前关闭所有显示,防止打开位选锁存时w e l a=l;原来段选数据通过位选锁存器造成混乱P 0=0 x l 7;送位选数据w e l a=0;d e l a y m s(5O O);延时w e l a=0;d e l a y m s(500);/延时d u l a=l;P O=t a b l e 5;d u l a=O;P O=O x f f;w e l a=1;送段选数据送位选数据前关闭所有显示,防止打开位选锁存时/原来段选数据通过位选锁存器造成混乱P O=O x e f;送位选数据d e l a y m s(5O O);延时d u l a=l;P 0=t a b l e 6;d u l a=O;P O=O x f f;w e l a=l;P O=O x d f;w e l a=0;/送段选数据送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱/送位选数据void delayms(uint xms)uintij;for(i=xms;i0;i)/i=xms 即延时约 xms 毫秒ford=llO;j0;j-);例 3.5.1利用定时器0 工作方式1,在实验板上实现第一个发光管以1s亮灭闪烁。(part2.1.4.c P74)#include/52系列单片机头文件#define uchar unsigned char#define uint unsigned intsbit ledl=PlA0;uchar num;void main()(TMOD=0 x01;/设置定时器0 为工作方式1 (MIMO为 01)TH0=(65536-45872)/256;/装初值 11.0592M 晶振定时 50ms 数为 45872TL0=(65536-45872)%256;EA=1;开总中断ET0=l;开定时器0 中断TR0=l;启动定时器0while(l);程序停止在这里等待中断中断发生void T0_time()inten upt 1(TH0=(65536-45872)/256;重装初值TL0=(65536-45872)%256;num+;/num每 加 1 次判断一次是否到20次if(num=20)如果到了 20 次,说 明 1秒时间到(num=0;然后把num清 0 重新再计20次ledl=ledl;让发光管状态取反例 3.5.2用定时器0 的方式1 实现第一个发光二极管以200ms间隔闪烁,用定时器1 的方式1 实现数码管前两位59s 循环计时。(part2.1_5.c P75)#include /52系列单片机头文件#define uchar unsigned char#define uint unsigned intsbit dula=P2A6;申明U I锁存器的锁存端sbit wela=P2A7;申明U 2锁存器的锁存端sbit ledl=PlA0;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);void display(uchar,uchar);uchar num,num 1 ,num2,shi,ge;void main()(TMOD=Oxll;设置定时器0 为工作方式1 (M1M0为 11)TH0=(65536-45872)/256;装初值 11.0592M 晶振定时 50ms 数为 45872TL0=(65536-45872)%256;TH 1=(65536-45872)/256;装初值 11.0592M 晶振定时 50ms 数为 45872TLl=(65536-45872)%256;EA=1;开总中断ET0=l;开定时器0 中断ET1=1;开定时器1 中断TR0=l;启动定时器0TR1=1;/启动定时器1while(l);程序停止在这里等待中断中断发生(display(shi,ge);)void display(uchar shi,uchar ge)显示子函数(dula=l;PO=tableshi;/送段选数据dula=0;PO=Oxff;送位选数据前关闭所有显示,防止打开位选锁存时wela=1;/原来段选数据通过位选锁存器造成混乱P0=0 xfe;送位选数据wela=0;delayms(5);延时dula=l;PO=tablege;送段选数据dula=0;PO=Oxff;送位选数据前关闭所有显示,防止打开位选锁存时wela=l;原来段选数据通过位选锁存器造成混乱P0=0 xfd;/送位选数据wela=0;delayms(5);/延时void delayms(uint xms)(uint i,j;for(i=xms;i0;i)/i=xms 即延时约 xms 毫秒for(j=110;j0;j-);void T0_time()interrupt 1(TH0=(65536-45872)/256;重装初值TL0=(65536-45872)%256;num+;if(numl=4)如果到了 4 次,说明200ms时间到(num 1=0;然后把num l清 0 重新再计4 次led 1=led 1;让发光管状态取反void Tl_time()interrupt 3(TH 1=(65536-45872)/256;重装初值TLl=(65536-45872)%256;num2+;if(num2=20)如果到了 20次,说 明 1秒刷新时间到num2=0;然后把num2清 0 重新再计4 次num+;if(num=60)这个数用来送数码管显示,到 60后归0num=O;shi=num/10;ge=num%10;把一个2 位数分离后分别送数码管显示十位和个位例 4.1.1用数码管前两位显示一个十进制数,变化范围为0 0-5 9,开始时显示0 0,每按下S2键一次,数值加1;每按下S3键一次,数值减1;每按下S4键一次,数值归零;按下S5键一次,利用定时器功能使数值开始自动每秒加1,再次按下S5键,数值停止加1,保持显示原数。(part2,2_l.cP82)#include /52系列单片机头文件#define uchar unsigned char#define uint unsigned intsbit keyl=P3A4;sbit key2=P3A5;sbit key3=P3A6;sbit 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 numtO,num;void display(uchar numdis)显示子函数(uchar shi,ge;分离两个分别要显示的数shi=numdis/10;ge=numdis%10;dula=l;PO=tableshi;送十位段选数据dula=0;PO=Oxff;送位选数据前关闭所有显示,防止打开位选锁存时wela=1;原来段选数据通过位选锁存器造成混乱P0=0 xfe;送位选数据wela=0;delayms(5);延时dula=l;PO=tablegel;送个位段选数据dula=0;PO=Oxff;wela=l;P0=0 xfd;wela=0;delayms(5);)void delayms(uint xms)(uint i,j;for(i=xms;i0;i)/i=xms 即延时约 xms 毫秒for(j=110;j0;j-);)void init()初始化函数(TMOD=Ox(H;设置定时器0 为工作方式1(0000 0001)TH0=(6553645872)/256;装初值 50ms 一次中断TL0=(65536-45872)%256;EA=1;开总中断ET0=l;开定时器0 中断)void keyscan()(if(keyl=O)delayms(lO);if(keyl=O)(num+;if(num=60)当至U 60时重新归0num=0;while(!key 1 );等待按键释放)if(key2=0)(delayms(lO);if(key2=0)if(num=0)当 至lj 0 时重新归60num=60;num;while(!key2);)if(key3=0)(delayms(lO);if(key3=0)(num=0;清 0while(!key3);)if(key4=0)(delayms(lO);if(key4=0)(whiie(!key4);TRO=TRO;启动或停止定时器0void main()(init();初始化函数while(l)keyscan();display(num);void T0_time()interrupt 1(TH0=(65536-45872)/256;重装初值TL0=(65536-45872)%256;numtO+;if(numt0=20)如果到了 20 次,说 明 1秒时间到numt0=0;然后把num清 0 重新再计20次num+;if(num=60)num=0;)例 4.2.1实验班上电时,数码管不显示,顺序按下矩阵键盘后,数码管上依次显示0F,六个数码管同时静态显示即可。(part2.2_2.c P87)#include /52系列单片机头文件#define uchar unsigned char#define uint unsigned intsbit 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 xms)(uint i,j;for(i=xms;i0;i)/i=xms 即延时约 xms 毫秒forU=H0;j0;j-);)void display(uchar num)(P0=tablenum;显示函数只送段选数据dula=l;dula=O;void matrixkeyscan()(uchar temp,key;P3=Oxfe;temp=P3;temp=temp&OxfO;if(temp!=OxfO)(delayms(lO);temp=P3;temp=temp&OxfO;if(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;temp=temp&OxfO;)display(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)(case Oxed:key=4;break;case Oxdd:key=5;break;case Oxbd:key=6;break;case 0 x7d:key=7;break;)whi le(temp!=OxfO)(temp=P3;temp=temp&OxfO;)display(key);)P3=Oxfb;temp=P3;temp=temp&OxfO;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;break;case Oxbb:key=10;break;case 0 x7b:key=ll;break;)while(temp!=OxfO)(temp=P3;temp=temp&OxfO;display(key);)P3=0 xf7;temp=P3;temp=temp&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 Oxd7:key=13;break;case 0 xb7:key=14;break;case 0 x77:key=15;break;while(temp!=OxfO)temp=P3;temp=temp&OxfO;display(key);)void main()(P0=0;关闭所有数码管段选dula=1;dula=0;P0=0 xc0;位选中所有数码管wela=l;wela=0;while(l)(matrixkey scan。;/不停调用键盘扫描程序)例 5.3.1用单片机控制ADC0804进行数模转换,当拧动实验板上A/D旁边的电位时,在数码管的前三位以十进制方式显示出A/D转换后的数字量(8位A/D转换后数值在0255变化)。(part2.3_l.c P107)#include /52系列单片机头文件#include#define uchar unsigned char#define uint unsigned intsbitdula=P2A6;申明U I锁存器的锁存端sbit wela=P2A7;申明 U2锁存器的锁存端sbit adwr=P3A6;定义 AD 的 WR 端 口sbit adrd=P3A7;定义 AD 的 RD 端口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)/i=xms 即延时约 xms 毫秒for(j=110;j0;j-);void display(uchar bai,uchar shi,uchar ge)显示子函数(dula=1;PO=tablebai;送段选数据dula=0;P0=0 xff;送位选数据前关闭所有显示,防止打开位选锁存时wela=1;原来段选数据通过位选锁存器造成混乱P0=0 x7e;送位选数据wela=0;delayms(5);延时dula=l;PO=tableshiJ;duIa=0;P0=0 xff;wela=1;P0=0 x7d;wela=0;delayms(5);dula=1;PO=tablegeJ;dula=0;P0=0 xff;wela=1;P0=0 x7b;wela=0;delayms(5);void main()/主程序uchar a,Al,A2,A3,adval;wela=l;P0=0 x7f;置CSAD为 0,选通AD CS以后不必再管ADCSwela=0;while(l)(adwr=l;_nop_();adwr=0;启动AD转换_nop_();adwr=1;for(a=10;a0;a-)/X-IC 实验板AD工作频率较低,所以启动转换后要多留点时间用来转换 这里把显示部分放这里的原因也是为了延长转换时间display(A 1,A2,A3);Pl=0 xff;/读取Pl 之前先给其写全1adrd=l;/选通ADCS_nop_();adrd=0;/AD读使能_nop_();ad val=P 1;/AD数据读取赋给Pl 口adrd=l;Al=adval/100;分出百,十,和个位A2=adval%100/10;A3=adval%10;)例 5.5.1用单片机控制DAC0832芯片输出电流,让发光二级管D12由灭均匀变到最亮,再由最亮均匀熄灭。在最亮和最暗时使用蜂鸣器分别警报一声,完成整个周期时间控制在 5s左右,循环变化。(part2.3_2.c P121)#include#define uchar unsigned char#define uint unsigned intsbit dula=P2A6;,sbit wela=P2A7;sbit dawr=P3A6;sbit dacs=P3A2;/sbit beep=P2A3;ivoid delayms(uint xms)申明U1锁存器的锁存端申明U2锁存器的锁存端定义DA 的 W R端口定义DA的 CS端口定义蜂鸣器端口uint i,j;for(i=xms;i0;i-)forO=110;j0;j-);/i=xms即延时约xms毫秒void main()(uchar val,flag;dula=0;wela=0;dacs=0;dawr=0;P0=0;while(l)(if(flag=0)(val+=5;P0=val;通过PO 给DA数据口赋值if(val=255)(flag=l;beep=0;delayms(lOO);beep=l;)delayms(50);)elseval-=5;P0=val;通过PO 口给DA数据U赋值if(val=O)flag=O;beep=O;delayms(lOO);beep=l;)delayms(5O);)例 6.5.1在上位机上用串口调试助手发送一个字符X,单片机收到字符后返回给上位机IgetX”,串口波特率设为9600bpSo(part2.4_l.c P137)#include#define uchar unsigned char#define uint unsigned intunsigned char flag,a,

    注意事项

    本文(新概念51单片机C语言教程例程.pdf)为本站会员(无***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

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

    收起
    展开