Nokia3310 5110液晶显示(使用说明+C程序)
- 格式:doc
- 大小:496.50 KB
- 文档页数:17
#include <reg51.h>/* 雨亭电子代码测试环境:JME-2核心板+1T指令周期的STC单片机(51内核STC12LE5A60S2)+33M 晶振单片机工作电压3.3V程序默认IO连接方式:cs-P0^0; rest-P0^1; sdata-P1^5; sclk-P1^7;*///接口定义sbit cs=P0^0; //片选sbit rest=P0^1; //复位sbit sdata=P1^5; //数据sbit sclk=P1^7; //时钟unsigned char V er='A'; //驱动版本,默认为A版本,一共4个版本//8*12字符unsigned char code zifu[]={/*-- 文字: --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*-- 文字: ! --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,0x00,/*-- 文字: " --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x28,0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*-- 文字: # --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x28,0x28,0xFC,0x28,0x50,0xFC,0x50,0x50,0x00,0x00,/*-- 文字: $ --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x20,0x78,0xA8,0xA0,0x60,0x30,0x28,0xA8,0xF0,0x20,0x00,/*-- 文字: % --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x48,0xA8,0xB0,0x50,0x28,0x34,0x54,0x48,0x00,0x00,/*-- 文字: & --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x20,0x50,0x50,0x78,0xA8,0xA8,0x90,0x6C,0x00,0x00,/*-- 文字: ' --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*-- 文字: ( --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x04,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x08,0x04,0x00,/*-- 文字: ) --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x40,0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x40,0x00,/*-- 文字: * --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x00,0x20,0xA8,0x70,0x70,0xA8,0x20,0x00,0x00,0x00,/*-- 文字: + --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x20,0x20,0x20,0xF8,0x20,0x20,0x20,0x00,0x00,0x00,/*-- 文字: , --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x80,/*-- 文字: - --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,/*-- 文字: . --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,/*-- 文字: / --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x08,0x10,0x10,0x10,0x20,0x20,0x40,0x40,0x40,0x80,0x00,/*-- 文字: 0 --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00,/*-- 文字: 1 --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x20,0x60,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,/*-- 文字: 2 --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x70,0x88,0x88,0x10,0x20,0x40,0x80,0xF8,0x00,0x00,/*-- 文字: 3 --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x70,0x88,0x08,0x30,0x08,0x08,0x88,0x70,0x00,0x00,/*-- 文字: 4 --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x10,0x30,0x50,0x50,0x90,0x78,0x10,0x18,0x00,0x00,/*-- 文字: 5 --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0xF8,0x80,0x80,0xF0,0x08,0x08,0x88,0x70,0x00,0x00,/*-- 文字: 6 --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x70,0x90,0x80,0xF0,0x88,0x88,0x88,0x70,0x00,0x00,/*-- 文字: 7 --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0xF8,0x90,0x10,0x20,0x20,0x20,0x20,0x20,0x00,0x00,/*-- 文字: 8 --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x70,0x88,0x88,0x70,0x88,0x88,0x88,0x70,0x00,0x00,/*-- 文字: 9 --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x70,0x88,0x88,0x88,0x78,0x08,0x48,0x70,0x00,0x00,/*-- 文字: : --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x20,0x00,0x00,/*-- 文字: ; --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x20,0x00,/*-- 文字: < --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x00,0x00,/*-- 文字: = --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,/*-- 文字: > --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/ /*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x40,0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x40,0x00,0x00,/*-- 文字: ? --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x70,0x88,0x88,0x10,0x20,0x20,0x00,0x20,0x00,0x00,/*-- 文字: @ --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x70,0x88,0x98,0xA8,0xA8,0xB8,0x80,0x78,0x00,0x00,/*-- 文字: A--*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x20,0x20,0x30,0x50,0x50,0x78,0x48,0xCC,0x00,0x00,/*-- 文字: B --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0xF0,0x48,0x48,0x70,0x48,0x48,0x48,0xF0,0x00,0x00,/*-- 文字: C --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x78,0x88,0x80,0x80,0x80,0x80,0x88,0x70,0x00,0x00,/*-- 文字: D --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0xF0,0x48,0x48,0x48,0x48,0x48,0x48,0xF0,0x00,0x00,/*-- 文字: E --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0xF8,0x48,0x50,0x70,0x50,0x40,0x48,0xF8,0x00,0x00,/*-- 文字: F --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0xF8,0x48,0x50,0x70,0x50,0x40,0x40,0xE0,0x00,0x00,/*-- 文字: G --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x38,0x48,0x80,0x80,0x9C,0x88,0x48,0x30,0x00,0x00, /*-- 文字: H --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0xCC,0x48,0x48,0x78,0x48,0x48,0x48,0xCC,0x00,0x00,/*-- 文字: I --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0xF8,0x20,0x20,0x20,0x20,0x20,0x20,0xF8,0x00,0x00,/*-- 文字: J --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x90,0xE0,0x00,/*-- 文字: K --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0xEC,0x48,0x50,0x60,0x50,0x50,0x48,0xEC,0x00,0x00,/*-- 文字: L --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0xE0,0x40,0x40,0x40,0x40,0x40,0x44,0xFC,0x00,0x00,/*-- 文字: M --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0xD8,0xD8,0xD8,0xD8,0xA8,0xA8,0xA8,0xA8,0x00,0x00,/*-- 文字: N --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0xDC,0x48,0x68,0x68,0x58,0x58,0x48,0xE8,0x00,0x00,/*-- 文字: O --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00,/*-- 文字: P--*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0xF0,0x48,0x48,0x70,0x40,0x40,0x40,0xE0,0x00,0x00,/*-- 文字: Q --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x70,0x88,0x88,0x88,0x88,0xE8,0x98,0x70,0x18,0x00,/*-- 文字: R --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0xF0,0x48,0x48,0x70,0x50,0x48,0x48,0xEC,0x00,0x00,/*-- 文字: S --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x78,0x88,0x80,0x60,0x10,0x08,0x88,0xF0,0x00,0x00,/*-- 文字: T --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0xF8,0xA8,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,/*-- 文字: U --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0xCC,0x48,0x48,0x48,0x48,0x48,0x48,0x30,0x00,0x00,/*-- 文字: V --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0xCC,0x48,0x48,0x50,0x50,0x30,0x20,0x20,0x00,0x00,/*-- 文字: W --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0xA8,0xA8,0xA8,0x70,0x50,0x50,0x50,0x50,0x00,0x00,/*-- 文字: X --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0xD8,0x50,0x50,0x20,0x20,0x50,0x50,0xD8,0x00,0x00,/*-- 文字: Y--*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0xD8,0x50,0x50,0x20,0x20,0x20,0x20,0x70,0x00,0x00,/*-- 文字: Z --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0xF8,0x90,0x10,0x20,0x20,0x40,0x48,0xF8,0x00,0x00,/*-- 文字: [ --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x38,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x38,0x00,/*-- 文字: \ --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x40,0x40,0x40,0x20,0x20,0x10,0x10,0x10,0x08,0x00,0x00,/*-- 文字: ] --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x70,0x00,/*-- 文字: ^ --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x20,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*-- 文字: _ --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,/*-- 文字: ` --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*-- 文字: a --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x38,0x48,0x3C,0x00,0x00,/*-- 文字: b --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0xC0,0x40,0x40,0x70,0x48,0x48,0x48,0x70,0x00,0x00,/*-- 文字: c --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x00,0x00,0x00,0x38,0x48,0x40,0x40,0x38,0x00,0x00,/*-- 文字: d --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x18,0x08,0x08,0x38,0x48,0x48,0x48,0x3C,0x00,0x00,/*-- 文字: e --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x78,0x40,0x38,0x00,0x00,/*-- 文字: f --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x1C,0x20,0x20,0x78,0x20,0x20,0x20,0x78,0x00,0x00,/*-- 文字: g --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x00,0x00,0x00,0x3C,0x48,0x30,0x40,0x78,0x44,0x38,/*-- 文字: h --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0xC0,0x40,0x40,0x70,0x48,0x48,0x48,0xEC,0x00,0x00,/*-- 文字: i --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x20,0x00,0x00,0x60,0x20,0x20,0x20,0x70,0x00,0x00,/*-- 文字: j --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x10,0x00,0x00,0x30,0x10,0x10,0x10,0x10,0x10,0xE0,/*-- 文字: k --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0xC0,0x40,0x40,0x5C,0x50,0x70,0x48,0xEC,0x00,0x00,/*-- 文字: l --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0xF8,0x00,0x00,/*-- 文字: m --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x00,0x00,0x00,0xF0,0xA8,0xA8,0xA8,0xA8,0x00,0x00,/*-- 文字: n --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x00,0x00,0x00,0xF0,0x48,0x48,0x48,0xEC,0x00,0x00,/*-- 文字: o --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x48,0x48,0x30,0x00,0x00,/*-- 文字: p --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x00,0x00,0x00,0xF0,0x48,0x48,0x48,0x70,0x40,0xE0,/*-- 文字: q --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x00,0x00,0x00,0x38,0x48,0x48,0x48,0x38,0x08,0x1C,/*-- 文字: r --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x00,0x00,0x00,0xD8,0x60,0x40,0x40,0xE0,0x00,0x00,/*-- 文字: s --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x00,0x00,0x00,0x00,0x78,0x40,0x30,0x08,0x78,0x00,0x00, /*-- 文字: t --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x00,0x20,0x20,0x70,0x20,0x20,0x20,0x18,0x00,0x00,/*-- 文字: u --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x00,0x00,0x00,0xD8,0x48,0x48,0x48,0x3C,0x00,0x00,/*-- 文字: v --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x00,0x00,0x00,0xEC,0x48,0x50,0x30,0x20,0x00,0x00,/*-- 文字: w --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x00,0x00,0x00,0xA8,0xA8,0x70,0x50,0x50,0x00,0x00,/*-- 文字: x --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x00,0x00,0x00,0xD8,0x50,0x20,0x50,0xD8,0x00,0x00,/*-- 文字: y --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x00,0x00,0x00,0xEC,0x48,0x50,0x30,0x20,0x20,0xC0,/*-- 文字: z --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x00,0x00,0x00,0x00,0x78,0x10,0x20,0x20,0x78,0x00,0x00,/*-- 文字: { --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x00,0x18,0x10,0x10,0x10,0x20,0x10,0x10,0x10,0x10,0x18,0x00,/*-- 文字: | --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/ 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,/*-- 文字: } --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x00,0x60,0x20,0x20,0x20,0x10,0x20,0x20,0x20,0x20,0x60,0x00,/*-- 文字: ~ --*//*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=8x12 --*/0x40,0xA4,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};//16*16汉字unsigned char code hanzi[]={/*---------------雨----------------*/0x00,0x4F,0xFE,0x4,0x7,0xFC,0x66,0x45,0x54,0x44,0x46,0x64,0x55,0x44,0x44,0x45,0xC0,0x00,/*---------------亭----------------*/0x04,0x07,0xFC,0x00,0x01,0xF8,0x10,0x8F,0xFE,0x80,0x23,0xF8,0x04,0x00,0x40,0x1C, 0x00,0x00,/*---------------电----------------*/0x04,0x00,0x44,0x7F,0xE4,0x44,0x7F,0xC4,0x44,0x44,0x47,0xFC,0x44,0x00,0x42,0x03,0xE0,0x00,/*---------------子----------------*/0x7F,0xC0,0x08,0x01,0x00,0x60,0x04,0x4F,0xFE,0x04,0x00,0x40,0x04,0x00,0x40,0x1C,0x00,0x00,/*---------------我----------------*/0x0A,0x8F,0x24,0x12,0x0F,0xFE,0x12,0x01,0x64,0x3A,0x8D,0x10,0x13,0x21,0xCA,0x70, 0x60,0x00,/*---------------是----------------*/0x1F,0x81,0x08,0x1F,0x81,0x08,0x1F,0x80,0x00,0xFF,0xE2,0x40,0x37,0xC4,0xC0,0x87,0xE0,0x00,/*---------------企----------------*/0x04,0x00,0x60,0x09,0x01,0x08,0x24,0x6C,0x40,0x17,0x81,0x40,0x14,0x01,0x40,0xFF,0xE0,0x00,/*---------------鹅----------------*/0x30,0x8D,0xBC,0x52,0x4F,0xB4,0x52,0xC7,0x60,0xDB,0xE5,0x02,0x6B,0xE4,0xA2,0xC6, 0xC0,0x00,/*---------------我----------------*/0x0A,0x8F,0x24,0x12,0x0F,0xFE,0x12,0x01,0x64,0x3A,0x8D,0x10,0x13,0x21,0xCA,0x70, 0x60,0x00,/*---------------怕----------------*/0x21,0x02,0x20,0x27,0xEB,0x42,0xAC,0x2A,0x42,0x27,0xE2,0x42,0x24,0x22,0x42,0x27, 0xE0,0x00,/*---------------谁----------------*/0x45,0x02,0x48,0x0F,0xE0,0xC8,0xD7,0xE4,0x48,0x44,0x84,0x7E,0x54,0x86,0x7E,0x04,0x00,0x00,/*-------------------------------*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};//40*40图片const unsigned char gImage_1[3708] = { 0X00,0X10,0X32,0X00,0X25,0X00,0X01,0X1B,0XA1,0X3A,0X05,0X5C,0X03,0X2A,0X83,0X4B,0X9E,0XEF,0XA5,0X4B,0XE1,0X53,0X41, } ;/*这里删掉了部分代码*/void delayms(unsigned int ii)//1ms延时函数{unsigned int i,x;for (x=0;x<ii;x++){for (i=0;i<100;i++);}}void send(unsigned char value, unsigned char cd) //写8位数据{unsigned char i,dt;cs=0;sclk=0;if(cd == 0)sdata=0;elsesdata=1;sclk=1;dt=value;for(i=0;i<8;i++){sclk=0;if(dt&0x80)sdata=1;elsesdata=0;dt=dt<<1;sclk=1;}cs=1;}void readdata() //读数据{unsigned char i,j;unsigned char ch[6];send(0x09, 0); // 读数据cs=0;sclk=0;for (i=0;i<6;i++){ch[i]=0;for (j=0;j<8;j++){sclk=1;if (sdata==0){ch[i]=ch[i]|(1<<(7-j));}sclk=0;}}switch(ch[0]){case 255:V er='A';break;case 127:V er='B';break;case 0:if(ch[1]+ch[2]+ch[3]==0){V er='D';}else{V er='C';}break;}cs=1;void LCD_Initialize() //LCD初始化{unsigned char i;rest=1;cs=1;sdata=0;sclk=1;rest=0;delayms(50);rest=1;delayms(50);send(0x00, 0); // NOPdelayms(5);send(0x01, 0); // LCD Software Resetdelayms(5);send(0xC6, 0); // Initial Escapesend(0xB9, 0); // Refresh setsend(0x00, 1);readdata(); //读出数据send(0xB5, 0); // Gamma Curve Setsend(0x01, 1);send(0xbd, 0); //common driver output select//很重要的if(V er=='D'){send(0x04, 1);}else{send(0x00, 1);}send(0xBE, 0); // Power Controlsend(0x03, 1);send(0x11, 0); // Sleep outsend(0xBA, 0); // Power Controlsend(0x7F, 1);send(0x03, 1);send(0x36, 0); // 扫描方式if (V er=='A'){send(0x00|0x08,1); //RGB}else{send(0x00,1); //RGB}send(0xB7, 0); // Temperature gradient setfor(i=0; i<14; i++){send(0, 1);}send(0x29, 0); //display ONsend(0x03, 0); // Booster V oltage ONdelayms(20); // Booster V oltage stabilisieren lassen send(0x20, 0); //display inversion OFFsend(0x25, 0); // Write contrastswitch(V er) //对比度设置{case 'A':send(70, 1); //对比度设置break;case 'B':send(67, 1); //对比度设置break;case 'C'://send(74, 1);send(66, 1);// send(64, 1); //对比度设置break;case 'D': //对比度设置send(39, 1);break;}}//************************//颜色模式设置:color=1为4096色模式// :color=0为256色模式//************************void LCD_ColorSet(unsigned char Color){if (Color==1) {send(0x3a, 0); //interface pixel formatsend(0x03, 1); //0x03 为4096色,0x02为256色}else{send(0x3a, 0); //interface pixel formatsend(0x02, 1); //0x03 为4096色,0x02为256色send(0x2d, 0); //调色板设置if (V er=='B'||V er=='C'){//redsend(~0x00, 1);send(~0x02, 1);send(~0x03, 1);send(~0x04, 1);send(~0x05, 1);send(~0x06, 1);send(~0x08, 1);send(~0x0f, 1);//greensend(~0x00, 1);send(~0x02, 1);send(~0x03, 1);send(~0x04, 1);send(~0x05, 1);send(~0x06, 1);send(~0x08, 1);send(~0x0f, 1);//bluesend(~0x00, 1);send(~0x03, 1);send(~0x06, 1);send(~0x0f, 1);}else{//redsend(0x00, 1);send(0x02, 1);send(0x03, 1);send(0x04, 1);send(0x05, 1);send(0x06, 1);send(0x08, 1);send(0x0f, 1);//greensend(0x00, 1);send(0x02, 1);send(0x03, 1);send(0x04, 1);send(0x05, 1);send(0x06, 1);send(0x08, 1);send(0x0f, 1);//bluesend(0x00, 1);send(0x03, 1);send(0x06, 1);send(0x0f, 1);}}}void addset(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2) //坐标设置4个参数依次为开始X,开始Y,结束x,结束Y{send(0x2a,0 );//column address setsend(x1,1 );send(x2,1 );send(0x2B,0 );//page address setsend(y1,1 );send(y2,1 );send(0x2C,0 );//memory write}//************************//清屏:color=1为4096色模式清屏// :color=0为256色模式清屏//************************void LCD_Clear(unsigned int value,unsigned char Color){unsigned char x, y;addset(0,0,97,66);if (Color==1){for(y = 0; y < 67; y ++){for(x = 0; x < 49;x ++){ send(value>>4,1);send(((value&0x0f)<<4)|(value>>8),1);send(value,1);}}}else{for(y = 0; y < 67; y ++){for(x = 0; x < 98; x ++){send(value,1);}}}}//在指定位置显示一个字符(8*12大小)//dcolor为内容颜色,gbcolor为背静颜色void showzifu(unsigned char x,unsigned char y,unsigned char value,unsigned char dcolor,unsigned char bgcolor){unsigned char i,j;unsigned char *temp=zifu;addset(x,y,x+7,y+11); //设置区域temp+=(value-32)*12;for(j=0;j<12;j++){for(i=0;i<8;i++){if((*temp&(1<<(7-i)))!=0){send(dcolor,1);}else{send(bgcolor,1);}}temp++;}}//在指定位置显示一个字符串(8*12大小)//dcolor为内容颜色,gbcolor为背静颜色void showzifustr(unsigned char x,unsigned char y,unsigned char *str,unsigned char dcolor,unsigned char bgcolor){unsigned char x1,y1;x1=x;y1=y;while(*str!='\0'){showzifu(x1,y1,*str,dcolor,bgcolor);x1+=7;str++;}}//在指定位置显示一个汉字(12*12大小)//dcolor为内容颜色,gbcolor为背静颜色void showhanzi(unsigned char x,unsigned char y,unsigned char value,unsigned char dcolor,unsigned char bgcolor){unsigned char i,j;unsigned char *temp=hanzi;addset(x,y,x+11,y+11); //设置区域temp+=value*18;for(j=0;j<18;j++){for(i=0;i<8;i++){if((*temp&(1<<(7-i)))!=0){send(dcolor,1);}else{send(bgcolor,1);}}temp++;}}int main(void){int i;//256色//0b11100000 0xe0 red//0b00011100 0x1c green//0b00000011 0x03 blueLCD_Initialize(); //LCD初始化LCD_ColorSet(0); //0为256色模式,1为4096色模式LCD_Clear(255,0); //清屏addset(28,0,67,39); //设置起止坐标,4个参数依次为开始X,开始Y,结束x,结束Yfor(i=0;i<1600;i++){send(img[i],1);}showhanzi(0,40,4,0xe0,255); //我showhanzi(14,40,5,0xe0,255); //是showhanzi(28,40,6,0xe0,255); //乞showhanzi(42,40,7,0xe0,255); //鹅showhanzi(56,40,8,0xe0,255); //我showhanzi(70,40,9,0xe0,255); //怕showhanzi(84,40,10,0xe0,255); //谁showhanzi(0,5,0,0x03,255); //雨showhanzi(14,5,1,0x03,255); //亭showhanzi(0,19,2,0x03,255); //电showhanzi(14,19,3,0x03,255); //子showzifustr(5,55,"NOKIA 3510I-",0x03,255); //显示字符串showzifu(90,55,V er,0x03,255); //显示驱动版本showzifustr(68,5,"GOOD",0,255); //显示字符串showzifustr(75,17,"LCD",0,255); //显示字符串while(1){LCD_Initialize(); //LCD初始化LCD_ColorSet(0); //0为256色模式,1为4096色模式LCD_Clear(255,0); //清屏addset(28,0,67,39); //设置起止坐标,4个参数依次为开始X,开始Y,结束x,结束Yfor(i=0;i<1600;i++){send(img[i],1);}showhanzi(0,40,4,0xe0,255); //我showhanzi(14,40,5,0xe0,255); //是showhanzi(28,40,6,0xe0,255); //乞showhanzi(42,40,7,0xe0,255); //鹅showhanzi(56,40,8,0xe0,255); //我showhanzi(70,40,9,0xe0,255); //怕showhanzi(84,40,10,0xe0,255); //谁showhanzi(0,5,0,0x03,255); //雨showhanzi(14,5,1,0x03,255); //亭showhanzi(0,19,2,0x03,255); //电showhanzi(14,19,3,0x03,255); //子showzifustr(5,55,"NOKIA 3510I-",0x03,255); //显示字符串showzifu(90,55,V er,0x03,255); //显示驱动版本showzifustr(68,5,"GOOD",0,255); //显示字符串showzifustr(75,17,"LCD",0,255); //显示字符串delayms(15000);}}。
51单片机的液晶显示温度计程序51单片机的液晶显示温度计程序#include<reg51.h>#include <intrins.h>sbit RST = P2^0;sbit CLK = P2^1;sbit DQ = P2^2;sbit TSOR = P2^3;sbit ALERT =P2^4;sbit RS = P2^7;sbit RW = P2^6;sbit EN = P2^5;/*------------------------------------------全局变量-------------------------------------------------------*/static unsigned char temp1,temp2; //温度值的整数部分、小数部分static unsigned char pos,posset; //数字电位器电位值、设定值static unsigned char min,sec; //分钟、秒static unsigned char count; //Timer0中断计数static unsigned char minset; //设定的分钟数static unsigned char status1,status2; //状态标志bit stop,timeover; //定时停止、结束static char line0[] =" 00:00 ";static char line1[] =" . CW";/*-------------------------------------------------------------------------------------------------------------*/void InitInterupt();void KeyboardDelay();/*-------------------------------------------LCD驱动函数------------------------------------------------*/void DelayL();void DelayS();void WriteCommand(unsigned char c);void WriteData(unsigned char c);void ShowChar(unsigned char pos,unsigned char c); void ShowString(unsigned char line,char *ptr);void InitLcd();/*----------------------------------------------键盘-程序--------------------------------------------------*/unsigned char GetKey();/*---------------------------------------------数字温度计驱动-------------------------------------------*/void ChangePos(bit sel,unsigned char pos1,unsigned char pos2);/*------------------------------------------温度传感器驱动----------------------------------------------*/void Delay15();void Delay60();void Delay100ms();void Write0TS();void Write1TS();bit ReadTS();void ResetTS();void WriteByteTS(unsigned char byte); unsigned char ReadByteTS();void InitTS();void GetTempTS();/*-------------------------------------------------主程序---------------------------------------------------*/void main (void) {char code str1[] =" Hello World! ";char code str2[] =" 2002-10-20 "; unsigned char i; SP=0x50;ALERT=0; //报警灯灭TSOR=1; //1-wire总线释放DelayL();InitLcd(); //初始化LCDDelayL();ShowString(0,str1); //启动画面ShowString(1,str2);for(i=0;i<15;i++)Delay100ms();InitInterupt(); //初始化中断设置minset=10; //缺省定时10分钟posset=0; //缺省电位器值0min=minset; //初始化数据pos=posset;sec=0;count=0;P1=0xF0;status1=0;status2=0;stop=1;timeover=0; ChangePos(0,255-pos,255-pos); //设置电位器InitTS(); //初始化温度计while(1) //循环显示温度值{GetTempTS();line1[0]=0x20;i=temp1;if(i>39) //超过40摄氏度,告警灯亮ALERT=1;if(i>99) //超过100摄氏度,显示温度的百位{line1[0]=0x31;i-=100;}line1[1]=i/10+0x30; //显示温度的十位line1[2]=i%10+0x30; //显示个位line1[4]=temp2+0x30; //显示小数位if(timeover) //若定时结束,则电位器缓慢复0{for(;pos>0;pos--){ChangePos(0,255-pos,255-pos);_nop_();_nop_();}timeover=0;posset=0;}if(pos>posset) //若按键修改电位器位置{for(;pos>posset;pos--) //则缓变到设定值{ChangePos(0,255-pos,255-pos);_nop_();_nop_();}ChangePos(0,255-pos,255-pos);}else if(pos<posset){for(;pos<posset;pos++){ChangePos(0,255-pos,255-pos);_nop_();_nop_();}ChangePos(0,255-pos,255-pos);}i=pos;line1[9]=0x20; //显示电位器等级值if(i>99){line1[9]=i/100+0x30;i=i%100;}line1[10]=i/10+0x30;line1[11]=i%10+0x30;ShowString(1,line1);line0[5]=min/10+0x30; //显示时间line0[6]=min%10+0x30;line0[8]=sec/10+0x30;line0[9]=sec%10+0x30;ShowString(0,line0);Delay100ms();}}void InitInterupt(){TMOD=0x21; //初始化中断设置TL1=0xFD;TH1=0xFD;PX0=1;EA=1;ES=1;PCON=0;TR1=1;SCON=0x50;TL0=0x00; //定时0.05mTH0=0x4C;ET0=1; EX0=1;IT0=1;}void KeyboardDelay() //按键中断延时{unsigned char i,j;i=0x40;j=0xFF;while(i--)while(j--);}/*--------------------------------------------中断处理-----------------------------------------------------*/Int0_process() interrupt 0 using 0{unsigned char key;unsigned char keycode[]= "TP";unsigned char step[3]={1,2,5};EA=0;key=GetKey(); //获得按键值switch(key){case 0:stop=!stop;min=minset;sec=0;break;case 1:case 2:case 3:if(stop){minset+=step[key-1];if(minset>60)minset=0;min=minset;}break;case 5:case 6:case 7:if(stop){minset-=step[key-5]; if(minset>60) minset=0;min=minset;}break;case 9:case 10:case 11:posset+=step[key-9];break;case 13:case 14:case 15:posset-=step[key-13];break;default:break;}TR0=!stop;KeyboardDelay();P1=0xF0;EA=1;}Timer0_process() interrupt 1 using 0{EA=0;TR0=0;TL0=0x00;TH0=0x4C;count++;if(count==20) //如果到累计定时到达1s {if(sec==0) //定时处理{if(min==0) //总定时到,则置结束标志timeover=1;else{min--;sec=59;}}elsesec--;count=0;}TR0=1;EA=1;}/*--------------------------------------LCD驱动子程序--------------------------------------------------*/void DelayL(){unsigned char i,j;i=0xF0;j=0xFF;while(i--)while(j--);}void DelayS(){unsigned char i;i=0x1F;while(i--);}void WriteCommand(unsigned char c) {DelayS();EN=0;RS=0;RW=0;_nop_();EN=1;P0=c;EN=0;}void WriteData(unsigned char c){DelayS();EN=0;RS=1;RW=0;_nop_();EN=1;P0=c;EN=0;RS=0;}void ShowChar(unsigned char pos,unsigned char c) {unsigned char p;if(pos>=0x10)p=pos+0xB0;elsep=pos+0x80;WriteCommand(p);WriteData(c);}void ShowString(unsigned char line,char *ptr){unsigned char l,i;l=line<<4;for(i=0;i<16;i++)ShowChar(l++,*(ptr+i));} void InitLcd(){DelayL();WriteCommand(0x38);WriteCommand(0x38);WriteCommand(0x06);WriteCommand(0x0C);WriteCommand(0x01);WriteCommand(0x80);}/*---------------------------------------------键盘子程序-------------------------------------------------*/ unsigned char GetKey(){unsigned k,t,i,j;k=P1;k=k&0xF0;i=0;while((k&0x10)&&i<4) {i++;k=k>>1;}k=0x01;j=0;while(j<4){P1=0xFF^k;_nop_();t=P1;t=t^0xFF;t=t&0xF0;if(t)break;j++;k=k<<1;}k=j*4+i;return k;}/*-----------------------------------------数字温度计驱动子程序--------------------------------------*/void ChangePos(bit sel,unsigned char pos1,unsigned char pos2){ unsigned char i;RST=0;DQ=0;CLK=0;RST=1;DQ=sel;_nop_();CLK=1;_nop_();CLK=0;for(i=0;i<8;i++) {if(pos1&0x80)DQ=1;elseDQ=0;_nop_();CLK=1;_nop_();CLK=0;pos1=pos1<<1; }for(i=0;i<8;i++) {if(pos2&0x80)DQ=1;elseDQ=0;_nop_();CLK=1;_nop_();CLK=0;pos2=pos2<<1;}RST=0;}/*------------------------------------------温度传感器子程序-------------------------------------------*/void Delay100ms() //延时100ms {unsigned char i,j,k;for(i=0;i<8;i++)for(j=0;j<25;j++)for(k=0;k<250;k++);}void Delay15() //延时15us{unsigned char i;for(i=0;i<8;i++);}void Delay60() //延时60us{unsigned char i;for(i=0;i<30;i++);}void Write0TS() //写bit 0 {TSOR=1;TSOR=0;Delay15();Delay15();Delay15();Delay15();TSOR=1;_nop_();_nop_();}void Write1TS() //写bit 1 {TSOR=1;TSOR=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();TSOR=1;_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();Delay15();Delay15();Delay15(); }bit ReadTS() {bit b;TSOR=1;TSOR=0; _nop_();_nop_();_nop_();_nop_();TSOR=1;_nop_();_nop_();_nop_();_nop_();_nop_();b=TSOR;Delay15();Delay15();Delay15();_nop_();_nop_();return b;}void ResetTS() //复位{unsigned char i; TSOR=1;TSOR=0;for(i=0;i<8;i++)Delay60();TSOR=1;while(TSOR);for(i=0;i<8;i++)Delay60();}void WriteByteTS(unsigned char byte) //写一个字节(byte){unsigned char i;for(i=0;i<8;i++){if(byte&0x01)Write1TS();elseWrite0TS();byte=byte>>1;}}unsigned char ReadByteTS() //读一个字节(byte){unsigned char i,j;bit b;j=0;for(i=0;i<8;i++){b=ReadTS();if(b)j+=1;j=_cror_(j,1);}return j;}void InitTS() //初始化温度转换{ResetTS();WriteByteTS(0xCC);WriteByteTS(0x4E);WriteByteTS(0x64);WriteByteTS(0x8A);WriteByteTS(0x1F);}void GetTempTS() //获取温度{ResetTS();WriteByteTS(0xCC);WriteByteTS(0x44);Delay100ms();ResetTS();WriteByteTS(0xCC);WriteByteTS(0xBE);temp2=ReadByteTS();temp1=ReadByteTS();ReadByteTS();ReadByteTS();ReadByteTS();ReadByteTS();ReadByteTS();ReadByteTS();ReadByteTS();temp1=temp1<<4;temp1+=(temp2&0xF0)>>4;temp2=(temp2&0x0F)?5:0;}液晶显示温度计程序。
#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */#define uchar unsigned char#define uint unsigned int#define lcd12864_date PORTB //数据口#define lcd12864_rs PTT_PTT5// PTT_PTT5; //寄存器选择输入#define lcd12864_rw PTT_PTT3 //液晶读/写控制#define lcd12864_e PTT_PTT2 //液晶使能控制#define DQ PORTA_PA0 // 定义DQ引脚为P3.3 #define DQ_HIGH() DDRA=0 //设置数据口为输入#define DQ_LOW() DDRA=1;DQ=0; //设置数据口为输出//uint temp; //温度值variable of temperature uchar A1,A2,A3;void delay2(uint i);void Init_Ds18b20(void);uchar Read_One_Byte();void Write_One_Byte(uchar dat);uint Get_Tmp();void DisplayTemp(uint temp) ;void delay(unsigned int t){uint i,j;for(i=t;i>0;i--)for(j=1000;j>0;j--);}void lcd12864_write_cmd(unsigned char command) //写指令{lcd12864_rs=0;lcd12864_rw=0;lcd12864_e=0;lcd12864_date=command;delay(5);lcd12864_e=1;lcd12864_e=0;delay(5);}void lcd12864_write_data(unsigned char data) // 写数据写入一个字符{lcd12864_rs=1;lcd12864_rw=0;lcd12864_e=0;lcd12864_date=data;delay(5);lcd12864_e=1;lcd12864_e=0;delay(5);}void lcd12864_pos(unsigned char x,unsigned char y) //确定位置{unsigned char pos;if (x==1){x=0x80;}else if (x==2){x=0x90;}else if (x==3){x=0x88;}else{x=0x98;}pos=x+y-1;lcd12864_write_cmd(pos); //显示地址}void io_init(){lcd12864_write_cmd(0x30); //基本指令操作lcd12864_write_cmd(0x0C); //显示开,关光标lcd12864_write_cmd(0x01); //清除LCD的显示内容位置计数器调整为0x00 }void lcd12864_wrtie_string( char *str) //写字符串{while(*str!='\0') //未结束{lcd12864_write_data(*str++);}}void init_LCD(){delay(20);lcd12864_write_cmd(0x30);delay(20);lcd12864_write_cmd(0x30);delay(20);lcd12864_write_cmd(0x0c);//开显示,不显示光标,且不闪烁delay(20);lcd12864_write_cmd(0x01); //清屏delay(20);lcd12864_write_cmd(0x06); //每次写入数据后地址指针加1delay(20);}/**/void Display1(){lcd12864_pos(1,2);lcd12864_wrtie_string("温度调节系统");lcd12864_pos(2,1);lcd12864_wrtie_string("菜单1:当前温度");lcd12864_pos(3,1);lcd12864_wrtie_string("菜单2:目标温度");lcd12864_pos(4,1);lcd12864_wrtie_string("菜单3:温度曲线");}void Display2(){lcd12864_pos(1,2);lcd12864_wrtie_string("温度调节系统");lcd12864_pos(2,1);lcd12864_wrtie_string("当前温度:**度");lcd12864_pos(3,1);lcd12864_wrtie_string("目标温度:**度");lcd12864_pos(4,2);lcd12864_wrtie_string(" Welcome ! ");}void main(void){delay(5);DDRB=0xff;DDRT=0xff;// io_init();init_LCD();lcd12864_pos(2,2);lcd12864_wrtie_string(" Welcome To ! ");lcd12864_pos(3,2);lcd12864_wrtie_string("温度调节系统");delay(2000);lcd12864_write_cmd(0x01); //清屏delay(20);while(1){DisplayTemp(Get_Tmp());lcd12864_pos(2,3);lcd12864_write_data(0x30+A1);lcd12864_pos(2,4);lcd12864_write_data(0x30+A2);lcd12864_pos(2,5);lcd12864_write_data(0x2e);lcd12864_pos(2,6);lcd12864_write_data(0x30+A3);/*Display1() ; */}}/*************精确延时函数*****************/ void delay2(unsigned int i){i=10*i;while(--i);}/****************************************** 此延时函数针对的是12Mhz的晶振delay(0):延时518us 误差:518-2*256=6delay(1):延时7us (原帖写"5us"是错的)delay(10):延时25us 误差:25-20=5delay(20):延时45us 误差:45-40=5delay(100):延时205us 误差:205-200=5delay(200):延时405us 误差:405-400=5*******************************************//*****************DS18B20******************/void Init_Ds18b20(void) //DS18B20初始化send reset and initialization command{char presence=1;while(presence){//DQ = 1; //DQ复位,不要也可行。
关于Nokia5110液晶显示黑屏或者白屏的解决办法——艾米电子赵亮1/3/2013Nokia5110是一款非常经典的液晶显示模块,本人从07年开始接触这款屏,至今已经有5年多的时间。
这里有几点调试的心得体会跟大家分享一下。
(1)该屏目前都是拆机件,没有全新,只不过是产品的成色问题。
(2)驱动的话,目前估计任何处理器的版本都能找到了,我这里提供51的程序下载,如有需要请与我联系。
(3)导电胶条,很多人都认为全新的导电胶条最好,从我的经验来讲,这个胶条有一个对应关系有的时候换一换就搞定了。
这是我测试的经验,一般测试100个屏,首次成功率有80%左右,剩余的20个屏调换一下液晶底板重新再测试,还能有10个以上调试通过,最后剩余的几个通过换导电胶条的方式也能搞定。
我测试的成功率目前是95%以上,从我手里经过的每一个屏都亲自测试过。
年销量大约8000片左右。
(4)就像我在上一条中提到的,这个屏是通过导电胶条接触的,在运输过程中因震动等原因造成的接触松动是常有的事,所以网友在测试的时候,一定首先要确保液晶接触良好,可以通过手轻微的碰一碰观察看看效果,另外可以拆下来重新装上也可以的。
后面有四个金属固定卡槽,用镊子或者尖嘴螺丝刀一碰就可以查下来,然后调整一下位置重新装上。
以上几点不是我今天要说的重点,最近几次通过客户反映、自己总结以及与供货商沟通发现一个规律,为此总结一下,希望能够解决部分问题。
主要是针对一部分应显示黑屏的问题。
以前一直没注意,其实这款液晶初始化的时候有参数可以调整对比度。
如图1所示,基本上市场上的液晶可以分为两种:(1)以LPH7366-x开头的一行字符信息,如图中1~5。
(2)不带有这行信息的如图中6所示。
图 1 5110液晶实物图一般来讲,图中6的液晶比较好驱动,用默认程序就可以点亮,而LPH7366-x开头的液晶有的时候会遇到黑屏或者有黑影的情况,此时可以通过驱动程序初始化进行调整:LCD_write_byte(0xc8, 0); // 设置偏置电压LCD_write_byte(0x06, 0); // 温度校正LCD_write_byte(0x13, 0); // 1:48图 2 液晶初始化参数如果遇到黑屏,可以调整第1行程序的参数,将0xc8进行调整,范围为0x80~0xFF,可以通过二分法进行凑配,比如设置0xaa或者0xee先看看效果,然后逐渐摸索规律进行修改。
单片机原理及应用课程设计电气工程学院一、课程设计任务书1.课程设计项目诺基亚5110液晶显示器应用。
2.设计内容1)设计诺基亚5110液晶显示器应用的总体设计方案;2)以MCS-51系列单片机为核心器件和诺基亚5110液晶显示器组成液晶显示硬件系统;3)系统程序编制与调试;4)电路系统的综合调试;5)撰写课程设计论文;6)完成课程设计论文答辩。
3.设计要求1)以STC89C51单片机为控制核心,对诺基亚5110液晶显示器进行控制。
编程使得在LCD显示器上显示字符,如多行滚动显示:“吉林工程技术师范学院”“电气工程学院”。
等字符,还可以显示别的文字;2)单片机课程设计题目的硬件电路、程序由学生自行设计完成。
3)液晶显示器上要显示出设计人的班级,组长的学号等信息。
4.设计进度(2011年6月13日至2011年6月24日)时间设计内容第1-2天查阅资料,方案比较、设计与论证,理论分析与计算第3-5天硬件电路调试第6-8天系统调试第9-10天书写报告、答辩5.设计地点新实验楼323微机实验室二.参考资料[1]李广弟,朱月秀,王秀山编著.单片机基础. 北京:北京航空航天大学出版社,2001[2] 何立民编著.MCS-51系列单片机应用系统设计系统配置与接口技术.北京:北京航空航天大学出版社,1999[3] 蔡美琴等编著.MCS-51 单片机系统及应用.北京:高等教育出版社.1992二、评语及成绩成绩:指导教师:单片机原理及应用课程设计班级:自动化0845 姓名:刘旭阳学号: 11 号指导教师:方健撰写日期: 2011年6月23日Nokia LCD多功能显示摘要液晶显示器件[1](LCD)是一种高新技术的基础元器件。
它利用液晶的各种电光效应,把液晶对电场、磁场、光线和温度等外界条件的变化在一定条件下转换为可视信号而制成的显示器。
液晶显示器具有低电压、低功耗的特点,与CMOS集成电路相匹配.电池作为电源,适合于便携式显示。
诺基亚3310液晶是一种OEM产品48X84 pixels matrix LCD controller/driver生产厂家Philips, 型号为:PCD8544可显示84*48点,被评为性价比最好的AVR液晶3310lcd驱动电路:Vdd接3.3V(注意:工作电压是3.3V)或者如图接(1、接100欧姆电阻接5V 2、接二极管再接地)V out接4.7uF电容后接地,电容作用是调对比度GND接地其它的接普通IO口编码显示原理:LCD3310屏幕由84*48个点组成,划分为84列*6行个显示单元,每一个显示单元由1*8个点组成,编程控制显示时按坐标定位,X轴从左到右为0、1、。
83,Y轴从上到下为0、1.。
5,每一个显示单元用一个十六进制0x**控制,0x**转换成二进制后是8个01位,每一个显示单元从上到下为点1到点8,分别对应二进制数的最低到最高位,为1的显示黑点,为0的不显示下面将要讲到的字符显示是用六个连续的显示单元控制显示的,将会显示符号*所以我们可以自由的显示字母、汉字、图片,只要将对应的十六进制控制码写入LCD即可,汉字和图片的控制码可借助于专用的字模生成软件生成。
Pin Signal Description Port1:VDDPower Input. Logic supply voltage range VDD to GND : 2.7 to 3.3 V2:SCLKSerial clock. Input for the clock signal: 0.0 to 4.0 Mbits/s.3:SDINSerial data. Input for the data line.4:D/CMode Select. To select either command/address or data input.5:SCEChip enable input. The enable pin allows data to be clocked in. The signal is active LOW.6:GNDGround7:VOUTOuptut voltage. Add external 1-10 uF electrolytic capacitor from VOUT to GND8:RESExternal reset. This signal will reset the device and must be applied to properlyinitialize the chip. The signal is active LOW.程序:(完整可运行)下面的程序是针对飞思卡尔的十六位单片机MC9S12XS128开发的用于其它MCU时只要将端口改一下,就可移植#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */#define sclk PTM_PTM0 //时钟#define sdin PTM_PTM1 //数据#define dc PTM_PTM2 //1写数据,0写指令#define sce PTP_PTP4 //片选#define res PTP_PTP7 //复位byte const mask_table[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};void Initlcd(void);//LCD初始化void write_byte(byte dd,byte a);//写一个字节到LCDvoid qp(void);//清屏void setadd(byte a,byte d);//设置坐标void DelaymS(word delay);//延时byte const dal1[][6]={//字符显示对应的二维十六进制数组,本程序中没有用到{0x00,0x00,0x00,0x00,0x00,0x00}, // 0位显示空白{0x00,0x00,0x00,0x00,0x00,0x00}, // 1{0x00,0x00,0x00,0x00,0x00,0x00}, // 2{0x00,0x00,0x00,0x00,0x00,0x00}, // 3{0x00,0x00,0x00,0x00,0x00,0x00}, // 4{0x00,0x00,0x00,0x00,0x00,0x00}, // 5{0x00,0x00,0x00,0x00,0x00,0x00}, // 6{0x00,0x00,0x00,0x00,0x00,0x00}, // 7{0x00,0x00,0x00,0x00,0x00,0x00}, // 8{0x00,0x00,0x00,0x00,0x00,0x00}, // 9{0x00,0x00,0x00,0x00,0x00,0x00}, // 10{0x00,0x00,0x00,0x00,0x00,0x00}, // 11{0x00,0x00,0x00,0x00,0x00,0x00}, // 12{0x00,0x00,0x00,0x00,0x00,0x00}, // 13{0x00,0x00,0x00,0x00,0x00,0x00}, // 14{0x00,0x00,0x00,0x00,0x00,0x00}, // 15{0x00,0x00,0x00,0x00,0x00,0x00}, // 16{0x00,0x00,0x00,0x00,0x00,0x00}, // 17{0x00,0x00,0x00,0x00,0x00,0x00}, // 18{0x00,0x00,0x00,0x00,0x00,0x00}, // 19{0x00,0x00,0x00,0x00,0x00,0x00}, // 20{0x00,0x00,0x00,0x00,0x00,0x00}, // 21{0x00,0x00,0x00,0x00,0x00,0x00}, // 22{0x00,0x00,0x00,0x00,0x00,0x00}, // 23{0x00,0x00,0x00,0x00,0x00,0x00}, // 24{0x00,0x00,0x00,0x00,0x00,0x00}, // 25{0x00,0x00,0x00,0x00,0x00,0x00}, // 26{0x00,0x00,0x00,0x00,0x00,0x00}, // 27{0x00,0x00,0x00,0x00,0x00,0x00}, // 28{0x00,0x00,0x00,0x00,0x00,0x00}, // 29{0x00,0x00,0x00,0x00,0x00,0x00}, // 30{0x00,0x00,0x00,0x00,0x00,0x00}, // 31{0x00,0x00,0x00,0x00,0x00,0x00}, // sp 32{0x00,0x00,0x2f,0x00,0x00,0x00}, // ! 33{0x00,0x07,0x00,0x07,0x00,0x00}, // " 34{0x14,0x7f,0x14,0x7f,0x14,0x00}, // # 35{0x24,0x2a,0x7f,0x2a,0x12,0x00}, // $ 36{0x36,0x49,0x55,0x22,0x50,0x00}, // & 38 {0x00,0x05,0x03,0x00,0x00,0x00}, // ' 39 {0x00,0x1c,0x22,0x41,0x00,0x00}, // ( 40 {0x00,0x41,0x22,0x1c,0x00,0x00}, // ) 41 {0x14,0x08,0x3E,0x08,0x14,0x00}, // * 42 {0x08,0x08,0x3E,0x08,0x08,0x00}, // + 43 {0x00,0x00,0x50,0x30,0x00,0x00}, // , 44 {0x10,0x10,0x10,0x10,0x10,0x00}, // - 45 {0x00,0x60,0x60,0x00,0x00,0x00}, // . 46 {0x20,0x10,0x08,0x04,0x02,0x00}, // / 47 {0x3E,0x51,0x49,0x45,0x3E,0x00}, // 0 48 {0x00,0x42,0x7F,0x40,0x00,0x00}, // 1 49 {0x42,0x61,0x51,0x49,0x46,0x00}, // 2 50 {0x21,0x41,0x45,0x4B,0x31,0x00}, // 3 51 {0x18,0x14,0x12,0x7F,0x10,0x00}, // 4 52 {0x27,0x45,0x45,0x45,0x39,0x00}, // 5 53 {0x3C,0x4A,0x49,0x49,0x30,0x00}, // 6 54 {0x01,0x71,0x09,0x05,0x03,0x00}, // 7 55 {0x36,0x49,0x49,0x49,0x36,0x00}, // 8 56 {0x06,0x49,0x49,0x29,0x1E,0x00}, // 9 57 {0x00,0x36,0x36,0x00,0x00,0x00}, // : 58 {0x00,0x56,0x36,0x00,0x00,0x00}, // ; 59 {0x08,0x14,0x22,0x41,0x00,0x00}, // < 60 {0x14,0x14,0x14,0x14,0x14,0x00}, // = 61 {0x00,0x41,0x22,0x14,0x08,0x00}, // > 62 {0x02,0x01,0x51,0x09,0x06,0x00}, // ? 63 {0x32,0x49,0x59,0x51,0x3E,0x00}, // @ 64 {0x7E,0x11,0x11,0x11,0x7E,0x00}, // A 65 {0x7F,0x49,0x49,0x49,0x36,0x00}, // B 66 {0x3E,0x41,0x41,0x41,0x22,0x00}, // C 67 {0x7F,0x41,0x41,0x22,0x1C,0x00}, // D 68 {0x7F,0x49,0x49,0x49,0x41,0x00}, // E 69 {0x7F,0x09,0x09,0x09,0x01,0x00}, // F 70 {0x3E,0x41,0x49,0x49,0x7A,0x00}, // G 71 {0x7F,0x08,0x08,0x08,0x7F,0x00}, // H 72 {0x00,0x41,0x7F,0x41,0x00,0x00}, // I 73 {0x20,0x40,0x41,0x3F,0x01,0x00}, // J 74 {0x7F,0x08,0x14,0x22,0x41,0x00}, // K 75 {0x7F,0x40,0x40,0x40,0x40,0x00}, // L 76 {0x7F,0x02,0x0C,0x02,0x7F,0x00}, // M 77 {0x7F,0x04,0x08,0x10,0x7F,0x00}, // N 78 {0x3E,0x41,0x41,0x41,0x3E,0x00}, // O 79 {0x7F,0x09,0x09,0x09,0x06,0x00}, // P 80{0x7F,0x09,0x19,0x29,0x46,0x00}, // R 82{0x46,0x49,0x49,0x49,0x31,0x00}, // S 83{0x01,0x01,0x7F,0x01,0x01,0x00}, // T 84{0x3F,0x40,0x40,0x40,0x3F,0x00}, // U 85{0x1F,0x20,0x40,0x20,0x1F,0x00}, // V 86{0x3F,0x40,0x38,0x40,0x3F,0x00}, // W 87{0x63,0x14,0x08,0x14,0x63,0x00}, // X 88{0x07,0x08,0x70,0x08,0x07,0x00}, // Y 89{0x61,0x51,0x49,0x45,0x43,0x00}, // Z 90{0x00,0x7F,0x41,0x41,0x00,0x00}, // [ 91{0x55,0x2A,0x55,0x2A,0x55,0x00}, //55 92{0x00,0x41,0x41,0x7F,0x00,0x00}, // ] 93{0x04,0x02,0x01,0x02,0x04,0x00}, // ^ 94{0x40,0x40,0x40,0x40,0x40,0x00}, // _ 95{0x00,0x01,0x02,0x04,0x00,0x00}, // ' 96{0x20,0x54,0x54,0x54,0x78,0x00}, // a 97{0x7F,0x48,0x44,0x44,0x38,0x00}, // b 98{0x38,0x44,0x44,0x44,0x20,0x00}, // c 99{0x38,0x44,0x44,0x48,0x7F,0x00}, // d 100{0x38,0x54,0x54,0x54,0x18,0x00}, // e 101{0x08,0x7E,0x09,0x01,0x02,0x00}, // f 102{0x0C,0x52,0x52,0x52,0x3E,0x00}, // g 103{0x7F,0x08,0x04,0x04,0x78,0x00}, // h 104{0x00,0x44,0x7D,0x40,0x00,0x00}, // i 105{0x20,0x40,0x44,0x3D,0x00,0x00}, // j 106{0x7F,0x10,0x28,0x44,0x00,0x00}, // k 107{0x00,0x41,0x7F,0x40,0x00,0x00}, // l 108{0x7C,0x04,0x18,0x04,0x78,0x00}, // m 109{0x7C,0x08,0x04,0x04,0x78,0x00}, // n 110{0x38,0x44,0x44,0x44,0x38,0x00}, // o 111{0x7C,0x14,0x14,0x14,0x08,0x00}, // p 112{0x08,0x14,0x14,0x18,0x7C,0x00}, // q 113{0x7C,0x08,0x04,0x04,0x08,0x00}, // r 114{0x48,0x54,0x54,0x54,0x20,0x00}, // s 115{0x04,0x3F,0x44,0x40,0x20,0x00}, // t 116{0x3C,0x40,0x40,0x20,0x7C,0x00}, // u 117{0x1C,0x20,0x40,0x20,0x1C,0x00}, // v 118{0x3C,0x40,0x30,0x40,0x3C,0x00}, // w 119{0x44,0x28,0x10,0x28,0x44,0x00}, // x 120{0x0C,0x50,0x50,0x50,0x3C,0x00}, // y 121{0x44,0x64,0x54,0x4C,0x44,0x00}, // z 122{0xD5,0x01,0x80,0x01,0x80,0xAB}, // <50 123 {0xFF,0x81,0x81,0x81,0x81,0xFF}, //50<= <100 124{0xFF,0x81,0xBD,0xBD,0x81,0xFF}, //100<= <150 125{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}, //>=150 126{0x00,0x00,0x00,0x00,0x00,0x00} // sp 127};/*******************显示一幅图****************/uchar dal11[]={//------------------------------------------------------------------------------/*--图像的数据*//*-- 图像宽度*高度=84x48 --*/0xE0,0xFE,0xFE,0xFE,0xFF,0xFF,0xFF,0xE7,0xFB,0xBB,0xBB,0x5B,0xE7,0xFF,0xFF,0xE7,0xFB,0xBB,0xBB,0x5B,0xE7,0xFF,0xFF,0xF7,0xF7,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xF7,0xFB,0xFB,0xF7,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xFB,0xFB,0x03,0xFB,0xFB,0xF3,0xFF,0xFF,0x3F,0x5F,0x5F,0x5F,0x5F,0x3F,0xFF,0xFF,0x3F,0xDF,0xDF,0xDF,0x9F,0xFF,0xFF,0xFF,0xDF,0xDF,0x07,0xDF,0xDF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFE,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF9,0xF7,0xF7,0xF7,0xF7,0xF8,0xFF,0xFF,0xF9,0xF7,0xF7,0x37,0xF7,0xF8,0xFF,0xFF,0xF7,0xF7,0xF0,0xF7,0xF7,0x7F,0x7F,0x7F,0x7C,0x7B,0x77,0x77,0x7B,0x7C,0x7F,0x7F,0x3F,0x7F,0xFF,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x77,0xB0,0x77,0xFF,0xFF,0x3F,0xFF,0xF8,0xF7,0xF7,0xF7,0xF7,0xFB,0xFF,0xFF,0xF3,0xF6,0xF6,0x36,0xF9,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0xF7,0xF7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x81,0xBD,0xBD,0xBD,0xBD,0x00,0xBD,0xBD,0xBD,0xBD,0x80, 0xFD,0xFF,0xFF,0xFF,0x00,0xFF,0xFD,0xED,0xED,0x01,0xED,0xCD,0xAD,0xFD,0xFF,0x00, 0xFF,0xFF,0xFF,0x00,0xDB,0xDB,0x00,0x7F,0x5B,0xDB,0xDA,0x03,0xDA,0xDB,0xDB,0xDB, 0xFF,0xF7,0x76,0xB6,0xC6,0xF6,0x36,0xF7,0xFB,0x7B,0x80,0xFB,0xFB,0x01,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0xFB,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0xF0,0xFF,0xDF,0x1D,0xFC,0xFE,0xFE,0xF0,0xFF,0xF7,0xFB,0xFC,0xFF,0xFE,0xFD,0xF3,0xFB,0xFF,0xFE,0xFC,0xFE,0xFE,0xFE,0xF6,0xFA,0xFD,0xFE,0xFF,0xFB, 0xF7,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE3,0xDD,0xBE,0xBE,0xBE,0xDD,0xFF,0xBE,0xBE,0x80,0xBD,0xBE,0xFE,0xFC,0xFF,0xFF,0xCD,0xB6,0xBA,0xBA,0x81,0xBF, 0xFF,0xFF,0x99,0xB6,0xB6,0xB6,0xCC,0xFF,0xFF,0xFF,0x80,0xBD,0xBE,0xBE,0xBE,0xC1, 0xFF,0xFE,0xFC,0xE2,0x1F,0xCF,0xF2,0xFC,0xFE,0xFF,0xE3,0xDD,0xBE,0xBE,0xDD,0xE3, 0xFF,0xFF,0xC1,0xBA,0xBA,0xBA,0xBA,0xD9,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x7F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x7F,0x0F,};void xp11()//写图函数{uchar e;uchar t;uchar k1;uint d;d=0;for(t=0;t<6;t++){for(k1=0;k1<84;k1++){setadd(k1,t);e=dal11[d];write_byte(e,1);d=d+1;}}}//主函数实现的功能是循环显示图片和擦除void main(void){/* put your own code here */DisableInterrupts;/******************SetClock*******************/CLKSEL=0X00; //disengage PLL to systemPLLCTL_PLLON=1; //turn on PLLSYNR =0xc0 | 0x07;REFDV=0xc0 | 0x01;POSTDIV=0x00; //pllclock=2*osc*(1+SYNR)/(1+REFDV)=128MHz;_asm(nop); //BUS CLOCK=64M_asm(nop);while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it;CLKSEL_PLLSEL =1; //engage PLL to system;while(FSTAT_CCIF == 0); //wait if command in progressFCLKDIV = 0x0F; //set prescaler//EnableInterrupts;for(;;){xp11();DelaymS(2000);qp();DelaymS(2000);_FEED_COP(); /* feeds the dog */} /* loop forever *//* please make sure that you never leave main */ }void Initlcd(void){//LCD端口初始化,GPIO输出DDRM_DDRM0=1;DDRM_DDRM1=1;DDRM_DDRM2=1;DDRP_DDRP4=1;DDRP_DDRP7=1;DelaymS(1);res=0;DelaymS(1);res=1;sce=0;DelaymS(1);sce=1;sdin=1;sclk=1;write_byte(0x21,0);//初始化LCD,write_byte(0xcc,0);//设置液晶偏执电压write_byte(0x20,0);//使用基本指令qp();//write_byte(0x0c,0); //设定显示模式,正常显示sce=0;}void write_byte(byte dd,byte a)//{char i;dc=a;for(i=0;i<8;i++){if(dd&mask_table[i]) {sdin=1;} else {sdin=0;}sclk=0;sclk=1;}dc=1;sce=1;sdin=1;}void setadd(byte a,byte d)//{write_byte((a|0x80),0); //Xwrite_byte((d|0x40),0); //Y}void qp(void)//{byte t;byte k;for(t=0;t<6;t++){for(k=0;k<84;k++){setadd(k,t);write_byte(0,1);}}}void DelaymS(word delay){word i, j;for ( i = delay; i != 0; i -- ){for ( j = 7000; j != 0; j -- ) ;for ( j = 6320; j != 0; j -- ) ;} }。
该模块具有以下特点:●84x48 的点阵LCD,可以显示4 行汉字,●采用串行接口与主处理器进行通信,接口信号线数量大幅度减少,包括电源和地在内的信号线仅有9 条。
支持多种串行通信协议(如AVR 单片机的SPI、MCS51 的串口模式0等),传输速率高达4Mbps,可全速写入显示数据,无等待时间。
●可通过导电胶连接模块与印制版,而不用连接电缆,用模块上的金属钩可将模块固定到印制板上,因而非常便于安装和更换。
●LCD 控制器/驱动器芯片已绑定到LCD 晶片上,模块的体积很小。
●采用低电压供电,正常显示时的工作电流在200μA 以下,且具有掉电模式。
LPH7366 的这些特点非常适合于电池供电的便携式通信设备和测试设备中C8051F学习笔记:Nokia 5110驱动Nokia5110是一款经典机型,可能由于经典的缘故,旧机器很多,所以很多电子工程师就把旧机器的屏幕拆下来,自己驱动Nokia5110,用于开发的设备显示,取代LCD1602。
使用Nokia5110液晶的四大理由1)性价比高,LCD1602可以显示32个字符,而Nokia5110可以显示15个汉字,30个字符。
Nokia5110裸屏仅8.8元,LCD1602一般15元左右,LCD 12864一般50~70元。
2)接口简单,仅四根I/O线即可驱动,LCD1602需11根I/O线,LCD12864需12根。
3)速度快,是LCD12864的20倍,是LCD1602的40倍。
4)Nokia5110工作电压3.3V,正常显示时工作电流200uA以下,具有掉电模式,适合电池供电的便携式移动设备。
可以在市场上买到Nokia5110的裸屏和带PCB的Nokia5110屏幕,因为N okia5110是不带背光的,所以通常商家会在PCB上按了几个背光LED,上电就能亮,建议大家还是买那种连上PCB的5110。
Nokia5110原理图:商家把该引出的管脚都引出了,下面就可以连接C8051F的相应管脚,写程序驱动5110了。
3.3V的稳压管
Nokia5110液晶屏完全新手学习笔记(一)
3人收藏此文章, 我要收藏发表于1年前 , 已有3442次阅读共1个评论
小Jay已经很久没有接触嵌入式了,这些天在学习51,还故意买了块Nokia 5110液晶屏来玩玩(因为便宜吧,嘻嘻~)。
一开始,小Jay不才,看5110芯片资料一头雾水,囧!不过呢,小Jay还是很努力的,经过几番研究,终于有些眉目,其实5110也并不难的。
此文提供给和我一样的鸟哥参考,希望能帮得上忙。
(*^__^*) 嘻嘻
声明:
1、本文章用于自己的知识回顾和提供给有需要的初学者,高手请飘过~
2、本文章的内容均从“诺基亚5110液晶屏资料驱动芯片PCD8544中文数据手册.pdf”中,结合自己的理解,整理并简化出来的知识,更多详细内容请查看芯片手册。
另外,内容有不对的地方,望指正。
现在我们一步一步来:
一、硬件链接:
首先,看一下硬件(仅供参考,读者已对自己的硬件很熟悉,可以直接跳过。
):
说明:
图1:排针从左至右1到8位。
图2: 5110接口在板子中的区域。
图3: 8位排针对应连接5110液晶屏相应的引脚。
图4: 5110液晶显示屏对应8位排针JP19的插入方向。
再看一下我的板子的原理图:
图5中,显示了8位排针JP19(即5110液晶屏的引脚)其中的5根与51单片机(本人的为STC89C516RD+)的PB I/O口的连接方式:
5110_RST <---> PB2(P1.2)
5110_SCE <---> PB3(P1.3)
MOSI(sdin) <---> PB5(P1.5)
MISO(dc) <---> PB6(P1.6)
SCK <---> PB7(P1.7)
这样,我们知道了用51单片机中的I/O口和5110引脚的链接方式。
二、引脚
接线图请根据程序里的定义连接,51的程序默认接线为:
看了这些默认接线,可能有个疑问:“这些位变量(引脚)究竟有什么用呢?”,带着这个疑问,请看5110芯片手册中的引脚说明
(重点看红色区域):
从这个引脚说明中,我们知道了不同的引脚,对应的功能。
那么,如何使用这些引脚来控制5110工作呢?
三、指令
5110液晶显示屏(PCD8544芯片),是通过发送指令和写入数据RAM来控制和显示数据的。
指令格式分为两种模式:
1、如果D/C(模式选择)置为低(为0),即位变量 dc = 0,为发送指令模式,那么接下来发送的8位字节解释为命令字节。
2、如果D/C置为高,即dc = 1; 为写入数据RAM模式,接下来的字节将存储到显示数据RAM。
注意:
1、每一个数据字节存入之后,地址计数自动递增。
在数据字节最后一位期间会读取D/C信号的电平。
2、每一条指令可用任意次序发送到PCD8544。
首先传送的是字节的MSB(高位)。
指令集:
结合表1和表2, 指令集不难读懂。
现在以红色横线所标识的指令来举例说明:
第一条(红色横线1),功能设置指令:
首先,D/C为0, 表示现在是指令模式,然后从表2看:
若要“使用基本指令集”,则PD = 0, V = 0, H = 0,那么相应地DB7~DB0分别为 00100000b,即0x20。
也就是说,发送0x20就能设置液晶“使用基本指令集”。
同理,使用“使用扩展指令集”,指令值为0x21。
第二条(红色横线2),显示控制:
显示模式有4种,分别是:显示空白,普通模式,开所有显示段,反转映象模式。
这些模式分别使用D and E来组合控制。
这样,我们控制显示为“普通模式”, 那么D要为1,E要为0, 这时DB7~DB0分别为 0000 1100b,即指令值为0x0C。
第三条(红色横线3),写入数据指令:
写入数据,首先D/C必须为1,表示现在是写入数据RAM模式,
DB7~DB0就是相应的数据值。
到这里,我们知道了5110液晶屏是使用这样的指令集来控制和显示数据的。
那么,我们如何把指令值写进去呢?
一篇发不完,请看笔记二。
四、时序图
没错,要向液晶屏写入数据,我们需要通过模拟一个串行总线协议来写入数据。
先来看看传送一个字节(指令)的时序图:
如果能看懂时这些序图的兄弟,就不要听我废话啦。
请飘过~~
从时序图1看出:
1. SCE片选为0时开始发送数据。
2. 时钟信号SCLK仅在SCE片选为0时有效。
3. SDIN数据输入,需要在时钟信号SCLK有效时开始发送数据,且在SCLK的正边缘取样, 注意,数据是从高位开始发送的。
知道了传送数据的时序,我们需要使用程序来模拟这个时序,从而发送指令控制液晶屏。
接下来,看看实例。
五、程序实例
代码一:
代码分析:
这个是一个写入一个字节数据的模拟时序函数,具有两个参数,dt为要写入的字节,command为数据/命令选择。
首先,需要sce拉低电平,开始发送数据。
i循环8次,写入8位数据,现以“设置扩展指令集”(即写入
0x21)全过程如下:
i = 0:dt = 0x21 = 0010 0001 b
dt & 0x80:
0010 0000
1000 0000 &
0000 0000 = 0,则sdin = 0 (DB7),
dt左移1位,dt<<1 = 0100 0010 b,
模拟时钟信号sclk = 0, sclk = 1,以使采样
∙i = 1: dt = 0100 0010b
dt & 0x80:
0100 0010
1000 0000 &
0000 0000 = 0, 则sdin = 0 (DB6),
dt左移1位,dt<<1 = 1000 0100 b,
模拟时钟信号sclk = 0, sclk = 1,以使采样
∙i = 2: dt = 1000 0100b
dt & 0x80:
1000 0100
1000 0000 &
1000 0000 != 0,则sdin = 1 (DB5),
dt左移1位,dt<<1 = 0000 1000 b,
模拟时钟信号sclk = 0, sclk = 1,以使采样
∙i = 3:dt = 0000 1000b
dt & 0x80:
0000 1000
1000 0000 &
0000 0000 = 0,则sdin = 0 (DB4),
dt左移1位,dt<<1 = 0001 0000 b,
模拟时钟信号sclk = 0, sclk = 1,以使采样
∙i = 4:dt = 0001 0000b
dt & 0x80:
0001 0000
1000 0000 &
0000 0000 = 0,则sdin = 0 (DB3),
dt左移1位,dt<<1 = 0010 0000 b,
模拟时钟信号sclk = 0, sclk = 1,以使采样
∙i = 5:dt = 0010 0000b
dt & 0x80:
0010 0000
1000 0000 &
0000 0000 = 0,则sdin = 0 (DB2),
dt左移1位,dt<<1 = 0100 0000 b,
模拟时钟信号sclk = 0, sclk = 1,以使采样
∙i = 6:dt = 0100 0000b
dt & 0x80:
0100 0000
1000 0000 &
0000 0000 = 0,则sdin = 0 (DB1),
dt左移1位,dt<<1 = 1000 0000 b,
模拟时钟信号sclk = 0, sclk = 1,以使采样
∙i = 7:dt = 1000 0000b
dt & 0x80:
1000 0000
1000 0000 &
1000 0000 != 0,则sdin = 1 (DB0),
dt左移1位,dt<<1 = 0000 0000 b,
模拟时钟信号sclk = 0, sclk = 1,以使采样
过程很罗嗦,不过很简单,呵呵~~
可见,这样循环8次,写入了8位数,DB7~DB0 = 0010 0001b = 0x20,正是“扩展指令集”的指令值。
代码二:
代码分析:
初始化步骤可以参照芯片手册中的编程示例:
代码三:
这些很容易理解,还原看一下:
上面的矩阵,就是一个字母"A",可见只要把这组值写入即可以显示“A”。
最后,到这里,我们已经学会了Nokia 5110液晶屏的原理和基本控制。
是不是觉得很简单。
呵呵~~~希望帮到大家,写得不好,请见谅,写的不对,望指正!
小Jay累了。