下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 单片机C语言教程例程(全)

单片机C语言教程例程(全).doc

单片机C语言教程例程(全)

小日本是傻逼
2014-01-14 0人阅读 举报 0 0 暂无简介

简介:本文档为《单片机C语言教程例程(全)doc》,可适用于IT/计算机领域

目录目录TOCo""hzuHYPERLINKl"Toc"例编写程序点亮第一个发光二极管(partcP)HYPERLINKl"Toc"例利用for语句延时特性编写第一个发光二极管以间隔S亮灭闪动的程序(partcP)HYPERLINKl"Toc"例编写程序使第一个发光二极管以间隔ms亮灭闪动。(partcP)HYPERLINKl"Toc"例编写程序使第一个二极管以亮ms、灭ms的方式闪动。(partcP)HYPERLINKl"Toc"例利用C自带库crol(),以间隔ms实现流水灯程序(partcP)HYPERLINKl"Toc"例编写程序使第一个数码管显示(partcP)HYPERLINKl"Toc"例让实验板上个数码管同时点亮依次显示到F时间间隔为ms循环下去。(partcP)HYPERLINKl"Toc"例第一个数码管显示时间为s然后关闭它立即让第二个数码管显示时间为s,在关闭它……一直到最后一个数码管显示时间同样为s关闭它之后再回来显示第一个数码管一直循环下去。(partcP)HYPERLINKl"Toc"例利用定时器工作方式在实验板上实现第一个发光管以s亮灭闪烁。(partcP)HYPERLINKl"Toc"例用定时器的方式实现第一个发光二极管以ms间隔闪烁用定时器的方式实现数码管前两位s循环计时。(partcP)HYPERLINKl"Toc"例用数码管前两位显示一个十进制数变化范围为~开始时显示每按下S键一次数值加每按下S键一次数值减每按下S键一次数值归零按下S键一次利用定时器功能使数值开始自动每秒加再次按下S键数值停止加保持显示原数。(partcP)HYPERLINKl"Toc"例实验班上电时数码管不显示顺序按下矩阵键盘后数码管上依次显示~F六个数码管同时静态显示即可。(partcP)HYPERLINKl"Toc"例用单片机控制ADC进行数模转换当拧动实验板上AD旁边的电位时在数码管的前三位以十进制方式显示出AD转换后的数字量(位AD转换后数值在~变化)。(partcP)HYPERLINKl"Toc"例用单片机控制DAC芯片输出电流让发光二级管D由灭均匀变到最亮再由最亮均匀熄灭。在最亮和最暗时使用蜂鸣器分别警报一声完成整个周期时间控制在S左右循环变化。(partcP)HYPERLINKl"Toc"例在上位机上用串口调试助手发送一个字符X单片机收到字符后返回给上位机“IgetX”串口波特率设为bps。(partcP)HYPERLINKl"Toc"例单片机上电后等待从上位机串口发来的命令同时在数码管的前三位以十进制方式显示AD采集的数值在未收到上位机发送来的启动AD转换命令之前数码管始终显示。当收到上位机以十六进制发送来的后向上位机发送字符串“Turnonad!”同时间隔s读取一次AD的值然后把AD采集回来的位二进制转换成十进制表示的实际电压浮点数并且从串口发送给上位机形式如“ThevoltageisV”发送周期也是一秒一次同时在数码管上也要每秒刷新现实的数值。当收到上位机以十六进制发送过来的后向上位机发送字符串“Turnoffad!”然后停止发送电压值数码管上显示上次结束时保持的值。当收到上位机发来的其他任何数时向上位机发送字符串“Error!”。HYPERLINKl"Toc"例实现液晶的第一行显示“ILOVEMCU!”在第二行显示WWWTXMCUCOM。HYPERLINKl"Toc"例实现第一行从左侧移入“Helloeveryone!”同时第二行从右侧移入“Welcometohere!”移入速度自定然后停留在屏幕上。(partcP)HYPERLINKl"Toc"例实现液晶的第一行显示“ILOVEMCU!”第二行显示“我爱单片机”。(partcP)HYPERLINKl"Toc"例实现液晶第一行从右侧移入“Helloeveryone!”同时第二行从右侧移入“欢迎大家来学习!”移入速度自定最后停留在屏幕上。(partcP)HYPERLINKl"Toc"例实现在液晶上第一行显示“”并且让每一位数字随机变化第二行显示“wwwtxmcucom”第三行显示“天祥电子”第四行对应第三行显示出下划线。(partcP)HYPERLINKl"Toc"知识点:生成随机数(partsuijicP)HYPERLINKl"Toc"例利用定时器产生一个~秒变化的秒表并且显示在数码管上每过一秒将这个变化的数写入板上ATC内部。当关闭实验板电源并再次打开实验板电源时单片机先从ATC中将原来写入的数读取出来接着此数继续变化并显示在数码管上。(partcP)HYPERLINKl"Toc"例利用定时器工作方式在实验板上实现第一个发光管以s亮灭闪烁。(partcP)HYPERLINKl"Toc"例利用定时器工作方式在实验板上实现第一个发光管以s亮灭闪烁。(partcP)HYPERLINKl"Toc"例利用定时器工作方式在实验板上实现:用TL计数器对应的位定时器实现第一个发光管以s亮灭闪烁用TH计数器对应的位定时器实现第二个发光管以s亮灭闪烁。(partcP)HYPERLINKl"Toc"例利用计数器工作方式在实验板上实现:用一根导线一端连接GND引脚另一端去接触T(P)引脚每接触一下计数器计一次数将所计的数值实时显示在数码管的前两位计满时清再从头计起。(partcP)HYPERLINKl"Toc"例设置单片机串行口的工作模式间隔循环发送十六进制数xAA,然后用双路示波器观察P和P口波形。(HYPERLINKl"Toc"例用交叉串口线连接两块实验板或直接用短线交叉线连接连个单片机的P和P口(共地)。在一块板上编写矩阵键盘扫描程序当扫描到有键按下时将键值通过串口发送出去另一块板上单片机收到串口发送来的键值后将对应键值以~F方式显示在数码管上。HYPERLINKl"Toc"例程序分为主机程序和从机程序约定一次传送的数据为B以H地址的从机为例。(图为多机通信主机程序流程图)HYPERLINKl"Toc"图为多机通信从机程序流程图。HYPERLINKl"Toc"从机程序代码:(partcP)HYPERLINKl"Toc"例指针使用例程:(pointcP)HYPERLINKl"Toc"例编写程序实现:开启两个外部中断设置低电平触发中断用定时器计数并且显示在数码管的前两位当计数到时使单片机进入空闲(休眠)模式同时关闭定时器当单片机响应外部中断后从空闲(休眠)模式返回同时开启定时器。(HYPERLINKl"Toc"例实验板上实现如下描述:程序启动后设定看门狗溢出时间为s然后点亮第一个发光二极管稍延时一会然后熄灭发光二极管使程序进入等待死循环状态并且在死循环中大约每隔s喂狗一次看程序运行是否正常。HYPERLINKl"Toc"例在实验板上实现:操作STC单片机自带的EPROM,存储一组按秒递增的两位数据并且将数据实时显示在数码管上数据每变化一次就往EPROM中写入一次当关闭实验板电源并再次开启电源时从EPROM中读取先前存储的数据接着递增显示。HYPERLINKl"Toc"例STCLEADX系列单片机的AD转换功能。时钟MHz,转换结果以进制形式输出到串行口可以用串行口调试程序观察输出结果(本代码摘自宏晶科技芯片手册经作者调试可正常运行)。HYPERLINKl"Toc"例给出一个STCCAD应用的参考程序。(partcP)HYPERLINKl"Toc"程序利用单片机的定时器设计一个时钟。HYPERLINKl"Toc"程序使用DSC时钟芯片设计高精度时钟。HYPERLINKl"Toc"程序使用TXC实验板上的DSB温度传感器设计温控系统C语言源代码(partP)HYPERLINKl"Toc"程序太阳能充放电控制器C语言源代码HYPERLINKl"Toc"ISDx系列语音芯片C语言参考程序:HYPERLINKl"Toc"例使用TXC实验板上两个独立按键调节直流电机的转速同时在实验板的数码管上象征性的显示相应的转速值。通过控制单片机输出不同占空比的PWM信号来控制直流电机的转速(感性认识)。(partP)HYPERLINKl"Toc"例步进电机应用C语言程序设计(partP)HYPERLINKl"Toc"例舵机应用C语言程序设计实例:开机时舵机角度自动转为度通过实验板上的独立按键调节舵机的角度转动并且在实验板数码管上显示相应的角度。本例仅演示个角度的控制若想实现任意角度控制请大家自行编程实验。程序代码如下:(partP)HYPERLINKl"Toc"调节舵机使之转动个角度PWM信号周期为msHYPERLINKl"Toc"控制高电平的持续时间即可控制舵机停止制动的角度ms度HYPERLINKl"Toc"程序流程是:开机时舵机角度自动转为度按下P则转到度以后就根据两个按键的按下而转动例编写程序点亮第一个发光二极管(partcP)#include<regh>系列单片机头文件sbitled=P^声明单片机P口的第一位voidmain()主函数{led=*点亮第一个发光二极管*}例编写程序点亮P口的若干二极管(partcP)#include<regh>系列单片机头文件voidmain()主函数{P=xaawhile()}例利用for语句延时特性编写第一个发光二极管以间隔S亮灭闪动的程序(partcP)#include<regh>系列单片机头文件#defineuintunsignedint宏定义sbitled=P^声明单片机P口的第一位uinti,jvoidmain()主函数{while()大循环{led=*点亮第一个发光二极管*for(i=i>i)延时for(j=j>j)led=*关闭第一个发光二极管*for(i=i>i)延时for(j=j>j)}}例编写程序使第一个发光二极管以间隔ms亮灭闪动。(partcP)#include<regh>系列单片机头文件#defineuintunsignedint宏定义sbitled=P^声明单片机P口的第一位voiddelays()声明子函数voidmain()主函数{while()大循环{led=*点亮第一个发光二极管*delays()调用延时子函数led=*关闭第一个发光二极管*delays()调用延时子函数}}voiddelays()子函数体{uinti,jfor(i=i>i)for(j=j>j)}例编写程序使第一个二极管以亮ms、灭ms的方式闪动。(partcP)#include<regh>系列单片机头文件#defineuintunsignedint宏定义sbitled=P^声明单片机P口的第一位voiddelayms(uint)声明子函数voidmain()主函数{while()大循环{led=*点亮第一个发光二极管*delayms()延时毫秒led=*关闭第一个发光二极管*delayms()延时毫秒}}voiddelayms(uintxms){uinti,jfor(i=xmsi>i)i=xms即延时约xms毫秒for(j=j>j)}例利用C自带库crol(),以间隔ms实现流水灯程序(partcP)#include<regh>系列单片机头文件#include<intrinsh>#defineuintunsignedint宏定义#defineucharunsignedcharvoiddelayms(uint)声明子函数ucharaavoidmain()主函数{aa=xfe赋初值while()大循环{P=aadelayms()延时毫秒aa=crol(aa,)将aa循环左移位后再赋给aa}}voiddelayms(uintxms){uinti,jfor(i=xmsi>i)i=xms即延时约xms毫秒for(j=j>j)}例编写程序使第一个数码管显示(partcP)#include<regh>系列单片机头文件sbitdula=P^申明U锁存器的锁存端sbitwela=P^申明U锁存器的锁存端voidmain(){wela=打开U锁存器P=xFE送入位选信号wela=关闭U锁存器dula=打开U锁存器P=xF送入段选信号dula=关闭U锁存器while()程序停止到这里}例让实验板上个数码管同时点亮依次显示到F时间间隔为ms循环下去。(partcP)#include<regh>系列单片机头文件#defineucharunsignedchar#defineuintunsignedintsbitdula=P^申明U锁存器的锁存端sbitwela=P^申明U锁存器的锁存端ucharnumuncharcodetable={xf,x,xb,xf,x,xd,xd,x,xf,xf,x,xc,x,xe,x,x}voiddelayms(uint)voidmain(){wela=打开U锁存端P=xco送入位选信号wela=关闭U锁存端while(){for(num=num<num)个数循环显示{dula=打开U锁存端P=tablenum送入段选信号dula=关闭U锁存端delay()延时秒}}}voiddelayms(uintxms){uinti,jfor(i=xmsi>i)i=xms即延时约xms毫秒for(j=j>j)}例第一个数码管显示时间为s然后关闭它立即让第二个数码管显示时间为s,在关闭它……一直到最后一个数码管显示时间同样为s关闭它之后再回来显示第一个数码管一直循环下去。(partcP)#include<regh>系列单片机头文件#defineucharunsignedchar#defineuintunsignedintsbitdula=P^申明U锁存器的锁存端sbitwela=P^申明U锁存器的锁存端ucharnumuncharcodetable={xf,x,xb,xf,x,xd,xd,x,xf,xf,x,xc,x,xe,x,x}voiddelayms(uint)voidmain(){while(){dula=P=table送段选数据dula=P=xff送位选数据前关闭所有显示防止打开位选锁存时wela=原来段选数据通过位选锁存器造成混乱P=xfe送位选数据wela=delayms()延时dula=P=table送段选数据dula=P=xff送位选数据前关闭所有显示防止打开位选锁存时wela=原来段选数据通过位选锁存器造成混乱P=xfd送位选数据wela=delayms()延时dula=P=table送段选数据dula=P=xff送位选数据前关闭所有显示防止打开位选锁存时wela=原来段选数据通过位选锁存器造成混乱P=xfb送位选数据wela=delayms()延时dula=P=table送段选数据dula=P=xff送位选数据前关闭所有显示防止打开位选锁存时wela=原来段选数据通过位选锁存器造成混乱P=xf送位选数据wela=delayms()延时dula=P=table送段选数据dula=P=xff送位选数据前关闭所有显示防止打开位选锁存时wela=原来段选数据通过位选锁存器造成混乱P=xef送位选数据wela=delayms()延时dula=P=table送段选数据dula=P=xff送位选数据前关闭所有显示防止打开位选锁存时wela=原来段选数据通过位选锁存器造成混乱P=xdf送位选数据wela=delayms()延时}}voiddelayms(uintxms){uinti,jfor(i=xmsi>i)i=xms即延时约xms毫秒for(j=j>j)}例利用定时器工作方式在实验板上实现第一个发光管以s亮灭闪烁。(partcP)#include<regh>系列单片机头文件#defineucharunsignedchar#defineuintunsignedintsbitled=P^ucharnumvoidmain(){TMOD=x设置定时器为工作方式(MM为)TH=()装初值M晶振定时ms数为TL=()EA=开总中断ET=开定时器中断TR=启动定时器while()程序停止在这里等待中断中断发生}voidTtime()interrupt{TH=()重装初值TL=()numnum每加次判断一次是否到次if(num==)如果到了次说明秒时间到{num=然后把num清重新再计次led=~led让发光管状态取反}}例用定时器的方式实现第一个发光二极管以ms间隔闪烁用定时器的方式实现数码管前两位s循环计时。(partcP)#include<regh>系列单片机头文件#defineucharunsignedchar#defineuintunsignedintsbitdula=P^申明U锁存器的锁存端sbitwela=P^申明U锁存器的锁存端sbitled=P^uncharcodetable={xf,x,xb,xf,x,xd,xd,x,xf,xf,x,xc,x,xe,x,x}voiddelayms(uint)voiddisplay(uchar,uchar)ucharnum,num,num,shi,gevoidmain(){TMOD=x设置定时器为工作方式(MM为)TH=()装初值M晶振定时ms数为TL=()TH=()装初值M晶振定时ms数为TL=()EA=开总中断ET=开定时器中断ET=开定时器中断TR=启动定时器TR=启动定时器while()程序停止在这里等待中断中断发生{display(shi,ge)}}voiddisplay(ucharshi,ucharge)显示子函数{dula=P=tableshi送段选数据dula=P=xff送位选数据前关闭所有显示防止打开位选锁存时wela=原来段选数据通过位选锁存器造成混乱P=xfe送位选数据wela=delayms()延时dula=P=tablege送段选数据dula=P=xff送位选数据前关闭所有显示防止打开位选锁存时wela=原来段选数据通过位选锁存器造成混乱P=xfd送位选数据wela=delayms()延时}voiddelayms(uintxms){uinti,jfor(i=xmsi>i)i=xms即延时约xms毫秒for(j=j>j)}voidTtime()interrupt{TH=()重装初值TL=()numif(num==)如果到了次说明ms时间到{num=然后把num清重新再计次led=~led让发光管状态取反}}voidTtime()interrupt{TH=()重装初值TL=()numif(num==)如果到了次说明秒刷新时间到{num=然后把num清重新再计次numif(num==)这个数用来送数码管显示到后归num=shi=num把一个位数分离后分别送数码管显示ge=num十位和个位}}例用数码管前两位显示一个十进制数变化范围为~开始时显示每按下S键一次数值加每按下S键一次数值减每按下S键一次数值归零按下S键一次利用定时器功能使数值开始自动每秒加再次按下S键数值停止加保持显示原数。(partcP)#include<regh>系列单片机头文件#defineucharunsignedchar#defineuintunsignedintsbitkey=P^sbitkey=P^sbitkey=P^sbitkey=P^sbitdula=P^申明U锁存器的锁存端sbitwela=P^申明U锁存器的锁存端ucharcodetable={xf,x,xb,xf,x,xd,xd,x,xf,xf,x,xc,x,xe,x,x}voiddelayms(uint)ucharnumt,numvoiddisplay(ucharnumdis)显示子函数{ucharshi,ge分离两个分别要显示的数shi=numdisge=numdisdula=P=tableshi送十位段选数据dula=P=xff送位选数据前关闭所有显示防止打开位选锁存时wela=原来段选数据通过位选锁存器造成混乱P=xfe送位选数据wela=delayms()延时dula=P=tablege送个位段选数据dula=P=xffwela=P=xfdwela=delayms()}voiddelayms(uintxms){uinti,jfor(i=xmsi>i)i=xms即延时约xms毫秒for(j=j>j)}voidinit()初始化函数{TMOD=x设置定时器为工作方式()TH=()装初值ms一次中断TL=()EA=开总中断ET=开定时器中断}voidkeyscan(){if(key==){delayms()if(key==){numif(num==)当到时重新归num=while(!key)等待按键释放}}if(key==){delayms()if(key==){if(num==)当到时重新归num=numwhile(!key)}}if(key==){delayms()if(key==){num=清while(!key)}}if(key==){delayms()if(key==){while(!key)TR=~TR启动或停止定时器}}}voidmain(){init()初始化函数while(){keyscan()display(num)}}voidTtime()interrupt{TH=()重装初值TL=()numtif(numt==)如果到了次说明秒时间到{numt=然后把num清重新再计次numif(num==)num=}}例实验班上电时数码管不显示顺序按下矩阵键盘后数码管上依次显示~F六个数码管同时静态显示即可。(partcP)#include<regh>系列单片机头文件#defineucharunsignedchar#defineuintunsignedintsbitdula=P^申明U锁存器的锁存端sbitwela=P^申明U锁存器的锁存端ucharcodetable={xf,x,xb,xf,x,xd,xd,x,xf,xf,x,xc,x,xe,x,x}voiddelayms(uintxms){uinti,jfor(i=xmsi>i)i=xms即延时约xms毫秒for(j=j>j)}voiddisplay(ucharnum){P=tablenum显示函数只送段选数据dula=dula=}voidmatrixkeyscan(){uchartemp,keyP=xfetemp=Ptemp=tempxfif(temp!=xf){delayms()temp=Ptemp=tempxfif(temp!=xf){temp=Pswitch(temp){casexee:key=breakcasexde:key=breakcasexbe:key=breakcasexe:key=break}while(temp!=xf){temp=Ptemp=tempxf}display(key)}}P=xfdtemp=Ptemp=tempxfif(temp!=xf){delayms()temp=Ptemp=tempxfif(temp!=xf){temp=Pswitch(temp){casexed:key=breakcasexdd:key=breakcasexbd:key=breakcasexd:key=break}while(temp!=xf){temp=Ptemp=tempxf}display(key)}}P=xfbtemp=Ptemp=tempxfif(temp!=xf){delayms()temp=Ptemp=tempxfif(temp!=xf){temp=Pswitch(temp){casexeb:key=breakcasexdb:key=breakcasexbb:key=breakcasexb:key=break}while(temp!=xf){temp=Ptemp=tempxf}display(key)}}P=xftemp=Ptemp=tempxfif(temp!=xf){delayms()temp=Ptemp=tempxfif(temp!=xf){temp=Pswitch(temp){casexe:key=breakcasexd:key=breakcasexb:key=breakcasex:key=break}while(temp!=xf){temp=Ptemp=tempxf}display(key)}}}voidmain(){P=关闭所有数码管段选dula=dula=P=xc位选中所有数码管wela=wela=while(){matrixkeyscan()不停调用键盘扫描程序}}例用单片机控制ADC进行数模转换当拧动实验板上AD旁边的电位时在数码管的前三位以十进制方式显示出AD转换后的数字量(位AD转换后数值在~变化)。(partcP)#include<regh>系列单片机头文件#include<intrinsh>#defineucharunsignedchar#defineuintunsignedintsbitdula=P^申明U锁存器的锁存端sbitwela=P^申明U锁存器的锁存端sbitadwr=P^定义AD的WR端口sbitadrd=P^定义AD的RD端口ucharcodetable={xf,x,xb,xf,x,xd,xd,x,xf,xf,x,xc,x,xe,x,x}voiddelayms(uintxms){uinti,jfor(i=xmsi>i)i=xms即延时约xms毫秒for(j=j>j)}voiddisplay(ucharbai,ucharshi,ucharge)显示子函数{dula=P=tablebai送段选数据dula=P=xff送位选数据前关闭所有显示防止打开位选锁存时wela=原来段选数据通过位选锁存器造成混乱P=xe送位选数据wela=delayms()延时dula=P=tableshidula=P=xffwela=P=xdwela=delayms()dula=P=tablegedula=P=xffwela=P=xbwela=delayms()}voidmain()主程序{uchara,A,A,A,advalwela=P=xf置CSAD为选通ADCS以后不必再管ADCSwela=while(){adwr=nop()adwr=启动AD转换nop()adwr=for(a=a>a)TXC实验板AD工作频率较低所以启动转换后要多留点时间用来转换{这里把显示部分放这里的原因也是为了延长转换时间display(A,A,A)}P=xff读取P口之前先给其写全adrd=选通ADCSnop()adrd=AD读使能nop()adval=PAD数据读取赋给P口adrd=A=adval分出百十和个位A=advalA=adval}}例用单片机控制DAC芯片输出电流让发光二级管D由灭均匀变到最亮再由最亮均匀熄灭。在最亮和最暗时使用蜂鸣器分别警报一声完成整个周期时间控制在S左右循环变化。(partcP)#include<regh>#defineucharunsignedchar#defineuintunsignedintsbitdula=P^申明U锁存器的锁存端sbitwela=P^申明U锁存器的锁存端sbitdawr=P^定义DA的WR端口sbitdacs=P^定义DA的CS端口sbitbeep=P^定义蜂鸣器端口voiddelayms(uintxms){uinti,jfor(i=xmsi>i)i=xms即延时约xms毫秒for(j=j>j)}voidmain(){ucharval,flagdula=wela=dacs=dawr=P=while(){if(flag==){val=P=val通过P口给DA数据口赋值if(val==){flag=beep=delayms()beep=}delayms()}else{val=P=val通过P口给DA数据口赋值if(val==){flag=beep=delayms()beep=}delayms()}}}例在上位机上用串口调试助手发送一个字符X单片机收到字符后返回给上位机“IgetX”串口波特率设为bps。(partcP)#include<regh>#defineucharunsignedchar#defineuintunsignedintunsignedcharflag,a,iucharcodetable="Iget"ucharcodetable={'I','','g','e','t',''}voidinit(){TMOD=xTH=xfdTL=xfdTR=REN=SM=SM=EA=ES=}voidmain(){init()while(){if(flag==){ES=for(i=i<i){SBUF=tableiwhile(!TI)TI=}SBUF=awhile(!TI)TI=ES=flag=}}}voidser()interrupt{RI=a=SBUFflag=}例单片机上电后等待从上位机串口发来的命令同时在数码管的前三位以十进制方式显示AD采集的数值在未收到上位机发送来的启动AD转换命令之前数码管始终显示。当收到上位机以十六进制发送来的后向上位机发送字符串“Turnonad!”同时间隔s读取一次AD的值然后把AD采集回来的位二进制转换成十进制表示的实际电压浮点数并且从串口发送给上位机形式如“ThevoltageisV”发送周期也是一秒一次同时在数码管上也要每秒刷新现实的数值。当收到上位机以十六进制发送过来的后向上位机发送字符串“Turnoffad!”然后停止发送电压值数码管上显示上次结束时保持的值。当收到上位机发来的其他任何数时向上位机发送字符串“Error!”。(partcP)#include<regh>#include<intrinsh>#include<stdioh>#defineucharunsignedchar#defineuintunsignedintsbitdula=P^申明U锁存器的锁存端sbitwela=P^申明U锁存器的锁存端sbitadwr=P^定义AD的WR端口sbitadrd=P^定义AD的RD端口ucharflag,aunsignedcharflaguart,flagtime,flagon,a,i,tnum,advalfloatadvoucharcodetable={xf,x,xb,xf,x,xd,xd,x,xf,xf,x,xc,x,xe,x,x}voiddelayms(uintxms){uinti,jfor(i=xmsi>i)i=xms即延时约xms毫秒for(j=j>j)}voidinit(){TMOD=xSCON=xTH=()TL=()TH=xfdTL=xfdTR=ET=SM=SM=REN=EA=ES=}voiddisplay(ucharvalue)显示子函数{ucharbai,shi,gebai=value分出百十和个位shi=valuege=valuedula=P=tablebai送段选数据dula=P=xff送位选数据前关闭所有显示防止打开位选锁存时wela=原来段选数据通过位选锁存器造成混乱P=xe送位选数据wela=delayms()延时dula=P=tableshidula=P=xffwela=P=xdwela=delayms()dula=P=tablegedula=P=xffwela=P=xbwela=delayms()}uchargetad(){ucharadvaladwr=nop()adwr=启动AD转换nop()adwr=P=xff读取P口之前先给其写全adrd=nop()adrd=AD读使能nop()adval=PAD数据读取adrd=returnadval}voidmain(){init()wela=P=xf置CSAD为选通ADCS以后不必再管ADCSwela=while(){if(flaguart==){flaguart=ES=TI=switch(flagon){case:puts("Turnonad!n")TR=breakcase:printf("Turnoffad!n")TR=breakcase:p

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/147

单片机C语言教程例程(全)

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利