b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

c语言颜色函数51、STC单片机C语言通用万能编程模板解析(4)

电脑杂谈  发布时间:2018-10-13 20:14:10  来源:网络整理

(被调用层) { while(*s>0) { write_data(*s); s++; } } /*****************************************************************************/ void lcm_w_test(bit i,unsigned char word) //写指令或数据(被调用层) { if(i == 0) { write_com(word); //写指令或数据(0,指令) } else { write_data(word); //写指令或数据(1,数据) } } /*****************************************************************************/ void lcm_clr(void) //清屏函数 { lcm_w_test(0,0x01); } /*****************************************************************************/ //应用:lcm_w_word("您好!"); 17.DS18B20 温度传感器驱动/*****************************************************************************/ //DS18B20 温度传感器驱动(显示 0 至 60 度) /*****************************************************************************/ void Delay(int num) //延时函数 { while(num--) ; } /*****************************************************************************/ void Init_DS18B20(void) //初始化 ds1820 { unsigned char x=0; DQ = 1; //DQ 复位 Delay(8); //稍做延时 DQ = 0; //单片机将 DQ 拉低 Delay(80); //精确延时 大于 480us DQ = 1; //拉高总线 Delay(14); x=DQ; //稍做延时后 如果 x=0 则初始化成功 x=1 则初始化失败 Delay(20); } /*****************************************************************************/ unsigned char ReadOneChar(void) //读一个字节 { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) { DQ = 0; // 给脉冲信号 dat>>=1; DQ = 1; // 给脉冲信号 if(DQ) dat|=0x80; Delay(4); } return(dat); } /*****************************************************************************/ void WriteOneChar(unsigned char dat) //写一个字节 { unsigned char i=0; for (i=8; i>0; i--) { DQ = 0; DQ = dat&0x01; Delay(5); DQ = 1; dat>>=1; } } /*****************************************************************************/ unsigned int ReadTemperature(void) //读取温度 { unsigned char a=0; unsigned char b=0; unsigned int t=0; float tt=0; Init_DS18B20(); WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换 Init_DS18B20(); WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器 a=ReadOneChar(); b=ReadOneChar(); t=b; t<<=8; t=t|a; tt=t*0.0625; t= tt*10+0.5; return(t);//读低 8 位 //读高 8 位//放大 10 倍输出并四舍五入} /*****************************************************************************/18.LCM2402(1602 也适用)驱动程序/*****************************************************************************/ // 以下是 LCM2402(1602 也适用)驱动程序 // /*****************************************************************************/ /****************************************************************************** // 引脚定义 // (使用者根据实际更改) /*****************************************************************************/ #define LCM2402_DB0_DB7 P1 // 定义 LCM2402 的数据总线 sbit LCM2402_RS = P3 ^ 2; // 定义 LCM2402 的 RS 控制线 sbit LCM2402_RW = P3 ^ 3; // 定义 LCM2402 的 RW 控制线 sbit LCM2402_E = P3 ^ 4; // 定义 LCM2402 的 E 控制线 sbit LCM2402_Busy = P1 ^ 7; // 定义 LCM2402 的测忙线(与 LCM2402_DB0_DB7 关联) /****************************************************************************** // 定义 LCM2402 指令集 // (详细请见技术手册) /*****************************************************************************/ #define #define #define #define #define #define #define #define #define #define #define #define #define #defineCMD_clear CMD_back CMD_dec1 CMD_add1 CMD_dis_gb1 CMD_dis_gb2 CMD_dis_gb3 CMD_OFF_dis CMD_set82 CMD_set81 CMD_set42 CMD_set41 lin_1 lin_20x01 0x02 0x04 0x06 0x0f 0x0e 0x0c 0x08 0x38 0x30 0x28 0x20 0x80 0xc0// 清除屏幕 // DDRAM 回零位 // 读入后 AC(指针)减 1,向左写 // 读入后 AC(指针)加 1,向右写 // 开显示_开光标_开光标闪烁 // 开显示_开光标_关光标闪烁 // 开显示_关光标_关光标闪烁 // 关显示_关光标_关光标闪烁 // 8 位总线_2 行显示 // 8 位总线_1 行显示(上边行) // 4 位总线_2 行显示 // 4 位总线_1 行显示(上边行) // 4 位总线_1 行显示(上边行) // 4 位总线_1 行显示(上边行)/****************************************************************************** // 读 LCM 忙程序 [底层协议] // (所有底层协议都无需关注) // LCM2402 测忙,若 LCM2402 处于忙状态,本函数将等待至非忙状态 // /*****************************************************************************/ void LCM2402_TestBusy(void) { LCM2402_DB0_DB7 = 0xff; //设备读状态 LCM2402_RS = 0; LCM2402_RW = 1; LCM2402_E = 1; while(LCM2402_Busy); //等待 LCM 不忙 LCM2402_E = 0; } /****************************************************************************** // 写指令程序 // // 向 LCM2402 写命令 本函数需要 1 个指令集的入口参数 // /*****************************************************************************/ void LCM2402_WriteCMD(uint8 LCM2402_command) { LCM2402_TestBusy(); LCM2402_DB0_DB7 = LCM2402_command; LCM2402_RS = 0; LCM2402_RW = 0; LCM2402_E = 1; LCM2402_E = 0; } /****************************************************************************** // 写数据程序 // // 向 LCM2402 写数据 // /*****************************************************************************/ void LCM2402_WriteData(uint8 LCM2402_data) { LCM2402_TestBusy(); LCM2402_DB0_DB7 = LCM2402_data; LCM2402_RS = 1; LCM2402_RW = 0; LCM2402_E = 1; LCM2402_E = 0; } /****************************************************************************** // 打印字符串程序 // (本函数调用指针函数) // 向 LCM 发送一个字符串,长度 48 字符之内 // 第一行位置 0x00~0x17 第二行位置 0x40~0x57 // 应用举例:print(0x80,"doyoung.net"); //在第一行第一位处从左向右打印 doyoung.net 字符串 /*****************************************************************************/ void print(uint8 a,uint8 *str) { LCM2402_WriteCMD(a | 0x80); while(*str != '\0') { LCM2402_WriteData(*str++); } *str = 0; } /****************************************************************************** // 打印单字符程序 // // 第一行位置 0x00~0x17 第二行位置 0x40~0x57 // 向 LCM 发送一个字符,以十六进制(0x00)表示 // 应用举例:print(0xc0,0x30); //在第二行第一位处打印字符“0” /*****************************************************************************/ void print2(uint8 a,uint8 t) { LCM2402_WriteCMD(a | 0x80); LCM2402_WriteData(t); } /****************************************************************************** // LCM2402 初始化 //(使用者可自定义,加 * 号程序行必须保留但可修改) /*****************************************************************************/ void LCM2402_Init(void) { LCM2402_WriteCMD(CMD_set82); //* 显示模式设置:显示 2 行,每个字符为 5*7 个像素 LCM2402_WriteCMD(CMD_clear); // 显示清屏 LCM2402_WriteCMD(CMD_back); //* 数据指针指向第 1 行第 1 个字符位置 LCM2402_WriteCMD(CMD_add1); // 显示光标移动设置:文字不动,光标右移 LCM2402_WriteCMD(CMD_dis_gb3); // 显示开及光标设置:显示开,光标开,闪烁开 } /*****************************************************************************/ 19.主函数/****************************************************************************** 函数名:主函数 调 用:无 参 数:无 返回值:无 结 果:程序开始处,无限循环 备 注: /*****************************************************************************/ void main (void) { /****************************************************************************** 函数名:扬声器驱动 备 注: /*****************************************************************************/ unsigned char MUSIC; unsigned char STH0; unsigned char STL0; unsigned int code tab[]={ 64021,64103,64260,64400,//低音 3 开始 64524,64580,64684,64777, 64820,64898,64968,65030, 65058,65110,65157,65178 }; void main(void) { TMOD=0x01; ET0=1; EA=1; KEY = 0xff; while(1) { STH0=tab[MUSIC]/256; STL0=tab[MUSIC]%256; TR0=1; } else { SPEAKER = 1; TR0=0; } } } void t0(void) interrupt 1 using 0 { TH0=STH0; TL0=STL0; SPEAKER=~SPEAKER; } /*****************************************************************************/ 20. 8 个独立式键盘驱动程序/****************************************************************************** 函数名:8 个独立式键盘驱动程序 调 用:? = Key (); 参 数:无 返回值:unsigned char 键值 0~8 结 果:有键按下时返回值为键值 1~8,无键按下时返回值为 0 备 注:在主函数中不断调用 /*****************************************************************************/ unsigned char Key ( ) //8 个独立键盘处理程序 { unsigned char a,b; KEY = 0xff; //设定键盘初始电平状态 if (KEY != 0xff) //读取键盘状态是否改变 { Delay (20); //延时 20ms 去抖动 if (KEY != 0xff) //重新读取 { a = KEY; //寄存状态值到 a } switch(a){ //键盘状态查表 case 0xfe: b = 1; break; case 0xfd: b = 2; break; case 0xfb: b = 3; break; case 0xf7: b = 4; break; case 0xef: b = 5; break; case 0xdf: b = 6; break; case 0xbf: b = 7; break; case 0x7f: b = 8; break; default: b = 0 ; break; } } return (b); //将 b 中的键值代号送入函数返回值 } /*****************************************************************************/21. 16 个阵列式键盘驱动程序/****************************************************************************** 函数名:16 个阵列式键盘驱动程序 调 用:? = Key (); 参 数:无 返回值:unsigned char 键值 0~16 结 果:有键按下时返回值为键值 1~16,无键按下时返回值为 0 备 注:在主函数中不断调用 /*****************************************************************************/ unsigned char Key (void) //4*4 阵列键盘处理程序 { unsigned char a,b,c; KEY = 0x0f; //设定键盘初始电平状态 if (KEY != 0x0f) //读取键盘状态是否改变 { Delay (20); //延时 20ms 去抖动 if (KEY != 0x0f) //重新读取 { a = KEY; //寄存状态值到 a } KEY = 0xf0; //设定键盘反向电平状态 c = KEY; a = a|c; switch(a) { case 0xee: b = 1; break; case 0xed: b = 2; break; case 0xeb: b = 3; break; case 0xe7: b = 4; break; case 0xde: b = 5; break; case 0xdd: b = 6; break; case 0xdb: b = 7; break; case 0xd7: b = 8; break; case 0xbe: b = 9; break; case 0xbd: b = 10; break; case 0xbb: b = 11; break; case 0xb7: b = 12; break; case 0x7e: b = 13; break; case 0x7d: b = 14; break; case 0x7b: b = 15; break; case 0x77: b = 16; break; default: b = 0 ; break; }//读取反向电平状态值到 c //a 与 c 相或 //键盘状态查表} return (b); //将 b 中的键值代号送入函数返回值 } /*****************************************************************************/ T_C_init(); UART_init(); INT_init(); LCM2402_Init(); //P1M0 = 0xff; //P1M1 = 0x00; //DELAY_MS (200); PWM_init(); //将 P1 接口设置为高阻态输入 (去掉“//”解除屏蔽) //触摸按键启用 //延时等待 I/O 接口电平状态稳定 //PWM 初始化 //初始程序while(1) { //无限循环程序 } } /*****************************************************************************/


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-89445-4.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...