单片机课程设计代码和参数
单片机课程设计代码
陈新 2014/7/21 17:32:03QQ可以找到历史记录的陈新 17:33:15无痕的回忆 17:01:52LED_LOOP: MOV R1, #251 ;1s的显示延时(好奇怪,居然不准)LED_LOOP_1: MOV R4, #14 ;使用了寄存器R1,R4(估计可以使用堆栈临时释放)LED_LOOP_2: LCALL DISPLAY_MOVEDJNZ R4, LED_LOOP_2DJNZ R1, LED_LOOP_1RET无痕的回忆 23:10:36ORG 0000HAJMP MAINORG 0030HHC595_SCK BIT P0.4HC595_RCK BIT P0.5HC595_RST BIT P0.6HC595_DAT BIT P0.7MAIN: MOV A, #00HMOV P0, ACLR HC595_RSTLOOP0: MOV R0, #0LOOP1: MOV R1, #100LOOP2: MOV R4, #10LOOP3: LCALL DISPLAYDJNZ R4, LOOP3DJNZ R1, LOOP2INC R0LJMP LOOP1DELEY0: MOV R6, #4 ;1ms延时的子程序DELEY1: MOV R7, #123DELEY2: DJNZ R7, DELEY2DJNZ R6, DELEY1NOPRETDISPLAY: MOV A, R0 MOV B, #100DIV ABMOV B, #10DIV AB;MOV A, #0LCALL SHOW_NUM MOV A, P0ANL A, #0F0HORL A, #1MOV P0, A ;延时LCALL DELEY0 ;延时LCALL DELEY0MOV A, R0 ;有问题MOV B, #100DIV AB;MOV A, #7LCALL SHOW_NUM MOV A, P0ANL A, #0F0HORL A, #2MOV P0, A ;延时LCALL DELEY0 ;延时LCALL DELEY0MOV A, R0MOV B, #100DIV ABXCH A, BMOV B, #10DIV AB;MOV A, #7LCALL SHOW_NUM MOV A, P0ANL A, #0F0HORL A, #4MOV P0, ALCALL DELEY0 ;延时LCALL DELEY0 ;延时MOV A, R0MOV B, #10DIV AB;MOV A, #7LCALL SHOW_NUMMOV A, P0ANL A, #0F0HORL A, #8MOV P0, ALCALL DELEY0 ;延时LCALL DELEY0RETSHOW_NUM: MOV DPTR, #SEGMOVC A, @A+DPTRLCALL SEND_BYTERETSEND_BYTE: MOV R2, #8 ;注意这个循环次数控制,有误差则会影响数码管显示MOV R6, #01HSEND_LOOP: MOV R3, AANL A, R6JZ ZEROJNZ NZEROZERO: CLR HC595_DATAJMP NEXTNZERO: SETB HC595_DATNEXT: SETB HC595_SCKCLR HC595_SCKMOV A, R6RL AMOV R6, AMOV A, R3DJNZ R2, SEND_LOOPCLR HC595_RCKSETB HC595_RCKRETSEG: DB 0FCHDB 60HDB 0DAHDB 0F2HDB 66HDB 0BEHDB 0E0HDB 0FEHDB 0F6HEND无痕的回忆 23:10:04int8u tab_abc[] = {0xee, 0x3e, 0x9c, 0x7a, 0x9e, 0x8e};罐头 17:36:46还有那个循环的呢陈新 18:18:36已经发给你了啊DISPLAY: MOV A, KEY ;将KEY转移给ALCALL SHOW_NUMMOV P0, #0FFH ;打开所有的数码管即设置为静态显示MOV P0, ALCALL DELAY_1MS ;延时注意到在动态显示中,点亮每位数码管都需要2秒钟LCALL DELAY_1MS ;延时。
单片机课设(三篇课设均带带仿真图和源程序代码)
12232 LCD PROTEUS仿真(51C)12232在proteus 里模型用关键字P ,“12232”查不出LCD的,要用1232 查找。
好不容易得到模型,编写程序,一直不能成功。
第一个字符正常,后面的就乱了。
最后才明白:12232的模型和实物不一样,共4页(这和实物一样),每页只能从地址0开始,水平方向从左往右显示。
另外,按实物的程序,仿真中显示是相反的,所以初始化时应改为反向显示,仿真显示才正常。
//12232LCD proteus仿真//2012 01 20 E:\DPJ_C\12232\12232UV4\12232_2C.C#include<reg51.h>#include<intrins.h>#include"chr16.h"#define uchar unsigned char#define uint unsigned int#define LCD_DB P0sbit E2=P3^5;sbit E1=P3^6;sbit A0=P3^7;void WR_Mcom(uchar i){E1=1;_nop_();A0=0;_nop_();_nop_();LCD_DB=i;_nop_();_nop_();E1=0;_nop_();_nop_();}void WR_Mdat(uchar i) {E1=1;_nop_();_nop_();A0=1;_nop_();_nop_();LCD_DB=i;_nop_();_nop_();E1=0;_nop_();_nop_();}void WR_Scom(uchar i) {A0=0;_nop_();_nop_();E2=1;_nop_();_nop_();LCD_DB=i;_nop_();_nop_();E2=0;_nop_();}void WR_Sdat(uchar i){A0=1;_nop_();_nop_();E2=1;_nop_();_nop_();LCD_DB=i;_nop_();_nop_();E2=0;_nop_();_nop_();}void lcdini(){WR_Mcom(0XE2);WR_Scom(0XE2);//WR_Mcom(0XAE);WR_Scom(0XAE);//显示开关:关WR_Mcom(0XA4);//动态显示WR_Scom(0XA4);//WR_Scom(0XA9);//1/32 占空比WR_Mcom(0XA1);WR_Scom(0XA1);WR_Mcom(0XEE);WR_Scom(0XEE);//写模式WR_Mcom(0X00);//起始列0WR_Mcom(0XC0);//起始行0WR_Scom(0X00);WR_Scom(0XC0);WR_Mcom(0XAF);WR_Scom(0XAF);//显示开关:开}void SetPage(uchar page0,uchar page1) {WR_Scom(0xB8|page0);}void SetAddress(uchar address0,uchar address1) {WR_Mcom(address1&0x7F);WR_Scom(address0&0x7F);}void clrscr( ){uchar i;uchar page;for (page=0;page<4;page++){SetPage(page,page);SetAddress(0,0);for (i=0;i<61;i++){WR_Mdat(0);WR_Sdat(0);}}}void display(){uchar i,j,page;for(page=0;page<4;page++){SetPage(page,page);SetAddress(0,0);for(i=0;i<4;i++){for(j=0;j<15;j++){if(page<2){WR_Mdat(chr16[2*i][j+page*15]);WR_Sdat(chr16[2*i+8][j+page*15]);}{WR_Mdat(chr16[2*i+16][j+(page-2)*15]);WR_Sdat(chr16[2*i+24][j+(page-2)*15]);}}}}}void main(){lcdini();clrscr();while(1){display();}}/**************************************************************************************** /CHR16.H //unsigned char code chr16[32][15]={{0x00,0x40,0x40,0xDA,0xFE,0x24,0x20,0xF8,0xDE,0xD6,0xD8,0xC8,0x48,0x00,0x00,},{0x08,0x0C,0x07,0x3F,0x3F,0x03,0x0F,0x1F,0x17,0xD5,0xFF,0x3F,0x11,0x11,0x01,},/*"梅",0*/{0x00,0x00,0x10,0x10,0x9C,0x9C,0x10,0x98,0x9E,0x0E,0x88,0x88,0x08,0x00,0x00,},{0x10,0x18,0x0C,0x7F,0x7F,0x08,0x08,0x3F,0x7F,0x43,0x41,0x40,0x78,0x38,0x00,},/*"花",1*/{0x00,0x00,0x20,0x20,0xE0,0xE0,0x60,0xFA,0xFE,0x24,0x60,0x60,0x20,0x00,0x00,},{0x00,0x10,0x19,0x0F,0x07,0x24,0x38,0x1F,0x07,0x0C,0x38,0x30,0x20,0x20,0x00,},/*"欢",2*/{0x00,0x00,0x00,0x08,0xA8,0xA8,0xFE,0x7E,0xEC,0xC4,0x44,0x00,0x00,0x00,0x00,},{0x08,0x08,0x08,0x08,0x6A,0xEF,0xAD,0xBD,0xD7,0x77,0x34,0x04,0x04,0x04,0x00,},/*"喜",3*/{0x00,0x40,0x40,0x18,0x98,0x84,0xFC,0xFC,0xEC,0xFE,0xDE,0xC4,0x40,0x00,0x00,},{0x00,0x10,0x3C,0x3E,0x42,0x45,0x6D,0x3D,0x1F,0x3F,0x63,0x60,0x40,0x40,0x40},/*"漫",4*/{0x00,0x00,0x80,0x88,0x88,0x88,0xF8,0x7C,0x44,0x44,0x40,0x40,0x00,0x00,0x00,},{0x00,0x20,0x20,0x30,0x1C,0x0F,0x03,0x07,0x0E,0x18,0x30,0x30,0x20,0x20,0x00,},/*"天",5*/{0x00,0x80,0xF0,0x70,0x64,0x64,0xFC,0xFC,0xD6,0xD2,0x10,0x30,0x30,0x00,0x00,},{0x00,0x00,0x00,0x44,0x55,0x55,0x55,0x5F,0x6A,0x3E,0x1E,0x00,0x00,0x00,0x00,},/*"雪",6*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},{0x00,0x00,0x68,0x78,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",7*/{0x00,0x00,0x10,0xB0,0xB0,0x00,0xE0,0xF8,0xDE,0xD6,0x10,0x10,0x00,0x00,0x00,},{0x00,0x08,0x0C,0x0F,0x23,0x3B,0x1B,0x42,0x7F,0x7F,0x09,0x39,0x31,0x00,0x00,},/*"冻",8*/{0x00,0x00,0x00,0xC8,0xE8,0xA8,0x88,0xFC,0xF4,0x84,0xC4,0x40,0x00,0x00,0x00,},{0x00,0x20,0x31,0x1B,0x0E,0x07,0x01,0x1F,0x3F,0x31,0x20,0x30,0x3C,0x1C,0x00,},/*"死",9*/{0x00,0x00,0x08,0x08,0x0E,0xCE,0xE8,0x68,0xCE,0x8E,0x0E,0x04,0x00,0x00,0x00,},{0x08,0x08,0x0C,0x06,0x3F,0x7F,0x42,0x5E,0x5E,0x43,0x73,0x73,0x02,0x02,0x02,},/*"苍",10*/{0x00,0xC0,0xC0,0xFC,0xFC,0xE0,0xF8,0xB8,0xE8,0xF8,0xDC,0xCC,0x80,0x00,0x00,},{0x00,0x10,0x19,0x0F,0x07,0x07,0x07,0x0F,0x1F,0x3F,0x27,0x27,0x30,0x30,0x00,},/*"蝇",11*/{0x00,0x00,0x00,0x00,0x80,0x90,0xFE,0xFE,0x90,0xD0,0x40,0x00,0x00,0x00,0x00,},{0x00,0x20,0x31,0x19,0x0D,0x07,0xFF,0xFF,0x06,0x0C,0x18,0x10,0x30,0x20,0x00,},/*"未",12*/{0x00,0x00,0x00,0x80,0xB8,0x78,0xE8,0xEC,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,},{0x20,0x30,0x1C,0x0F,0x07,0x04,0x0F,0x0F,0x19,0x31,0x30,0x20,0x20,0x20,0x20,},/*"足",13*/{0x00,0x80,0x80,0x80,0xC8,0xE8,0xB8,0x9E,0xFE,0xEC,0xC4,0x40,0x40,0x40,0x00,},{0x00,0x00,0x00,0x00,0x0E,0x0E,0x0E,0x06,0xC2,0xFF,0x3F,0x00,0x00,0x00,0x00,},/*"奇",14*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},{0x00,0x00,0x30,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},/*"。
单片机课程设计说明书(word文档+全!)
调试工具:J-Link、ST-Link等 仿真工具:Proteus、Multisim等 编程技巧:模块化编程、代码优化等
程序流程图设计与实现
流程图设计:根据 需求分析,设计出 流程图
流程图实现:根据 流程图,编写程序 代码
程序调试:对编写 的程序进行调试, 确保其正确运行
人工智能:单片机在人工智能领域的应用将更加深入,如智能机器人、智能语音识别等
医疗健康:单片机在医疗健康领域的应用将更加普及,如智能医疗设备、智能穿戴设备等 环保节能:单片机在环保节能领域的应用将更加重要,如智能能源管理、智能环保设备等
感谢您的观看
汇报人:
软件测试与优化
测试方法:单元测试、集成测试、系统测试等 测 试 工 具 : J U n i t 、 Te s t N G 、 S e l e n i u m 等 优化目标:提高代码质量、提高运行效率、降低资源消耗等 优化方法:代码重构、算法优化、性能调优等
课程设计总结与 展望
课程设计总结
课程设计目标:掌 握单片机基本原理 和编程方法
课程设计目的
掌握单片机的基本原理和应用
提高编程能力和硬件设计能力
培养创新思维和解决问题的能 力
提高团队合作和沟通能力
课程设计要求
课程设计 目的:掌 握单片机 原理和应 用技术
课程设计 内容:包 括硬件设 计和软件 设计两部 分
课程设计要 求:硬件设 计要求实现 特定功能, 软件设计要 求编写程序 实现特定功 能
调试步骤:根据测 试结果,对硬件进 行调试和优化
常见问题:信号 干扰、电源不稳 定、硬件故障等
解决方案:根据问题 原因,采取相应的解 决方案,如更换元器 件、调整电路参数等
51单片机课程设计源程序
TIME0_DOWN EQU F0 ;将F0设置为定时器0定时到标志FINISH_ID EQU 30H ;学号发送标志KEY_FLAG BIT 00H ;有键按下标志KEY_LONG BIT 01H ;键长按KEY_D EQU 31H ;键值存放地址ADC0809_AD EQU 8000H ;设置ADC0809地址DAC0832_AD EQU 0000H ;设置DAC0832地址ADC_FLAG BIT 02H ;设置ADC0809读数据标志ADC_DATE EQU 32H ;设置ADC0809数据地址ADC_0 EQU 33H ;ADC0809转化为BCD码后个位存放地址ADC_1 EQU 34H ;十分位存放地址ADC_2 EQU 35H ;百分位存放地址ADC_3 EQU 36H ;千分位存放地址ORG 0000H ;程序开始,跳转至主程序0000 020030 LJMP MAINORG 0003H ;外部中断0入口0003 020141 LJMP INT0_INORG 000BH ;设置定时器0中断入口地址000B 020132 LJMP TIME0ORG 0013H ;外部中断1入口0013 020151 LJMP INT1_INORG 0030H ;主程序开始地址0030 758169 MAIN: MOV SP,#69H ;初始化堆栈指针0033 C292 CLR P1.2 ;显示器清零0035 D292 SETB P1.20037 753000 MOV FINISH_ID,#0 ;将标志位清零003A C2D5 C LR TIME0_DOWN003C C200 CLR KEY_FLAG003E C201 CLR KEY_LONG0040 753100 MOV KEY_D,#00043 C202 CLR ADC_FLAG0045 753200 MOV ADC_DATE,#00048 753300 MOV ADC_0,#0004B 753400 MOV ADC_1,#0004E 753500 MOV ADC_2,#00051 753600 MOV ADC_3,#00054 C291 CLR P1.1 ;初始化键盘,行线置零,有键按下触发中断0056 C293 CLR P1.30058 D2B8 S ETB PX0 ;设置键盘中断为高级中断005A D28A SETB IT1 ;设置外部中断1为下降沿触发方式005C 758901 MOV TMOD,#01H ;设置定时器0工作方式005F 75A887 MOV IE,#10000111B ;开中断;*************显示学号******************0062 7A05 MOV R2,#5 ;显示学号程序,设置发送数据的个数0064 EA DIS_ID: MOV A,R20065 C3 CLR C0066 9401 SUBB A,#10068 900232 MOV DPTR,#TAB_ID ;查断码表表得到发送的数据值006B 93 MOVC A,@A+DPTR006C F599 MOV SBUF,A ;发送数据006E 109902 CONT: JBC TI,NEXT ;等待数据发完,发完清除中断标志继续发送0071 80FB SJMP CONT0073 DAEF NEXT: DJNZ R2,DIS_ID ;判断第一段发完没有,发完后继续发送下一段0075 7A05 MOV R2,#5 ;重赋发送数据的个数0077 0530 INC FINISH_ID ;递增学号显示标志,判断是否发送完成0079 E530 MOV A,FINISH_ID007B B40306 CJNE A,#3,NEXT1 ;没有完成则先延时后继续发送007E 753000 MOV FINISH_ID,#00081 02009F LJMP OTHER ;发送完成后执行其他程序0084 758C3C NEXT1: MOV TH0,#3CH ;定时器0定时初值,延时50ms,计算方法:0087 758AB0 MOVTL0,#0B0H ;TH0=(65536-50000)/256,TL0=(65536-50000)%25 6008A 7B1E MOV R3,#30 ;设置软件计数器,计30次,即1.5s008C D28C S ETB TR0 ;启动定时器0008E E582 MOV A,DPL ;发完一次后DPTR加5,指向下一页数据0090 2405 ADD A,#50092 F582 MOV DPL,A0094 E583 MOV A,DPH0096 3400 ADDC A,#00098 F583 MOV DPH,A009A 10D5C7 L1: JBC TIME0_DOWN,DIS_ID ;等待计时时间到,时间到继续下步显示009D 80FB SJMP L1;************判断按键执行其他功能**************009F 3000C2 OTHER: JNB KEY_FLAG,DIS_ID ;判断是否有键按下,没有则继续显示学号00A2 C2A8 CLR EX0 ;如果有键按下,则关闭键盘中断,以免再次中断导致键值读错00A4 758C3C M OV TH0,#3CH ;开启定时器0,计算是否为长按键00A7 758AB0 M OV TL0,#0B0H00AA 7B1E M OV R3,#3000AC D28C SETB TR000AE 1200D0 L CALL KEYSCAN ;键盘扫描,以确定按键值和长按键00B1 200103 JB KEY_LONG,SEC_FUN ;判断是否为长按键,若是,则调用第二功能00B4 020064 LJMP DIS_ID ;否则继续显示学号00B7 C201 SEC_FUN:CLR KEY_LONG ;清楚长按键标志00B9 900252 MOV DPTR,#TAB_FUN ;利用查转向地址表法执行对应第二功能程序00BC E531 MOV A,KEY_D00BE 2531 ADD A,KEY_D00C0 73 JMP @A+DPTR;*********delay10ms子程序**************00C1 D2D3 DELAY_10MS: SETB PSW.3 ;10MS延时子程序00C3 780A DL0: MOV R0,#1000C5 797D DL1: MOV R1,#7DH00C7 00 NOP00C8 00 NOP00C9 D9FA DJNZ R1,DL100CB D8F6 DJNZ R0,DL000CD C2D3 CLR PSW.300CF 22 RET;**********键盘扫描子程序**************00D0 5390FD KEYSCAN: ANL P1,#11111101B ;键盘扫描子程序,先将P1.1赋0,P1.3赋100D3 439008 ORL P1,#00001000B00D6 E590 MOV A,P1 ;读回P1.5,P1.7的值,若P1.5为0,则键值为000D8 20E506 JB ACC.5,K100DB 753100 MOV KEY_D,#000DE 020104 LJMP OUT_KS1 ;若P1.7为1,则键值为100E1 20E706 K1: JB ACC.7,KS00E4 753101 MOV KEY_D,#100E7 020104 LJMP OUT_KS100EA 5390F7 KS: ANL P1,#11110111B ;再将P1.3赋0,P1.1赋1 00ED 439042 ORL P1,#01000010B00F0 E590 MOV A,P1 ;读回P1.5,P1.7的值,若P1.5为0,则键值为200F2 20E506 JB ACC.5,K200F5 753102 MOV KEY_D,#200F8 020104 LJMP OUT_KS100FB 20E706 K2: JB ACC.7,OUT_KS1 ;若P1.7为0,则键值为300FE 753103 MOV KEY_D,#30101 020104 LJMP OUT_KS1 ;读出键值后判断松手0104 E590 OUT_KS1: MOV A,P1 ;读回P1值0106 445F ORL A,#5FH ;屏蔽不相干位0108 F4 CPL A ;变0有效为1有效0109 600B JZ OUT_KS2 ;判断是否继续为0,若为0,则说明松手了,继续判断是否为长按键010B E531 MOV A,KEY_D ;若不为0,则显示键值010D 900241 MOV DPTR,#TAB_NUM ;查表法显示键值0110 93 MOVC A,@A+DPTR0111 120126 LCALL DIS_NUM ;调用显示键值程序0114 80EE SJMP OUT_KS1 ;循环判断是否松手0116 30D504 OUT_KS2: JNB TIME0_DOWN,OUT_KS3 ;判断定时器0是否定时完,若完,则置长按键标志0119 C2D5 CLR TIME0_DOWN ;否则,直接返回011B D201 SETB KEY_LONG011D C200 OUT_KS3: CLR KEY_FLAG ;先清除按键标志,关闭蜂鸣器,关闭定时器0,再返回011F C28C CLR TR00121 D2A8 SETB EX00123 D290 SETB P1.00125 22 RET;************显示键值子程序***************0126 7C05 DIS_NUM: MOV R4,#50128 F599 DIS_NUM1: MOV SBUF,A012A 109902 LP: JBC TI,DIS_NUM2012D 80FB SJMP LP012F DCF7 DIS_NUM2: DJNZ R4,DIS_NUM10131 22 RET;*********定时器0中断服务程序*************0132 758C3C TIME0: MOV TH0,#3CH ;重复初值0135 758AB0 MOV TL0,#0B0H0138 DB06 D JNZ R3,OUT_TIME0 ;递减软件计数器,若减为0,说明计数时间到013A 7B1E MOV R3,#30 ;否则,直接返回013C C28C CLR TR0 ;计数时间到后,重赋软件计数器初值,关闭计数器013E D2D5 SETB TIME0_DOWN ;设定计数时间到标志0140 32 OUT_TIME0: RETI;*********外部中断0中断服务程序**********0141 C0D0 INT0_IN: PUSH PSW ;保护现场0143 1200C1 LCALL DELAY_10MS ;出现中断信号后,先延时10ms0146 A2B2 MOV C,P3.2 ;读回P3.2引脚状态0148 4006 JC OUT_INT0 ;若继续为低电平,则确定有键按下,置按键标志,开启蜂鸣器后返回014A D200 SETB KEY_FLAG ;若为高电平,说明为干扰信号,标志位不置位直接返回014C C290 CLR P1.0014E D0D0 POP PSW ;恢复现场0150 32 OUT_INT0: RETI;*********外部中断1中断服务程序**********0151 C0E0 INT1_IN: PUSH ACC ;保护现场0153 908000 MOV DPTR,#ADC0809_AD ;给ADC0809地址,读回AD转换值0156 E0 MOVX A,@DPTR0157 F532 MOV ADC_DATE,A0159 D202 SETB ADC_FLAG ;AD读完数据标志置位015B D0E0 POP ACC ;恢复现场015D 32 RETI;*********AD功能程序*********************015E 908000 FUN_AD: MOV DPTR,#ADC0809_AD ;DPTR赋值为ADC0809地址0161 F0 MOVX @DPTR,A ;打开AD0162 100202 L3: JBC ADC_FLAG,NEXT2 ;等待AD是读数完成0165 80FB SJMP L30167 E532 NEXT2: MOV A,ADC_DATE ;将AD读数送A 0169 75F013 MOV B,#19 ;将读到的值乘以19得到应该显示的读数值016C A4 MUL AB016D D2D4 SETB PSW.4 ;保护第0组工作寄存器016F FA MOV R2,A ;先把该显示的值暂存0170 ABF0 MOV R3,B0172 C3 AD0: CLR C ;把暂存的值转化为4位BCD码0173 EA MOV A,R2 ;利用减法,先减1000,够减则相应位加1,否则,恢复原值0174 94E8 SUBB A,#0E8H ;继续减100,得到百位值,同上的方法0176 FA MOV R2,A ;十位和个位利用除法得到0177 EB MOV A,R30178 9403 SUBB A,#03H017A FB MOV R3,A017B 4004 JC AD01017D 0533 INC ADC_0017F 80F1 SJMP AD00181 EA AD01: MOV A,R20182 24E8 ADD A,#0E8H0184 FA MOV R2,A0185 EB MOV A,R30186 3403 ADDC A,#03H0188 FB MOV R3,A0189 EA AD1: MOV A,R2018A C3 CLR C018B 9464 SUBB A,#64H018D FA MOV R2,A018E EB MOV A,R3018F 9400 SUBB A,#00191 FB MOV R3,A0192 4004 JC AD110194 0534 INC ADC_10196 80F1 SJMP AD10198 EA AD11: MOV A,R20199 2464 ADD A,#64H019B 75F00A MOV B,#10019E 84 DIV AB019F F535 MOV ADC_2,A01A1 85F036 MOV ADC_3,B01A4 E536 MOV A,ADC_3 ;判断最后一位的值大小,若小于5,舍掉01A6 B40500 CJNE A,#5,AD2 ;否则,向高位进101A9 401C AD2: JC SHE01AB E535 MOV A,ADC_201AD 2401 ADD A,#101AF D4 DA A01B0 FC MOV R4,A01B1 540F ANL A,#0FH01B3 F535 MOV ADC_2,A01B5 EC MOV A,R401B6 C4 SWAP A01B7 540F ANL A,#0FH01B9 2534 ADD A,ADC_101BB D4 DA A01BC FC MOV R4,A01BD 540F ANL A,#0FH01BF F534 MOV ADC_1,A01C1 EC MOV A,R401C2 C4 SWAP A01C3 540F ANL A,#0FH01C5 2433 ADD A,#ADC_001C7 753600 SHE: MOV ADC_3,#001CA 1201D8 LCALL DIS_AD ;转换后显示转换值01CD C2D4 CLR PSW.4 ;恢复第0组工作寄存器01CF 200003 JB KEY_FLAG,AD_OUT ;等待其他键按下01D2 02015E LJMP FUN_AD01D5 02009F AD_OUT: LJMP OTHER;***********AD显示功能********************01D8 E535 DIS_AD: MOV A,ADC_2 ;先发送最后一位01DA 900241 MOV DPTR,#TAB_NUM ;查表得到段码01DD 93 MOVC A,@A+DPTR01DE F599 MOV SBUF,A ;发送段码01E0 109902 A_0: JBC TI,DIS_AD0 ;等待发完,未完继续等待,完成后发送下一个01E3 80FB SJMP A_001E5 E534 DIS_AD0: MOV A,ADC_101E7 900241 MOV DPTR,#TAB_NUM01EA 93 MOVC A,@A+DPTR01EB F599 MOV SBUF,A01ED 109902 A_1: JBC TI,DIS_AD101F0 80FB SJMP A_101F2 E533 DIS_AD1: MOV A,ADC_001F4 90024C MOV DPTR,#TAB_DOT01F7 93 MOVC A,@A+DPTR01F8 F599 MOV SBUF,A01FA 109902 A_2: JBC TI,DIS_AD201FD 80FB SJMP A_201FF 7400 DIS_AD2: MOV A,#00H0201 F599 MOV SBUF,A0203 109902 A_3: JBC TI,DIS_AD30206 80FB SJMP A_30208 7400 DIS_AD3: MOV A,#00H020A F599 MOV SBUF,A020C 109902 A_4: JBC TI,OUT_DIS_AD020F 80FB SJMP A_40211 22 OUT_DIS_AD: RET;************DA功能************************0212 900000 FUN_DA: MOV DPTR,#DAC0832_AD ;赋DA地址0215 7400 MOV A,#00H ;发送数据给DAC08320217 F0 UP: MOVX @DPTR,A0218 04 INC A ;A加1后继续传0219 00 NOP ;等待时间到021A 00 NOP021B 00 NOP021C 00 NOP021D 00 NOP021E 70F7 JNZ UP0220 14 DOWN: DEC A ;A加完后开始减1 0221 F0 MOVX @DPTR,A ;传送数据给DAC08320222 00 NOP0223 00 NOP0224 00 NOP0225 00 NOP0226 00 NOP0227 70F7 JNZ DOWN0229 200003 JB KEY_FLAG,DA_OUT ;判断是否有其他键按下,有即跳出DA功能,无则继续跳回DA功能022C 04 INC A022D 80E8 SJMP UP022F 02009F DA_OUT: LJMP OTHER0232 0000800235 8080 TAB_ID: DB 00H,00H,80H,80H,80H ;学号显示断码表0237 404046023A C686 DB 40H,40H,46H,0C6H,86H023C 6060FC023F FEDA DB 60H,60H,0FCH,0FEH,0DAH0241 FC60DA0244 F266B60247 BEE0FE024A F600 TAB_NUM: DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H,00H ;数字断码表024C FD61DB024F F367B7 TAB_DOT: DB 0FDH,61H,0DBH,0F3H,67H,0B7H ;带小数点数字断码表0252 0164 TAB_FUN: AJMPDIS_ID ;第二功能转向地址表0254 0164 AJMP DIS_ID0256 215E AJMP FUN_AD0258 4112 AJMP FUN_DAEND符号值类型AC = 00D6H CONST 常量ACC = 00E0H CONST 常量AD0 = 0172H CODE 标号AD01 = 0181H CODE 标号AD1 = 0189H CODE 标号AD11 = 0198H CODE 标号AD2 = 01A9H CODE 标号ADC0809_AD = 8000H CONST 常量ADC_0 = 0033H CONST 常量ADC_1 = 0034H CONST 常量ADC_2 = 0035H CONST 常量ADC_3 = 0036H CONST 常量ADC_DATE = 0032H CONST 常量ADC_FLAG = 0002H CONST 常量AD_OUT = 01D5H CODE 标号A_0 = 01E0H CODE 标号A_1 = 01EDH CODE 标号A_2 = 01FAH CODE 标号A_3 = 0203H CODE 标号A_4 = 020CH CODE 标号B = 00F0H CONST 常量CONT = 006EH CODE 标号CY = 00D7H CONST 常量DAC0832_AD = 0000H CONST 常量DA_OUT = 022FH CODE 标号DELAY_10MS = 00C1H CODE 标号DIS_AD = 01D8H CODE 标号DIS_AD0 = 01E5H CODE 标号DIS_AD1 = 01F2H CODE 标号DIS_AD2 = 01FFH CODE 标号DIS_AD3 = 0208H CODE 标号DIS_ID = 0064H CODE 标号DIS_NUM = 0126H CODE 标号DIS_NUM1 = 0128H CODE 标号DIS_NUM2 = 012FH CODE 标号DL0 = 00C3H CODE 标号DL1 = 00C5H CODE 标号DOWN = 0220H CODE 标号DPH = 0083H CONST 常量DPL = 0082H CONST 常量EA = 00AFH CONST 常量ES = 00ACH CONST 常量ET0 = 00A9H CONST 常量ET1 = 00ABH CONST 常量EX0 = 00A8H CONST 常量EX1 = 00AAH CONST 常量F0 = 00D5H CONST 常量F1 = 00D1H CONST 常量FINISH_ID = 0030H CONST 常量FUN_AD = 015EH CODE 标号FUN_DA = 0212H CODE 标号IE = 00A8H CONST 常量IE0 = 0089H CONST 常量IE1 = 008BH CONST 常量INT0_IN = 0141H CODE 标号INT1_IN = 0151H CODE 标号IP = 00B8H CONST 常量IT0 = 0088H CONST 常量IT1 = 008AH CONST 常量K1 = 00E1H CODE 标号K2 = 00FBH CODE 标号KEYSCAN = 00D0H CODE 标号KEY_D = 0031H CONST 常量KEY_FLAG = 0000H CONST 常量KEY_LONG = 0001H CONST 常量KS = 00EAH CODE 标号L1 = 009AH CODE 标号L3 = 0162H CODE 标号LP = 012AH CODE 标号MAIN = 0030H CODE 标号NEXT = 0073H CODE 标号NEXT1 = 0084H CODE 标号NEXT2 = 0167H CODE 标号OTHER = 009FH CODE 标号OUT_DIS_AD = 0211H CODE 标号OUT_INT0 = 0150H CODE 标号OUT_KS1 = 0104H CODE 标号OUT_KS2 = 0116H CODE 标号OUT_KS3 = 011DH CODE 标号OUT_TIME0 = 0140H CODE 标号OV = 00D2H CONST 常量P = 00D0H CONST 常量P0 = 0080H CONST 常量P1 = 0090H CONST 常量P2 = 00A0H CONST 常量P3 = 00B0H CONST 常量PCON = 0087H CONST 常量PS = 00BCH CONST 常量PSW = 00D0H CONST 常量PT0 = 00B9H CONST 常量PT1 = 00BBH CONST 常量PX0 = 00B8H CONST 常量PX1 = 00BAH CONST 常量RB8 = 009AH CONST 常量REN = 009CH CONST 常量RI = 0098H CONST 常量RS0 = 00D3H CONST 常量RS1 = 00D4H CONST 常量SBUF = 0099H CONST 常量SCON = 0098H CONST 常量SEC_FUN = 00B7H CODE 标号SHE = 01C7H CODE 标号SM0 = 009FH CONST 常量SM1 = 009EH CONST 常量SM2 = 009DH CONST 常量SP = 0081H CONST 常量TAB_DOT = 024CH CODE 标号TAB_FUN = 0252H CODE 标号TAB_ID = 0232H CODE 标号TAB_NUM = 0241H CODE 标号TB8 = 009BH CONST 常量TCON = 0088H CONST 常量TF0 = 008DH CONST 常量TF1 = 008FH CONST 常量TH0 = 008CH CONST 常量TH1 = 008DH CONST 常量TI = 0099H CONST 常量TIME0 = 0132H CODE 标号TIME0_DOWN = 00D5H CONST 常量TL0 = 008AH CONST 常量TL1 = 008BH CONST 常量TMOD = 0089H CONST 常量TR0 = 008CH CONST 常量TR1 = 008EH CONST 常量UP = 0217H CODE 标号公有符号: 125 私有符号: 0。
单片机代码课程设计
单片机代码课程设计一、课程目标知识目标:1. 让学生理解单片机的基本原理和编程方法,掌握单片机代码的编写规则。
2. 使学生掌握单片机常见模块的使用,如I/O口、定时器、中断等,并能运用到实际项目中。
3. 帮助学生了解单片机在实际工程中的应用,培养对工程问题的分析和解决能力。
技能目标:1. 培养学生熟练使用编程软件,编写和调试单片机代码的能力。
2. 培养学生动手实践能力,能够独立完成单片机项目的设计与实现。
3. 培养学生团队协作能力,能够与他人共同完成复杂单片机系统的设计与调试。
情感态度价值观目标:1. 培养学生对单片机编程的兴趣,激发学习热情,树立自信心。
2. 培养学生严谨、细致的学习态度,养成良好的编程习惯。
3. 培养学生面对挑战时的积极心态,敢于尝试,勇于创新。
本课程针对高年级学生,结合单片机相关知识,注重理论与实践相结合。
通过本课程的学习,使学生能够具备一定的单片机编程能力,为后续电子设计竞赛和实际工程应用打下坚实基础。
课程目标具体、可衡量,便于教师进行教学设计和评估,同时有利于学生明确学习方向和成果。
二、教学内容1. 单片机原理概述:介绍单片机的基本组成、工作原理及性能特点,使学生建立单片机的基本概念。
教材章节:第一章 单片机概述2. 单片机编程语言:讲解单片机编程的基础知识,包括汇编语言和C语言在单片机编程中的应用。
教材章节:第二章 单片机编程语言3. 单片机I/O口编程:学习单片机I/O口的控制方法,实现对外设的控制。
教材章节:第三章 I/O口编程4. 定时器与中断:学习定时器的使用方法,掌握中断编程技术。
教材章节:第四章 定时器与中断5. 单片机通信接口:介绍单片机与其他设备通信的接口技术,如串行通信、I2C通信等。
教材章节:第五章 单片机通信接口6. 单片机项目实践:结合实际案例,指导学生进行单片机项目设计与实现。
教材章节:第六章 单片机项目实践教学内容按照教学大纲进行安排,共计16课时。
基于51单片机的温湿度测量仪课程设计代码
HXD=0;
Delay(500);
HXD=1;
Delay(500);
HXD=0;
Delay(500);
HXD=1;
} // 只有温度超标时,频率3报警
} // 蜂鸣器报警
//uchar Seg1_Tab[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
uchar Dig_Tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar temp_H,temp_L,humi_H,humi_L;
#include<regx51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define LCD_DB P2
uchar Seg_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x39,0x76,0x77,0x63};
}
}
void RH(void) //DHT11的数据读取
{
//主机拉低18ms
DHT11=0;
Delay(180);
DHT11=1;
//总线由上拉电阻拉高 主机延时20us
P0=Seg_Tab[d3];Segce=1;Segce=0;
P0=Dig_Tab[3];Digce=1;Digce=0;for(j=0;j<500;j++);
P0=Seg_Tab[13];Segce=1;Segce=0;
单片机课程设计报告原理及代码
North China University of Science and Technology 课程设计报告*名:***学号: ************班级: 15通信2班指导教师:***目录一、设计题目和要求 (1)二、设计原理与实现功能 (1)三、元器件介绍 (2)四、电路设计 (4)五、软件设计 (5)六、设计总结 (24)一、设计题目和要求题目:数字钟要求:1.准确计时,以数字形式显示时、分、秒的时间;2.小时的计时要求为“24翻1”,分和秒的计时为60进制。
二、设计原理与实现功能设计原理:本数字时钟采用STC89C52RC单片机芯片,晶振频率为11.0592MHZ,采用C语言编程,显示模块采用通用型1602液晶,发声模块采用无源蜂鸣器。
通过给时钟通电实现时钟的正常工作。
实现功能:本数字时钟可实现闹钟定时、显示时间功能。
可利用四个按键调节时钟。
按键1功能为调整时钟时间,按键2功能为设置闹钟,按键3和按键4分别为实现调试中“+”、“-”的功能。
当时钟时间到达定时时间,蜂鸣器响起(20s后停止),实现闹钟功能。
且具有整点报时的功能。
三、元器件介绍STC89C52是一种低功耗、高性能CMOS8位微控制器。
STC89C52单片机简介STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
具有以下标准功能:8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口。
另外STC89X52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
单片机课程设计
单片机课程设计《机器人入门》2021年亚太大学生机器人大赛——胜利鼓乐课程名称:单片机课程设计系部:自控系则专业班级:计算机控制20931学生姓名:陆小祥一、总体方案:1.工作原理:本设计使用stc89c52rc单片机做为本系统的掌控模块。
单片机可以把由ds18b20、ds1302、at24c02中的数据利用软件去展开处置,从而把数据传输至表明模块,同时实现温度、日历和闹铃的表明。
以lcd液晶显示器为表明模块,把单片机响起的数据表明出,并且表明多样化。
在表明电路中,主要依靠按键去同时实现各种表明建议的挑选与转换。
2.总体设计:设计总体框架图例如图二、系统硬件设计(单元电路设计及分析):1.stc89c52rc单片机最轻系统:最小系统包括晶体振荡电路、复位开关和电源部分。
图2为stc89c52rc单片机的最小系统。
图2最轻系统电路图2.温度测量模块:温度测量传感器使用dallas公司ds18b20的单总线数字化温度传感器,测温范围为-55℃~125℃,可编程为9十一位~12十一位a/d切换精度,测温分辨率达至0.0625℃,使用真菌电源工作方式,cpu只需一根口线便能够与ds18b20通信,挤占cpu口线太少,可以节省大量引线和逻辑电路。
USB电路例如图3右图。
图3ds18b20测量电路3.时钟模块:时钟模块采用ds1302芯片,ds1302是dallas公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31字节静态ram通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过am/pm指示决定采用24或12小时格式ds1302与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线:rst复位、i/o数据线、sclk串行时钟。
时钟/ram的读/写数据以一个字节或多达31个字节的字符组方式通信。
ds1302工作时功耗很低,保持数据和时钟信息时功率小于1mw,其接线电路如图4所示:图4时钟电路4.存储器模块:图5at24c02存储器电路5.lcd液晶显示模块:lcd液晶显示模块使用lcd1602型号,具备很低的功耗,正常工作时电流仅2.0ma/5.0v。
单片机编程全集(含源代码)
前言 (2)基础知识:单片机编程基础 (2)第一节:单数码管按键显示 (4)第二节:双数码管可调秒表 (6)第三节:十字路口交通灯 (7)第四节:数码管驱动 (9)第五节:键盘驱动 (10)第六节:低频频率计 (15)第七节:电子表 (18)第八节:串行口应用 (19)前言本文是本人上课的一个补充,完全自写,难免有错,请读者给予指正,可发邮件到ZYZ@,或郑郁正@中国;以便相互学习。
结合课堂的内容,课堂上的部分口述内容,没有写下来;有些具体内容与课堂不相同,但方法是相通的。
针对当前的学生情况,尽可能考虑到学生水平的两端,希望通过本文都学会单片机应用。
如果有不懂的内容,不管是不是本课的内容,都可以提出来,这些知识往往代表一大部分同学的情况,但本人通常认为大家对这些知识已精通,而在本文中没有给予描述,由此影响大家的学习。
对于这些提出问题的读者,本人在此深表谢意。
想深入详细学习单片机的同学,可以参考其它有关单片机的书籍和资料,尤其是外文资料。
如果有什么问题,我们可以相互探讨和研究,共同学习。
本文根据教学的情况,随时进行修改和完善,所以欢迎同学随时注意本文档在课件中的更新情况。
基础知识:单片机编程基础单片机的外部结构:1、DIP40双列直插;2、P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平)3、电源VCC(PIN40)和地线GND(PIN20);4、高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位)5、内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍)6、程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序)7、P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务)1、四个8位通用I/O端口,对应引脚P0、P1、P2和P3;2、两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1)3、一个串行通信接口;(SCON,SBUF)4、一个中断控制器;(IE,IP)针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。
单片机课程设计实验报告+基于单片机的数字时钟+含完整实验代码
单片机课程设计报告基于单片机的数字时钟姓名:班级:学号:一、前言利用实验板上的4个LED数码管,设计带有闹铃、秒表功能的数字时钟。
功能要求:a)计时并显示(LED)。
由于实验板上只有4位数码管,可设计成显示“时分”和显示“分秒”并可切换。
b)时间调整功能。
利用4个独立按钮,实现时钟调整功能。
这4个按钮的功能为工作模式切换按钮(MODE),数字加(INC),数字减(DEC)和数字移位(SHITF)。
c)定闹功能。
利用4个独立按钮设定闹钟时间,时间到以蜂鸣器响、继电器动作作为闹铃。
d)秒表功能。
最小时间单位0.01秒。
二、硬件原理分析1.电源部分电源部份采用两种输入接口(如上图)。
a)外电源供电,采用2.1电源座,可接入电源DC5V,经单向保护D1接入开关S1。
b)USB供电,USB供电口输入电源也经D1单向保护,送到开关S1。
注:两路电源输入是并连的,因此只选择一路就可以了,以免出问题。
S1为板子工作电源开关,按下后接通电源,提供VCC给板子各功能电路。
电路采用两个滤波电容,给板子一个更加稳定的工作电源。
LED为电源的指示灯,通电后LED灯亮。
2.蜂鸣器蜂鸣器分为有源和无源两种,有源即两引脚有一个直流电源就可以长鸣,无源则需要一个1K左右的脉冲才可以蜂鸣,因此对于按键的提示音及报警蜂鸣使用有源来得方便。
有源也可以当无源使用,而无源则不能当有源使用,当然用有源蜂鸣器作音乐发声会失真厉害。
如上图:单片机P15输出高低电平经R21连接三极管B极,控制三极管的导通与截止,从而控制蜂鸣器的工作。
低电平时三极管导通,蜂鸣器得电蜂鸣,高电平时三极管截止,蜂鸣器失电关闭蜂鸣。
电路使用一个四位共阳型数码管,四个公共阳级由三极管放大电流来驱动,三极管由P10-P13控制开与关。
数码管的阴级由P0口经过电阻限流连接。
例如,要十位的数码管工作,P12输出0,使三极管Q12导通,8脚得电,当P0口相应位有输出0时,点亮相应的LED灯组合各种字符数字。
单片机参数设置程序
sbit dp1=P2^6;
sbit dp2=P2^5;
sbit dp3=P2^4;
sbit k1=P2^3;
sbit k2=P2^2;
sbit k3=P2^1;
sbit k4=P2^0;
sbit spi_d =P1^1;//93C46控制端口
sbit spi_cs =P1^2;
else if(k<19)
{k++;csz+=10;}
else if(k<29)
{k++,csz+=100;}
else if(k<39)
{k++;csz+=1000;}
if(csz>max)csz=max;
}
}
if(k3==0)
{if(ms==0)
{csh--; //参数号快速减
if(csh<0)csh=0;}
1905,2005,2105,2205,2105,2305,2405,2505,2605,2705,2805,2905,3005,3105,3205,3305,3405,3505,3605,3705,3805,
3905,4005,4105,4205,4305,4405,4505,4605,4705,4605,4705,4805,4905,5005,5105,5205,5305,5405,5505,5605,5705,
com_93c(ERAL);
com_93c(EWDS);
}
void write_93c(unsigned char adr,dta)
{unsigned charj;
unsigned intdt,k;
单片机C语言课程设计
单片机C语言课程设计《单片机C语言程序设计》课程设计一、课程设计时间2012-2013学年第二学期第1-2周下午二、课程设计要求1、根据教师布置的题目进行选题;2、根据实验箱提供的功能,自行设计硬件电路图,并用Protel画出硬件原理图;3、采用单片机C语言或汇编语言进行编程,建议采用单片机C语言进行编程;4、编写完整的软件程序;5、调试、修改、完善;6、写出课程设计报告。
三、参考题目1、全自动洗衣机控制器基本要求:采用步进电机模拟洗衣机电机,实现上水、浸泡、洗涤、漂洗、甩干等过程。
洗涤分弱洗、轻洗、强洗;可设定3级水位设定,每级水位均设定水位下限;可选择漂洗次数(3~5次)。
使用键盘进行流程及参数设定及自动存储流程,设定暂停键,可暂时停止洗衣机的工作,恢复后按原设定程序继续进行,同时设定停止键,可终止洗衣机的工作,并在LED或LCD上显示当前流程。
(1)上水时,通过可调电位器及A/D TLC549模拟水位检测传感器,若水位低于设定水位下限,则通过蜂鸣器报警,手动调节可调电位器,直至水位超过水位下限,切断进水开关(用开关量输出电路模拟),进入下一流程;(2)浸泡不进行任何操作,延时等待30s;(3)洗涤时,先强洗、后轻洗再弱洗。
可直接选择轻洗或弱洗。
强洗、轻洗与弱洗的步进电机转速不同,依次递减,但均需正反转(转速自定、时间自定、正反转的时间自定);(4)漂洗进行正反转,转速介于强洗与弱洗之间,或与强洗同。
(5)甩干高速正向转动,时间自定;(6)洗涤、漂洗间均需脱水、上水,但脱水转速低于甩干。
(7)通过LCD显示当前操作流程及剩余洗涤时时间附加要求:各级水位的设定值保存在X5045中。
2、出租车计价器系统设计主要方法和要求:原理是价格=速度?时间?单价(1)采用直流电机测速单元模拟出租车速度;(2)利用单片机的定时器/计数器定时和计数;(3)用LCD实时显示当前总价、当前时间及里程数,其中总价显示单位为元,显示到小数点后2位,里程数单位为公里,显示到小数后2位;(4)累计里程数及累计行车时间转换以8:00作为转换开始时间;(5)起步公里数为3公里,起步价位5元;当出租车速度低于某一设定值时,自动进行计数,当计时每达到5分钟时,价格按照另一设定值进行计价。
51单片机实例(含详细代码说明)
1.闪烁灯1.实验任务如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。
2.电路原理图图4.1.13.系统板上硬件连线把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。
4.程序设计内容(1).延时程序的设计方法作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理:如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒MOV R6,#20 2个 2D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498DJNZ R6,D1 2个2×20=4010002因此,上面的延时程序时间为10.002ms。
由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。
如本实验要求0.2秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下:DELAY: MOV R5,#20D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RET(2).输出控制如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。
5.程序框图如图4.1.2所示图4.1.26.汇编源程序ORG 0START: CLR P1.0LCALL DELAYSETB P1.0LCALL DELAYLJMP STARTDELAY: MOV R5,#20 ;延时子程序,延时0.2秒D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND7. C语言源程序#include <AT89X51.H>sbit L1=P1^0;void delay02s(void) //延时0.2秒子程序{unsigned char i,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--)for(k=248;k>0;k--);}void main(void) {while(1){L1=0;delay02s();L1=1;delay02s();}2.模拟开关灯1.实验任务如图4.2.1所示,监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭。
MSP430单片机课程设计-简单计算器设计
MSP430 单片机课程设计
unsigned char disbuff[8] = {20,20,0,0,0,0,0,0};//初始数码管 unsigned char getkey(void); unsigned int qiushu(); void clear(void); void zhuanhuan(); void delay(unsigned int j) { for(uint i=0;i<j;i++); } unsigned int qiushu() //转化成相应的十进制整数 {unsigned int y; y=disbuff[2]*100000+disbuff[3]*10000+disbuff[4]*1000+disbuff[5]*100 +disbuff[6]*10+disbuff[7]; return y; } void clear(void) {unsigned int a; for(a=7;a>1;a--) disbuff[a]=0; } //清除屏幕
实验二:猜数字游戏设计
一、目的
利用单片机芯片 MSP430x14x、四位八段共阴数码管,设计一个猜数字游戏, 并将游戏结果显示在数码管上。
二、功能
要求该设计能实现如下的功能:游戏开始后,先在程序内随即设定四个 0-9 之间的不同数,作为游戏数答案。然后用户给出 4 个数,该软件会将您提交的数 与它自动产生的数进行比较,结果在八段数码管上显示成"kAsB"。k 代表位置正 确数字也正确的字数,s 代表数字正确但位置不正确的字数。当 k=4 且 s=0 时, 则比较正确显示“GOOD” ,进行下一次比较。
4
MSP430 单片机课程设计
江苏大学单片机课程设计
江苏大学单片机课程设计单片机课程设计程序ORG 0000H RESET:AJMP MAINORG 000BHAJMP IT0PORG 0100HMAIN: MOV SP,#40HACALL PT0M0MOV DPTR,#0FFE0HMOV A,#00HMOVX @DPTR,AHERE: ACALL DIRACALL SAOXIANAJMP HERE中断程序IT0P: CLR EA ;关中断PUSH ACCPUSH BPUSH PSWMOV B,R1PUSH BMOV B,R5PUSH BMOV B,R7PUSH BMOV B,DPLPUSH BMOV B,DPHPUSH B ;现场保护LCALL DIRMOV R7,75H ;取计数值MOV TL0,#76HMOV TH0,#0ECH ;定时器T0初始MOV DPTR,#0FFE0HMOVX A,@DPTR ;取AD转换值CJNE A,77H,NEXT1AJMP NEXT3NEXT1:JC NEXT2INC 77HAJMP NEXT3NEXT2:DEC 77H ;转换值滤波NEXT3:MOV A,#00HMOV DPTR,#0FFE0HMOVX @DPTR,A ;启动AD转换MOV A,76HJNZ TP1SETB P1.0MOV 76H,AAJMP TP2TP1: DEC ACLR P1.0MOV 76H,A ;周波控制TP2: DJNZ R7,NEXT6 ;判断调整周期是否到?MOV R7,#50MOV A,7EHMOV B,#0AHMUL ABADD A,7DHMOV 78H,A ;改变预设值,以16进制储存SUBB A,#80H ;AD转换值的最大值(最低温度)JNC TP3MOV A,77HSUBB A,#54HJNC TP4MOV A,#00H ;高于最高温度,温度编码置最小值0 AJMP TP4TP3: MOV A,#2CH ;低于最低温度,温度编码置最大值TP4: MOV B,#2MUL ABMOV R5,A ;取得温度十位,个位的编码值MOV DPTR,#TABTMOVC A,@A+DPTRMOV 74H,AMOV R1,AANL A,#0FHMOV 7AH,A ;当前值个位MOV A,R1SWAP AANL A,#0FHMOV 7BH,A ;当前值十位MOV A,R5ADD A,#1 ;取得温度小数位的编码置MOVC A,@A+DPTRMOV 79H,A ;当前值小数位LCALL DIRMOV A,74HANL A,#0F0HSWAP AMUL ABMOV B,AMOV A,74HANL A,#0FHADD A,BMOV B,A ;10进制温度值转化为16进制MOV A,78HSUBB A,BJC NEXT5SUBB A,#3JNC NEXT4MOV 76H,#10AJMP NEXT6NEXT4:MOV 76H,#50AJMP NEXT6NEXT5:MOV 76H,#00H ;控温算法NEXT6:MOV 75H,R7 ;更新计数值LCALL DIRPOP BMOV DPH,BPOP BMOV DPL,BPOP BMOV R7,BPOP BMOV R5,BPOP BMOV R1,BPOP PSWPOP BPOP ACCSETB EARETITABT: DB 50H,0H,49H,5H,49H,0H,48H,5H,48H,0H,47H,5H DB 47H,0H,46H,5H,46H,0H,45H,5H,45H,0H,44H,5HDB 44H,0H,43H,5H,43H,0H,42H,5H,42H,0H,41H,5HDB 41H,5H,41H,0H,40H,5H,40H,0H,39H,5H,39H,5HDB 39H,0H,38H,5H,38H,0H,37H,5H,37H,5H,37H,0HDB 36H,5H,36H,5H,36H,0H,35H,5H,35H,0H,34H,5HDB 34H,0H,33H,5H,33H,5H,33H,0H,32H,5H,32H,0HDB 31H,5H,31H,0H,30H,5H,30H,0H中断初始PT0M0:MOV TMOD,#01HMOV TL0,#76HMOV TH0,#0ECH ;计数器T0初始MOV 7EH,#00HMOV 7DH,#08HMOV 7CH,#00HMOV 7BH,#09HMOV 7AH,#00HMOV 79H,#00HMOV 78H,#00HMOV 77H,#80HMOV 76H,#00HMOV 75H,#50 ;数据缓冲区初始ACALL DIRSETB TR0SETB ET0SETB EARET键盘输入与显示SAOXIAN: LCALL DIRSTART: LCALL SAOXIAN1MOV 7EH,A ;送值给7EHLCALL DIRLCALL SAOXIAN1MOV 7DH,A ;送值给7DHLCALL DIRLCALL SAOXIAN1MOV 7CH,A ;送值给7CHLCALL DIRAJMP STARTSAOXIAN1:LCALL DIRLCALL KEY ;键盘扫描JNZ KEY1LCALL DIRAJMP SAOXIAN1KEY1: LCALL DELAY1 ;延迟消抖LCALL KEYJNZ KEY2LCALL DIRAJMP SAOXIAN1KEY2: MOV R7,#08H ;列扫描取键值的初始MOV R6,#01H KEY22: MOV A,R6CPL AMOV DPTR,#0FFDDHMOVX @DPTR,AMOV DPTR,#0FFDEHMOVX A,@DPTRCJNE A,#0FH,KEY3AJMP KEY4KEY3: CPL A ;计算键的位置码JNB ACC.0,PP1MOV 77H,#00HAJMP PPPP1: JNB ACC.1,SAOXIAN1 MOV 77H,#01HPP: MOV B,R6JNB B.0,PPP1MOV 78H,#00HAJMP PPPPPP1: JNB B.1,PPP2MOV 78H,#01HAJMP PPPPPP2: JNB B.2,PPP3MOV 78H,#02HAJMP PPPPPP3: JNB B.3,PPP4MOV 78H,#03HJB ACC.1,SAOXIAN1AJMP PPPPPP4: JNB B.4,PPP5MOV 78H,#04HAJMP PPPPPP5: JB ACC.1,SAOXIAN1 JNB B.5,SAOXIAN1MOV 78H,#05HPPP: MOV A,77HMUL ABADD A,78HMOV DPTR,#KEYTAB ;取得键值MOVC A,@A+DPTRMOV B,ABB: LCALL DIR ;判断按键是否松开LCALL KEYJNZ BBMOV A,B ;键值送回AAJMP KEY5KEY4: MOV A,R6RL AMOV R6,ADJNZ R7,KEY22KEY5: RETKEYTAB: DB 07H,04H,08H,05H,09H,06H,0AH,0BHDB 01H,00H,02H,0FH,03H,0EH,0CH,0DH数码管显示DIR: MOV R0,#79HMOV R3,#01H ;数码管显示数据缓冲区初值和显示方式DI0: MOV DPTR,#0FFDDHMOV A,R3MOVX @DPTR,A ;送字位MOV A,@R0MOV DPTR,#TBTMOVC A,@A+DPTRCPL A ;取得数码管显示码值DIAN : CJNE R0,#7AH,DIAN1ADD A,#80HDIAN1: CJNE R0,#7DH,DIAN2 ;小数点的显示ADD A,#80HDIAN2: MOV DPTR,#0FFDCHMOVX @DPTR,A ;码值送数码管ACALL DELAY1INC R0MOV A,R3JB ACC.6,DI1RL AMOV R3,AAJMP DI0 ;控制6个数码的依次显示DI1: RETTBT: DB 3FH,06H,5BH,4FH,66H,6DHDB 7DH,07H,7FH,6FH,77H,7CHDB 39H,5EH,79H,71H,73H,3EHDB 31H,6EH,1CH,23H,40H,03HDB 18H,00H,00H,00H延迟程序DELAY1: MOV R5,#02HDE1: MOV R4,#0FFHDE2: DJNZ R4,DE2DJNZ R5,DE1RET键盘扫描KEY: MOV A,#00HMOV DPTR,#0FFDDHMOVX @DPTR,AMOV DPTR,#0FFDEHMOVX A,@DPTRCPL AANL A,#0FH RET。
单片机课设代码
AUXR DATA 008EHBRT DATA 009CHSCK BIT P0.4 ;移位寄存器时钟,上升沿触发RCK BIT P0.5 ;存储器时钟,上升沿触发RST BIT P0.6 ;置位允许操作DAT BIT P0.7ORG 0000H ;程序开始AJMP MAINORG 0023H ;串行口中断入口LJMP INTRORG 0040H ;主程序入口MAIN:ACALL SKEY ;调用键盘扫描子程序CJNE R5,#0FFH,OPT0AJMP SHOW111 ;键盘没有接收到数据,默认显示状态111 OPT0: ;有按键操作时,CJNE R5,#0,OPT1MOV A,#0 ;按键为0,AJMP CHUANKOU ;跳到串口通信OPT1: ;有按键操作,且不为0时CJNE R5,#1,MAINMOV A,#1AJMP SHOW111 ;显示默认状态111SJMP MAINCHUANKOU:ACALL UARTINIT ;通用异步收发器初始化MOV R7,#2 ;P0初始值CMP1: ;PC发送0CJNE R7,#30H,CMP2AJMP SHOW1234 ;显示1234CMP2: ;PC发送1CJNE R7,#31H,CMP3AJMP SHOWIOY ;显示104CMP3: ;PC发送2CJNE R7,#32H,NOAJMP MAIN ;跳回主程序,显示默认状态111NO: ;PC发送0,1,2以外的数据时MOV P0,#0FFH ;关闭数码管,等待PC发送新的数据AJMP CMP1 ;跳回CMP1,检测PC发送的数据UARTINIT: ;9600bps@12.000MHzANL PCON,#7FH ;波特率不倍速MOV SCON,#50H ;8位数据,可变波特率ORL AUXR,#04H ;独立波特率发送器时钟为Fosc,即1TMOV BRT,#0D9H ;设定独立波特率发生器重装值ORL AUXR,#01H ;串口1选择独立波特率发生器为波特率发生器 ORL AUXR,#10H ;启动独立波特率发生器MOV IE,#90H ;开启串口中断RETINTR:NOP ;中断服务子程序CLR RI ;清接收标志MOV R7,SBUF ;接收数据RETI ;中断返回SHOW1234:PUSH ACC ;ACC进栈,保护现场MOV A,#60HACALL TOHC595 ;数码管显示1MOV P0,#01H ;选择第一个数码管显示ACALL SDELAY ;延时MOV A,#0DAHACALL TOHC595MOV P0,#02HACALL SDELAYMOV A,#0F2HACALL TOHC595MOV P0,#04HACALL SDELAYMOV A,#66HACALL TOHC595MOV P0,#08HACALL SDELAYPOP ACC ;ACC出栈,恢复现场AJMP CMP1 ;跳回CMP1,直到新的指令才改变显示状态SHOWIOY:PUSH ACCMOV A,#60HACALL TOHC595MOV P0,#02HACALL SDELAYMOV A,#0FCHACALL TOHC595MOV P0,#04HACALL SDELAYMOV A,#66HACALL TOHC595MOV P0,#08HACALL SDELAYPOP ACCAJMP CMP2SHOW111:PUSH ACCMOV A,#60HACALL TOHC595MOV P0,#02HACALL SDELAYMOV A,#60HACALL TOHC595MOV P0,#04HACALL SDELAYMOV A,#60HACALL TOHC595MOV P0,#08HACALL SDELAYPOP ACCAJMP MAINTOHC595:MOV R4,#8LOOP:RRC A MOV DAT,C SETB SCKCLR SCKDJNZ R4,LOOPSETB RCKCLR RCKRET ;中断返回DELAY:PUSH 30HPUSH 31HMOV 30H,#94MOV 31H,#92NEXT:DJNZ 31H,NEXTDJNZ 30H,NEXTPOP 31HPOP 30HRETSDELAY: ;@12.000MHzPUSH 30HPUSH 31HMOV 30H,#19MOV 31H,#167SNEXT:DJNZ 31H,SNEXTDJNZ 30H,SNEXTPOP 31HPOP 30HRETSKEY:MOV R5,#0FFHMOV P2,#0FHCMP4:MOV R7,P2 ;读入行值CJNE R7,#0FH,CMP5AJMP EXITKEYCMP5:ACALL DELAYMOV R6,P2CJNE R6,#0FH,GETNUMAJMP EXITKEYGETNUM:MOV R7,P2MOV P2,#0F0H;MOV A,P2ORL A,R7 ;获取行列值MOV R7,ANUM0:CJNE R7,#077H,NUM1MOV R5,#0 AJMP ISUP NUM1:CJNE R7,#7BH,NUM2MOV R5,#1AJMP ISUPNUM2:CJNE R7,#7DH,NUM3MOV R5,#2AJMP ISUPNUM3:CJNE R7,#7EH,NUM4MOV R5,#3AJMP ISUPNUM4:CJNE R7,#0B7H,NUM5MOV R5,#4AJMP ISUPNUM5:CJNE R7,#0BBH,NUM6MOV R5,#5AJMP ISUPNUM6:CJNE R7,#0BDH,NUM7MOV R5,#6AJMP ISUPNUM7:CJNE R7,#0BEH,NUM8MOV R5,#7AJMP ISUPNUM8:CJNE R7,#0D7H,NUM9MOV R5,#8AJMP ISUPNUM9:CJNE R7,#0DBH,NUMAMOV R5,#9AJMP ISUPNUMA:CJNE R7,#0DDH,NUMBMOV R5,#10AJMP ISUPNUMB:CJNE R7,#0DEH,NUMCMOV R5,#11AJMP ISUPNUMC:CJNE R7,#0E7H,NUMDMOV R5,#12AJMP ISUPNUMD:CJNE R7,#0EBH,NUMEMOV R5,#13AJMP ISUPNUME:CJNE R7,#0EDH,NUMFMOV R5,#14AJMP ISUPNUMF:CJNE R7,#0EEH,ISUPMOV R5,#15ISUP: ;长按某个键时将稳定显示 MOV R6,P2 ;读入列值CJNE R6,#0F0H,ISUPEXITKEY: ;当无键按下后退出RETEND。
单片机课程设计代码和参数
二、课程要求:题目1 智能电子钟(LCD显示)1. 设计要求以AT89C51单片机为核心,制作一个LCD显示的智能电子钟:(1) 计时:秒、分、时、天、周、月、年。
(2) 闰年自动判别。
(3) 五路定时输出,可任意关断(最大可到16路)。
(4) 时间、月、日交替显示。
(5) 自定任意时刻自动开/关屏。
(6) 计时精度:误差≤1秒/月(具有微调设置)。
(7) 键盘采用动态扫描方式查询。
所有的查询、设置功能均由功能键K1、K2完成。
2. 工作原理本设计采用市场上流行的时钟芯片DS1302进行制作。
DS1302是DALLAS公司推出的涓流充电时钟芯片,内含一个实时时钟/日历和31字节静态RAM,可以通过串行接口与计算机进行通信,使得管脚数量减少。
实时时钟/日历电路能够计算2100年之前的秒、分、时、日、星期、月、年的,具有闰年调整的能力。
DS1302时钟芯片的主要功能特性:(1) 能计算2100年之前的年、月、日、星期、时、分、秒的信息;每月的天数和闰年的天数可自动调整;时钟可设置为24或12小时格式。
(2) 31B的8位暂存数据存储RAM。
(3) 串行I/O口方式使得引脚数量最少。
(4) DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需3根线。
(5) 宽范围工作电压2.0-5.5V。
(6) 工作电流为2.0A时,小于300nA。
(7) 功耗很低,保持数据和时钟信息时功率小于1mW。
4. Proteus仿真打开元器件单片机属性窗口,在“Program File”栏中添加上面编译好的目标代码文件“keil-1.hex”;在“Clock Frequency”栏中输入晶振频率为11.0592MHz。
仿真如下页图所示,其中,浮动窗口中显示的为DS1302当前时钟状态:题目2 电子时钟(LCD显示)1. 设计要求以AT89C51单片机为核心的时钟,在LCD显示器上显示当前的时间:使用字符型LCD显示器显示当前时间。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二、课程要求:题目1 智能电子钟(LCD显示)1. 设计要求以AT89C51单片机为核心,制作一个LCD显示的智能电子钟:(1) 计时:秒、分、时、天、周、月、年。
(2) 闰年自动判别。
(3) 五路定时输出,可任意关断(最大可到16路)。
(4) 时间、月、日交替显示。
(5) 自定任意时刻自动开/关屏。
(6) 计时精度:误差≤1秒/月(具有微调设置)。
(7) 键盘采用动态扫描方式查询。
所有的查询、设置功能均由功能键K1、K2完成。
2. 工作原理本设计采用市场上流行的时钟芯片DS1302进行制作。
DS1302是DALLAS公司推出的涓流充电时钟芯片,内含一个实时时钟/日历和31字节静态RAM,可以通过串行接口与计算机进行通信,使得管脚数量减少。
实时时钟/日历电路能够计算2100年之前的秒、分、时、日、星期、月、年的,具有闰年调整的能力。
DS1302时钟芯片的主要功能特性:(1) 能计算2100年之前的年、月、日、星期、时、分、秒的信息;每月的天数和闰年的天数可自动调整;时钟可设置为24或12小时格式。
(2) 31B的8位暂存数据存储RAM。
(3) 串行I/O口方式使得引脚数量最少。
(4) DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需3根线。
(5) 宽范围工作电压2.0-5.5V。
(6) 工作电流为2.0A时,小于300nA。
(7) 功耗很低,保持数据和时钟信息时功率小于1mW。
4. Proteus仿真打开元器件单片机属性窗口,在“Program File”栏中添加上面编译好的目标代码文件“keil-1.hex”;在“Clock Frequency”栏中输入晶振频率为11.0592MHz。
仿真如下页图所示,其中,浮动窗口中显示的为DS1302当前时钟状态:题目2 电子时钟(LCD显示)1. 设计要求以AT89C51单片机为核心的时钟,在LCD显示器上显示当前的时间:使用字符型LCD显示器显示当前时间。
显示格式为“时时:分分:秒秒”。
用4个功能键操作来设置当前时间。
功能键K1~K4功能如下。
K1—进入设置现在的时间。
K2—设置小时。
K3—设置分钟。
K4—确认完成设置。
程序执行后工作指示灯LED闪动,表示程序开始执行,LCD显示“00:00:00”,然后开始计时。
2. 实验原理题目难点在于键盘的指令输入,由于每个按键都具有相应的一种或多种功能,程序中需要大量使用do{}while或while{}循环结构,以检测是否有按键按下。
按键检测函数的详解如下(略)4. Proteus仿真加载目标代码文件打开元器件单片机属性窗口,在“Program File”栏中添加上面编译好的目标代码文件“keil-2.hex”;在“Clock Frequency”栏中输入晶振频率为11.0592MHz。
启动仿真,按下按键1后,可发现LED停止闪烁,即时钟停止走时,时钟停在当前时刻,按下按键2和按键3后,可改变时间,按下按键4后,时钟复位到修改后的时间,时钟重新开始运转,如下页图所示。
题目3 秒表1. 设计要求用AT89C51设计一个2位的LED数码显示作为“秒表”:显示时间为00—99秒,每秒自动加1,另设计一个“开始”键和一个“复位”键。
2. 实验原理题目难点在于通过对键盘的扫描对时钟的走时/停止进行控制,项目采用定时器T0作为计时器,每10ms发生一次中断,每100次中断加1s。
在此期间,如“开始”按键按下,程序方将TR0置为1,从而开启中断,时钟开始走时;如“复位”按键按下,程序将TR0置为0,同时将存储时间的变量清零,从而中断停止,并实现复位。
本题目采用专用数码管显示控制芯片MAX7219。
MAX7219是美国MAXIM公司生产的串行输入/输出共阴极显示驱动器,该芯片最多可驱动8位7段数字LED显示器或个LED和条形图显示器。
其引脚图及引脚功能参见有关参考资料。
题目4 定时闹钟1. 设计要求使用AT89C51单片机结合字符型LCD显示器设计一个简易的定时闹钟LCD时钟,若LCD 选择有背光显示的模块,在夜晚或黑暗的场合中也可使用。
定时闹钟的基本功能如下:显示格式为“时时:分分”。
由LED闪动来做秒计数表示。
一旦时间到则发出声响,同时继电器启动,可以扩充控制家电开启和关闭。
程序执行后工作指示灯LED闪动,表示程序开始执行,LCD显示“00:00”,按下操作键K1~K4动作如下:(1) K1—设置现在的时间。
(2) K2—显示闹钟设置的时间。
(3) K3—设置闹铃的时间。
(4) K4—闹铃ON/OFF的状态设置,设置为ON时连续三次发出“哗”的一声,设置为OFF发出“哗”的一声。
设置当前时间或闹铃时间如下。
(1) K1—时调整。
(2) K2—分调整。
(3) K3—设置完成。
(4) K4—闹铃时间到时,发出一阵声响,按下本键可以停止声响。
本项目的难点在于4个按键每个都具有两个功能,以最终实现菜单化的输入功能。
采用通过逐层嵌套的循环扫描,实现嵌套式的键盘输入。
以对小时的设置的流程为例,其流程如下页图。
3. Proteus仿真加载目标代码文件打开元器件单片机属性窗口,在“Program File”栏中添加上面编译好的目标代码文件“keil-3.hex”;在“Clock Frequency”栏中输入晶振频率为12MHz。
启动仿真,下页图示为按下“开始”按键后的情况,在按下前,数码管无显示。
期间如果按下“复位”按键,则LED显示归零,走时停止。
题目5 音乐倒数计数器1. 设计要求利用A T89C51单片机结合字符型LCD显示器设计一个简易的倒数计数器,可用来煮方便面、煮开水或小睡片刻等。
做一小段时间倒计数,当倒计数为0时,则发出一段音乐声响,通知倒计数终了,该做应当做的事。
定时闹钟的基本功能如下。
字符型LCD(16 2)显示器。
显示格式为“TIME 分分:秒秒”。
用4个按键操作来设置当前想要倒计数的时间。
一旦按下键则开始倒计数,当计数为0时,发出一阵音乐声。
程序执行后工作指示灯LED闪动,表示程序开始执行,按下操作键K1~K4动作如下。
K1—可调整倒计数的时间1~60分钟。
K2—设置倒计数的时间为5分钟,显示“0500”。
K3—设置倒计数的时间为10分钟,显示“1000”。
K4—设置倒计数的时间为20分钟,显示“2000”。
复位后LCD的画面应能显示倒计时的分钟和秒数,此时按K1键,则在LCD上显示出设置画面。
此时,若:a. 按操作键K2—增加倒计数的时间1分钟。
b. 按操作键K3—减少倒计数的时间1分钟。
c. 按操作键K4—设置完成。
键盘实现菜单功能的方法,已在题目4详细说明,不再赘述。
本题目最大难点是实现音乐的播放。
作者利用定时计数器,通过载入不同的计数初值,产生频率不同的方波,输入到蜂鸣器(SOUNER)中,使其发出频率不同的声音。
本设计中单片机晶振为 1.0592MHz,通过计算各音阶频率,可得1、2、3、4、5、6、7共7个音应赋给定时器的初值为64580、64684、64777、64820、64898、64968、65030。
在此基础上,可将乐曲的简谱转化为单片机可以“识别”的“数组谱”,进一步加入对音长、休止符等的控制量后,可以实现音乐的播放。
3.电路设计(Proteus仿真通过)本题目制作的带有LCD显示的音乐倒数计数器电路原理图,如下页图所示。
4. Proteus仿真加载目标代码文件打开元器件单片机属性窗口,在“Program File”栏中添加上面编译好的目标代码文件“keil-5.hex”;在“Clock Frequency”栏中输入晶振频率为11.0592MHz。
启动仿真如下页图所示,当闹钟到达时,可以听见蜂鸣器演奏的乐曲。
再次提示,本题目必须选用蜂鸣器SOUNDER,否则不能发出声音。
晶液晶LCD1602(中文资料)ball2010-5-13整理2010-5-13 PM 14:19:46 ball整理共17 页第1 页/ball648500361PDF 文件使用"pdfFactory Pro" 试用版本创建目录1. ………………………………………………指令介绍2. ………………………………………………显示字符3. ………………………………………显示自定义字符4. ……………………………………使用4线数据传输1. 指令介绍LCD1602已很普遍了,具体介绍我就不多说了,市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
字符型LCD通常有14条引脚线或16条引脚线的LCD ,多出来的2条线是背光电源线VCC(15脚)和地线GND(16 脚),其控制原理与14脚的LCD完全一样,定义如下表所示:字符型LCD的引脚定义2010-5-13 PM 14:19:46 ball整理共17 页第2 页/ball648500361PDF 文件使用"pdfFactory Pro" 试用版本创建HD44780内置了DDRAM、CGROM和CGRAM。
这里的RAM与ROM不懂得话,可以看看我整理的另一篇/ball648500361/blog/item/4332fdf8bf505fd2b48f3150.htmlDDRAM就是显示数据RAM,用来寄存待显示的字符代码。
共80个字节,其地址和屏幕的对应关系如下表:也就是说想要在LCD1602屏幕的第一行第一列显示一个"A"字,就要向DDRAM的00H地址写入“A”字的代码就行了。
但具体的写入是要按LCD模块的指令格式来进行的,后面我会说到的。
那么一行可有40个地址呀?是的,在1602中我们就用前16个就行了。
第二行也一样用前16个地址。
对应如下:DDRAM地址与显示位置的对应关系我们知道文本文件中每一个字符都是用一个字节的代码记录的。
一个汉字是用两个字节的代码记录。
在PC 上我们只要打开文本文件就能在屏幕上看到对应的字符是因为在操作系统里和BIOS 里都固化有字符字模。
什么是字模?就代表了是在点阵屏幕上点亮和熄灭的信息数据。
例如“A”字的字模:01110 ○■■■○10001 ■○○○■10001 ■○○○■10001 ■○○○■11111 ■■■■■2010-5-13 PM 14:19:46 ball整理共17 页第3 页/ball648500361PDF 文件使用"pdfFactory Pro" 试用版本创建10001 ■○○○■10001 ■○○○■上图左边的数据就是字模数据,右边就是将左边数据用“○”代表0,用“■”代表1。
看出是个“A”字了吗?在文本文件中“A”字的代码是41H,PC收到41H的代码后就去字模文件中将代表A字的这一组数据送到显卡去点亮屏幕上相应的点,你就看到“A”这个字了。