【Java精品源码栏目提醒】:网学会员为需要Java精品源码的朋友们搜集整理了单片机小程序 - 科学技术相关资料,希望对各位网友有所帮助!
单片机精品小程序(共三部分)1.流水灯includeltreg52.hgtincludeltintrins.hgtdefine uchar unsigned chardefine uint unsigned intuchar tempiuchar code table0x110x000x7e0xbd0xdb0xe70xdb0xbd0x7evoid delayuintvoid main P10xfe while1 fori7igt0i-- P1_crol_P11 delay300 fori7igt0i-- P1_cror_P11 delay300 P10x7e fori8igt0i-- P1tablei delay300 while1void delayuint Z uint x y forxZxgt0x-- fory110ygt0y--数码管includeltreg52.hgtdefine uint unsigned intdefine uchar unsigned charsbit welaP27sbit dulaP26uchar uuchar code table0x3f0x060x5b0x4f 0x660x6d0x7d0x07 0x7f0x6f0x770x7c 0x390x5e0x790x71 void delayuint zvoid main wela1 P00xea wela0 while1 foru0ult16u dula1 P0tableu dula0 delay1000 王新瑞同志写的//按一下 数码管数字加一includeltreg52.hgtdefine uint unsigned intdefine uchar unsigned charsbit P22P22sbit K1P32uchar numuchar codetable0xC00xF90xA40xB00x990x920x820xf80x800x900x880x830xC60xA10x860x8Evoid delayuint zvoid main//P10xff while1ifK10 delay5 //消抖 ifK10 num ifnum16 num0 whileK1 P220P0tablenumvoid delayuint z uint xy forxzxgt0x-- fory110ygt0y--测试按键includeltstc12c5a16s2.hgtincludeltintrins.hgtint tempcountsbit D0P20sbit k1P32void delayintvoid init D00 temp0xfe TMOD0x01 TH065536-50000/256 TL065536-50000256 EA1 ET01 TR01流水灯includeltstc12c5a16s2.hgtincludeltintrins.hgtint tempsbit D0P20void delayintvoid main D00 temp0xf e//11111110-gt11111101 while1 P0temp temp_crol_temp1 delay1000 void delayint z int x y forxzxgt0x-- fory112ygt0y--includeltstc12c5a16s2.hgtincludeltintrins.hgtdefine uint unsigned intdefine uchar unsigned charuint temp numuchar codetable0xc00xf90xa40xb00x990x920x820xf80x800x90//quot0xc00xf90xa40xb00x990x920x820xf80x800x90quot//0-9void delayuint z uint x y forxz xgt0 x-- fory123 ygt0 y--void main P20x00 while1 fornum0 numlt10 num ifnum10 num0 P0tablenum delay10000 名称:外部中断 0 边沿触发 内容: 通过中断接口 P3.2 连接的独立按键测试, 按一次 P1 口的 LED 灯反向, 这里使用边沿触发,所以一直按键不松开和一次按键效果相同,区 别于电平触发------------------------------------------------/includeltreg52.hgt //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义/------------------------------------------------ 主程序------------------------------------------------/void main P10x55 //P1 口初始值 EA1 //全局中断开 EX01 //外部中断 0 开 IT01 //边沿触发 while1 //在此添加其他程序 /------------------------------------------------ 外部中断程序------------------------------------------------/void ISR_Keyvoid interrupt 0 P1P1 //s3 按下触发一次,P1 取反一次十进制 十六进制 二进制0 00 0000 00001 01 0000 00012 02 0000 00103 03 0000 00114 04 0000 01005 05 0000 01016 06 0000 01107 07 0000 01118 08 0000 10009 09 0000 100110 0A 0000 101011 0B 0000 101112 0C 0000 110013 0D 0000 110114 0E 0000 111015 0F 0000 1111-----------------------------------------------以下 100 小程序中精选参考名称:串口通信 内容:连接好串口或者 usb 转串口至电脑,下载该程序,打开电源 打开串口调试程序,将波特率设置为 9600,无奇偶校验 晶振 11.0592MHz,发送和接收使用的格式相同,如都使用 字符型格式,设置正确后接受框可以看到 UART test,技术论坛:www.doflye.net thank you------------------------------------------------/includeltreg52.hgt //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义includequotdelay.hquot/------------------------------------------------void SendStrunsigned char s 串口初始化void I nitUART void SCON 0x50 // SCON: 模式 1 8-bit UART 使能接收 TMOD 0x20 // TMOD: t mer 1mode 2 8bit 重装 i - TH1 0xFD // TH1: 重装值 9600 波特率 晶振11.0592MHz TR1 1 // TR1: timer 1 打开 EA 1 //打开总中断 //ES 1 //打开串口中断/------------------------------------------------ 主函数------------------------------------------------/void main voidInitUART 1while SendStrquotUART test,技术论坛:www.doflye.net thank youquot DelayMs240//延时循环发送 DelayMs240 /------------------------------------------------ 发送一个字节------------------------------------------------/void SendByteunsigned char dat SBUF dat whileTI TI 0/------------------------------------------------ 发送一个字符串------------------------------------------------/void SendStrunsigned char s whiles0// 0 表示字符串结束标志, //通过检测是否字符串末尾 SendBytes s include quotdelay.hquot/------------------------------------------------ uS 延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0255 这里使用晶振 12M,精确延时请使用汇编大致延时 长度如下 Ttx25 uS------------------------------------------------/void DelayUs2xunsigned char t while--t/------------------------------------------------ mS 延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0255 这里使用晶振 12M,精确延时请使用汇编------------------------------------------------/void DelayMsunsigned char t whilet-- //大致延时 1mS DelayUs2x245 DelayUs2x245 /----------------------------------------------- 名称:串口通信 2 内容:连接好串口或者 usb 转串口至电脑,下载该程序,打开电源 打开串口调试程序,将波特率设置为 9600,无奇偶校验 晶振 11.0592MHz,发送和接收使用的格式相同,如都使用 字符型格式,按复位重启程序,可以看到接收到 UART test,技术论坛:www.doflye.net 请在发送区输入任意信 然后在发送区发送任意信息,接收区返回同样信息,表明串口收发无误includeltreg52.hgt //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义/------------------------------------------------ 函数声明------------------------------------------------/void SendStrunsigned char s/------------------------------------------------ 串口初始化------------------------------------------------/void I nitUART void SCON 0x50 // SCON: 模式 1 8-bit UART 使能接收 TMOD 0x20 // TMOD: t mer 1mode 2 8bit 重装 i - TH1 0xFD // TH1: 重装值 9600 波特率 晶振11.0592MHz TR1 1 // TR1: timer 1 打开 EA 1 //打开总中断 // ES 1 //打开串口中断/------------------------------------------------ 主函数------------------------------------------------/void main voidInitUARTSendStrquotUART test,技术论坛:www.doflye.net 请在发送区输入任意信息quotES 1 //打开串口中断 1while /------------------------------------------------ 发送一个字节------------------------------------------------/void SendByteunsigned char dat SBUF dat whileTI TI 0/------------------------------------------------ 发送一个字符串------------------------------------------------/void SendStrunsigned char s whiles0// 0 表示字符串结束标志,通过检测是否字符串末尾 SendBytes s /------------------------------------------------ 串口中断程序------------------------------------------------/void UART_SER void interrupt 4 //串行中断服务程序 har unsigned c Temp //定义临时变量 ifRI //判断是接收中断产生 RI0 //标志位清零 TempSBUF //读入缓冲区的值 P1Temp //把值输出到 P1 口,用于观察 SBUFTemp //把接收到的值再发回电脑端 ifTI //如果是发送标志位,清零 TI0/----------------------------------------------- 名称:IO 口高低电平控制 内容:点亮 P1 口的多个 LED 灯includeltreg52.hgtsbit LED0P10// 用 sbit 关键字 定义 LED 到 P1.0 端口,sbit LED1P11//LED 是自己任意定义且容易记忆的符号sbit LED2P12sbit LED3P13sbit LED4P14sbit LED5P15sbit LED6P16sbit LED7P17void main void //此方法使用 bit 位对单个端口赋值LED00 //将 P1.0 口赋值 0,对外输出低电平LED11LED20LED31LED40LED51LED60LED71 1while //主循环 //主循环中添加其他需要一直工作的程序 名称:IO 口高低电平控制 内容:点亮 P1 口的多个 LED 灯闪烁-includeltreg52.hgt //sbit LED0P10// 用 sbit 关键字 定义 LED 到 P1.0 端口,LED 是自己任意定义且容易记忆的符号sbit LED1P11sbit LED2P12sbit LED3P13sbit LED4P14sbit LED5P15sbit LED6P16sbit LED7P17void Delayunsigned int t //函数声明void main void //此方法使用 bit 位对单个端口赋值unsigned char i //定义一个无符号字符型局部变量 i 取值范围 0255 1while //主循环 fori0ilt10i //加入 for 循环,表明 for 循环大括号中 //的程序循环执行 10 次 LED00 //将 P1.0 口赋值 0,对外输出低电平 LED21 LED40 Delay5000 //调用延时程序;更改延时数字可以更改延时长度; //用于改变闪烁频率 LED01 //将 P1.0 口赋值 1,对外输出高电平 LED20 LED41 Delay5000 fori0ilt10i LED00 //将 P1.0 口赋值 0,对外输出低电平 LED21 LED40 Delay60000 //调用延时程序;更改延时数字可以更改延时长度; //用于改变闪烁频率 LED01 //将 P1.0 口赋值 1,对外输出高电平 LED20 LED41 Delay60000 //主循环中添加其他需要一直工作的程序 /------------------------------------------------ 延时函数,含有输入参数 unsigned int t,无返回值 unsigned int 是定义无符号整形变量,其值的范围是 065535------------------------------------------------/void Delayunsigned int t while--t/----------------------------------------------- 名称:IO 口高低电平控制 内容: LED 循环左移, 始终一个 led 点亮,并循环执行流水动作,左移符号 ltlt逻辑或符号 includeltreg52.hgt //void Delayunsigned int t //函数声明void main voidunsigned char i //定义一个无符号字符型局部变量 i 取值范围 0255Delay50000P10xfe //赋初始值while 1 //主循环 fori0ilt8i //加入 for 循环,表明 for 循环大括号中的程序循环执行 8次 Delay50000 P1ltlt1 P1P10x01 //左移后,最右端自动赋值 0,所以需要该语句赋值 1 P10xfe //重新赋初始值 //主循环中添加其他需要一直工作的程序 /------------------------------------------------ 延时函数,含有输入参数 unsigned int t,无返回值 unsigned int 是定义无符号整形变量,其值的范围是 065535------------------------------------------------/void Delayunsigned int t while--t/----------------------------------------------- 名称:IO 口高低电平控制 内容:通过查表获得 1 个字节的值然后赋值给 P1 端口,ROM 允许情况可以设置更多表格includeltreg52.hgt //unsigned char code table0x7f0xbf0xdf0xef 0xf70xfb0xfd0xfe 0xff0xff0x000x00 0x550x550xaa0xaa //rom 允许情况可以无限添加/------------------------------------------------ 函数声明------------------------------------------------/void Delayunsigned int t //函数声明/------------------------------------------------ 主函数------------------------------------------------/void main voidunsigned char i //定义一个无符号字符型局部变量 i 取值范围 0255while 1 //主循环 fori0ilt16i //加入 for 循环,表明 for 循环大括号中的程序循环 //执行 16 次,表明表格中有 16 个元素 P1tablei Delay30000 //主循环中添加其他需要一直工作的程序 /------------------------------------------------ 延时函数,含有输入参数 unsigned int t,无返回值 unsigned int 是定义无符号整形变量,其值的范围是 065535------------------------------------------------/void Delayunsigned int t while--t/----------------------------------------------- 名称:IO 口高低电平控制 内容:2 个 led 灯先左移,然后右移,然后同时闪烁------------------------------------------------/includeltreg52.hgt //void Delayunsigned int t //函数声明void main voidunsigned char i //定义一个无符号字符型局部变量 i //取值范围 0255unsigned char temp//定义临时变量用于转换while 1 //主循环 temp0xfc P1temp fori0ilt7i //加入 for 循环,表明 for 循环大括号 //中的程序循环执行 7 次 Delay50000 //调用延时程序;更改延时数字可 //以更改延时长度;用于改变闪烁频率 templtlt1 temptemp0x01 //也可以直接把 temp 换成 P1 P1temp //之所以加入 temp 做中间变量,转换 //完成后直接赋值到端口,防止直接 //操作端口造成的短暂闪烁 temp0x3f P1temp fori0ilt7i //加入 for 循环,表明 for 循环大括号 //中的程序循环执行 7 次 Delay50000 //调用延时程序;更改延时数字可以 //更改延时长度;用于改变闪烁频率 tempgtgt1 temp0x80 //等效于 temptemp0x80 P1temp fori0ilt3i //加入 for 循环,表明 for 循环大括号 //中的程序循环执行 3 次 P10xff Delay50000 P10x00 Delay50000 //主循环中添加其他需要一直工作的程序 /------------------------------------------------ .