




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1.单个七段LED循环显示09/-/ 名称: 单个七段LED循环显示09/-/ 说明: 主程序中的循环语句反复将0-9的段码送P0口,形成数字0-9的/ 循环显示./-#include #define INT8Uunsigned char#define INT16Uunsigned int/09的共阴数码管段码表code INT8U SEG_CODE = 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;/-/ 延时函数/-void delay_ms(INT16U x) INT8U t; while(x-) for(t = 0; t 120; t+);/-/ 主程序/-void main() INT8U i=0; P0=0x00; while(1) P0=SEG_CODEi; i=(i+1)%10; delay_ms(300); 2.TIMER0控制88LED点阵屏显示数字(显示09)/-/ 名称: TIMER0控制88LED点阵屏显示数字/-/ 说明: 88LED点阵屏循环显示数字0-9,刷新过程由T0定时器溢出中断完成./ /-#include #include #define INT8U unsigned char#define INT16U unsigned int/-/ 数字点阵/-INT8U code DotMatrix = 0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,0x00,/00x00,0x00,0x00,0x21,0x7F,0x01,0x00,0x00,/10x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00,/20x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00,/30x00,0x0C,0x14,0x24,0x7F,0x04,0x00,0x00,/40x00,0x72,0x51,0x51,0x51,0x4E,0x00,0x00,/50x00,0x3E,0x49,0x49,0x49,0x26,0x00,0x00,/60x00,0x40,0x40,0x40,0x4F,0x70,0x00,0x00,/70x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00,/80x00,0x32,0x49,0x49,0x49,0x3E,0x00,0x00/9;INT8U i=0,t=0,Num_Index,cs; /-/ 主程序/-void main() /P3=0x80; /列选码初值1000000B,经左移1位,最先选C0列 cs=0x80; Num_Index=0; /从“0 ”开始显示 TMOD=0x00; /T0 工作在方式 0 、作13位的定时器 TH0=(8192-2000)/32; /求定时 2ms的初值,高8位放TH0, TL0=(8192-2000)%32; /初值低5位放TL0 (213=8192,25=32) IE=0x82; /开T0中断和总中断 TR0=1; /启动 T0 while(1); /无限循环,(每当定时时间到,则执行中断函数一次) /-/ T0定时器溢出中断函数控制LED点阵屏刷新显示/-void LED_Screen_Refresh() interrupt 1 TH0=(8192-2000)/32; /重置初值 TL0=(8192-2000)%32; /P2=0xff; /输出点阵码 P3=0x00;P2=DotMatrixNum_Index*8+i; /因LED是共阳极故取反 cs=_crol_(cs,1);P3=cs; /P3=_crol_(P3,1); /P3值循环左移1位,调整列选码并输出 if(+i=8) i=0; /每个数字的点阵码有 8 个字节 if(+t=250) /每个数字刷新显示一段时间(执行该函数250次 /即约2502ms后调整指针Num_Index显示下一个 t=0; if(+Num_Index=10) Num_Index=0; /偏移量加1,显示 /下一个数字,若偏移量加1后=10,则重置为从0开始 3. TIMER0控制88LED点阵屏显示字符(“你们好”)图同上/-/ 名称: TIMER0控制88LED点阵屏显示字符/-/ 说明: 88LED点阵屏循环显示数字0-9,刷新过程由T0定时器溢出中断完成./ /-#include #include #define INT8U unsigned char#define INT16U unsigned int/-/ 数字点阵/-INT8U code DotMatrix = 0x10,0x2F,0x40,0x36,0x21,0x6F,0x20,0x36, 0x10,0x2F,0x40,0x2F,0x00,0x20,0x21,0x3F, 0x08,0x1D,0x2A,0x4D,0x00,0x49,0x5F,0x68,;INT8U i=0,t=0,Num_Index; /-/ 主程序/-void delay2ms(void) /延时2ms子程序 unsigned char i,j,z;for(z=5;z0;z-)for(i=12;i0;i-)for(j=15;j0;j-); void main() P3=0x80; /列选码初值1000000B,经左移1位,最先选C0列 Num_Index=0; /从“0 ”开始显示 /-/ T0定时器溢出中断函数控制LED点阵屏刷新显示/-while(1) P2=0xff; /先全暗 P3=_crol_(P3,1); /P3口线列选码循环左移1位,并输出列选码 P2=DotMatrixNum_Index*8+i;if(+i=8) i=0; /送出点阵码,因LED是共阳极故取反 if(+t=250) /每个数字刷新显示一段时间(执行该函数250次 /即约2502ms后调整指针Num_Index显示下一个 t=0; if(+Num_Index=3) Num_Index=0; /偏移量加1,显示 /下一个数字,若偏移量加1后=10,则重置为从0开始 delay2ms();4. 数码管显示6键独立连接式键盘ORG 1000HMAIN:acall keybdajmp mainKEYBD: MOV A,#0FFH MOV P1,A ;置输入方式 MOV A, P1 ;读入键盘值 ANL A, #03FH ;屏蔽高2位 CJNE A,#03FH,XD ;有键转,去抖动 MOV B,#0FFH ;无键,置无键标志给B,返回 RETXD: LCALLDelay10ms;延时10 ms,消除前沿抖动 MOV P1,#0FFH ;置输入方式MOV A,P1 ;读入键盘值JNB ACC.0,K0;查询P1.0是否为低电平JNB ACC.1,K1;查询P1.1是否为低电平JNB ACC.2,K2;查询P1.2是否为低电平JNB ACC.3,K3;查询P1.3是否为低电平JNB ACC.4,K4;查询P1.4是否为低电平JNB ACC.5,K5;查询P1.5是否为低电平MOV B,#0FFH ;无键,置无键标志,返回RET K0:mov p2,#3FH RET K1:mov p2,#06H RETK2:mov p2,#5BH RETK3:mov p2,#4FH RET K4:mov p2,#66H RETK5:mov a,#6DH RETDelay10ms: MOV R7, #14H ; 延时10ms子程序DMS: MOV R6, #0FFH DJNZ R6, $ DJNZ R7,DMS RETEND5.字符型LCD(1) 显示姓名学号/-/ 名称: 1602字符液晶工作于8位模式/-#include #define uchar unsigned char #define uint unsigned intuchar code table1=SUHONGKUN!; /第一行显示的字符,共11个uchar code table2=211414283; /第二行显示的字符,共13个sbit RS=P25; /单片机端口定义sbit RW=P26;sbit E=P27;uchar num;void delay(uint xms) /-延时子函数-uint i,j;for(i=xms;i0;i-)for(j=125;j0;j-);void write_com(uchar com) /-写命令子函数-RS=0; /写命令RW=0; /写模式 P0=com; /将命令字送到数据线上delay(5); /稍延时 E=1; /给E一个高脉冲将命令字送入液晶控制器,完成写操作delay(5);E=0;void write_data(uchar date) /-写数据子函数-RS=1; /写数据RW=0; / 写模式P0 = date; /将要写的数据送到数据线上delay(5); /稍延时 E=1; /给E一个高脉冲将命令字送入液晶控制器,完成写操作delay(5);E=0;void LCD1602_init() /-LCD1602初始化设置-E=0; write_com(0x38); /设置8位数据接口,162显示,57点阵 write_com(0x0c); /设置开显示,光标不显示 write_com(0x06); /写一个字符后地址指针自动加上 write_com(0x01); /清屏,数据指针清0/-主函数-void main()LCD1602_init();write_com(0x80); /DDRAM数据指针定位在第一行第一个字符处for(num=0;num11;num+) /写第一行要显示的信息write_data(table1num);delay(5); /每两个字符间稍延时write_com(0x80+0x47); / 数据指针定位在第二行首字符处for(num=0;num9;num+) /写第二行要显示的信息write_data(table2num); delay(5);while(1);(2) 改 线/程序/-/ 名称: 1602字符液晶工作于8位模式/-#include #define uchar unsigned char #define uint unsigned intuchar code table1=SUHONGKUN!; /第一行显示的字符,共11个uchar code table2=211414283; /第二行显示的字符,共13个sbit RS=P20; /单片机端口定义sbit RW=P21;sbit E=P22;uchar num;void delay(uint xms) /-延时子函数-uint i,j;for(i=xms;i0;i-)for(j=125;j0;j-);void write_com(uchar com) /-写命令子函数-RS=0; /写命令RW=0; /写模式 P1=com; /将命令字送到数据线上delay(5); /稍延时 E=1; /给E一个高脉冲将命令字送入液晶控制器,完成写操作delay(5);E=0;void write_data(uchar date) /-写数据子函数-RS=1; /写数据RW=0; / 写模式P1 = date; /将要写的数据送到数据线上delay(5); /稍延时 E=1; /给E一个高脉冲将命令字送入液晶控制器,完成写操作delay(5);E=0;void LCD1602_init() /-LCD1602初始化设置-E=0; write_com(0x38); /设置8位数据接口,162显示,57点阵 write_com(0x0c); /设置开显示,光标不显示 write_com(0x06); /写一个字符后地址指针自动加上 write_com(0x01); /清屏,数据指针清0/-主函数-void main()LCD1602_init();write_com(0x80); /DDRAM数据指针定位在第一行第一个字符处for(num=0;num11;num+) /写第一行要显示的信息write_data(table1num);delay(5); /每两个字符间稍延时write_com(0x80+0x47); / 数据指针定位在第二行首字符处for(num=0;num9;num+) /写第二行要显示的信息write_data(table2num); delay(5);while(1);(3) 交替显示(姓名、学号)图与(1)同/-/ 名称: 1602字符液晶工作于8位模式/-#include #define uchar unsigned char #define uint unsigned intuchar code table1=SUHONGKUN!; /第一行显示的字符,共11个uchar code table2=211414283; /第二行显示的字符,共13个sbit RS=P25; /单片机端口定义sbit RW=P26;sbit E=P27;uchar num;void delay(uint xms) /-延时子函数-uint i,j;for(i=xms;i0;i-)for(j=125;j0;j-);void write_com(uchar com) /-写命令子函数-RS=0; /写命令RW=0; /写模式 P0=com; /将命令字送到数据线上delay(5); /稍延时 E=1; /给E一个高脉冲将命令字送入液晶控制器,完成写操作delay(5);E=0;void write_data(uchar date) /-写数据子函数-RS=1; /写数据RW=0; / 写模式P0 = date; /将要写的数据送到数据线上delay(5); /稍延时 E=1; /给E一个高脉冲将命令字送入液晶控制器,完成写操作delay(5);E=0;void LCD1602_init() /-LCD1602初始化设置- E=0; write_com(0x38); /设置8位数据接口,162显示,57点阵 write_com(0x0c); /设置开显示,光标不显示 write_com(0x06); /写一个字符后地址指针自动加上 write_com(0x01); /清屏,数据指针清0/-主函数-void main() LCD1602_init();write_com(0x80); while(1) /DDRAM数据指针定位在第一行第一个字符处for(num=0;num11;num+) /写第一行要显示的信息write_data(table1num);delay(100); /每两个字符间稍延时 write_com(0x01);write_com(0x80+0x47); / 数据指针定位在第二行首字符处for(num=0;num9;num+) /写第二行要显示的信息 write_data(table2num); delay(100); write_com(0x01); 6.ADC0809模数转换(1)(2)同图(1)连接电路,实现对0809通道三持续采集MAIN:MOV R1,#0000HMOV DPTR,#7FFBH MOV R7,#08HLOOP:MOVX DPTR,A MOV R6,#0AHDLAY:NOP NOP NOPDJNZ R6,DLAYMOVX A,DPTRMOV R1,AINC DPTRINC R1DJNZ R7,LOOP END(2) 查询方式 MAIN: MOV R1,#0000HMOV R7,#08HMOV DPTR,#7FFBHLOOP:MOVX DPTR,AHERE:JNB P1.0,HEREMOVX A,DPTRMOV R1,AINC DPTRINC R1DJNZ R7,LOOPEND7. DAC0832数模转换 (1) 输出三角波/-/ 用DAC0832生成锯齿波 /-/ 本例程序向DAC0832反复输出0x00-0xFF的数字量,经过数/模转/ 换及电流到电压的转换后输出锯齿波./ /-#include #include #define INT8U unsigned char#define INT16U unsigned int#define OUTDATA XBYTE0x7FFF /向0832输出转换数据的地址/-/ 延时子程序 /-void delay_ms(INT16U ms) INT8U t;while(ms-) for(t = 0; t 31; t+);/-/ 主程序 /-void main()INT8U i; while(1) for(i=0; i0;i-) OUTDATA=i; delay_ms(1);(2) 输出正弦波/-/ 用DAC0832生成锯齿波 /-/ 本例程序向DAC0832反复输出0x00-0xFF的数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB61T 767-2014 棉花 凯拓180F1规范
- 租用山林合同(标准版)
- 油漆涂料合同(标准版)
- 风电机组振动监测与分析
- 2025西安未央区职汉城社区卫生服务中心招聘(13人)考试参考试题及答案解析
- 2025汉中洋县妇幼保健计划生育服务中心招聘备考练习试题及答案解析
- 2025江西中寰投资集团下属公司招聘1人考试参考试题及答案解析
- 2025吉林大学白求恩第一医院放疗科招聘考试参考试题及答案解析
- 市政项目施工现场文明管理方案
- 2025年8月广东广州市天河区广氮实验幼儿园招聘编外聘用制专任教师2人备考练习题库及答案解析
- 小学金融知识小课堂课件
- 病历质量定期检查评估与反馈制度
- 乐天地产(成都)有限公司乐天广场四期项目环评报告
- 中建八局如何做好转型升级下的技术标编制工作
- 初中生叛逆期教育主题班会
- 小学国家领土与主权教育
- 工程造价协议合同
- 2025年长沙环境保护职业技术学院单招职业技能测试题库附答案
- 人工智能技术在中职语文教学中的实践
- 苏州印象城考察报告3.31课件
- 《中华会计文化传承与变迁》课件-第八篇 现代会计文化
评论
0/150
提交评论